Files
homarr/tools/motion-reel
Thomas 229bd4b3ed chore: use Bun package management and Turbo remote caching (#6978)
* feat: migrate tooling and runtimes to bun

* fix: serialize act installs and adapt backup checks

* fix: finish bun scripts and rootless act setup

* fix: support bun images in runtime benchmarks

* fix: keep a single bun toolchain configuration

* fix: include docs mascot sources in workshop build

* docs: use bun in remaining tool commands

* fix: complete bun sqlite development tooling

* docs: explain sqlite development adapter

* fix: align remaining commands and local ci validation

* fix: use renovate regex fallback with bun

* fix: finalize bun sqlite connections during cleanup

* fix: preserve sqlite foreign key enforcement

* fix: align docker build frontends

* fix: prepare release versions with bun

* Add Bun benchmarks and preserve SQLite connection defaults

* Benchmark Bun installs, conflicts and production workloads

* Force Bun workspace tools and HTTP/1.1 upstream streaming

* Exclude benchmark evidence from Docker contexts

* Expose branch benchmarks through CI

* Verify hydrated widget data in production benchmarks

* Measure image archives and document benchmark protocol

* Audit dependency sharing across every workspace

* Pin pnpm for nested baseline benchmark scripts

* Preserve nested manager pinning on benchmark resume

* Include application and runtime image footprints

* Fail benchmark gates on candidate command errors

* Report complete build overhead and sampled memory bounds

* Validate migration comparisons across pinned revisions

* Record configurable runtime memory budgets

* Retain out-of-memory kills in runtime budget probes

* Reject OOM events consistently across runtime metrics

* Record complete Bun migration benchmarks

* Record memory diagnosis and correct Turbo caching

* Use Bun package management while preserving Node runtimes

* Keep native build fallbacks and exclude development artifacts

* Fix Node ESM metadata and isolate local CI configuration

* Measure development performance and isolate act environment

* Support isolated environment files in rootless act

* Validate the full migration range with act

* Preserve native SQLite binding for bundled migrations

* Use documented dev defaults and report benchmark scope

* Validate dev defaults and isolate restart measurements

* Record package-manager and development benchmarks

* Keep benchmark measurements and link full command artifacts

* Clean up temporary act environment files

* Validate Node runtimes in package-manager comparisons

* Validate every workspace in manual CI runs

* Retain patched nested brace expansion versions

* Complete package-manager and Node performance report

* Normalize archived benchmark logs

* Record final hosted validation

* Cache both Next builds with platform isolation

* Prime cache with write-only mode

* Split Next artifacts below Cloudflare upload limit

* Assemble coherent standalone cache outputs

* Preserve traced middleware entrypoints

* Assemble traced directory links before files

* Separate cached dependencies from assembled output

* Record signed Turbo cache benchmarks

* Remove archived benchmark captures

Full benchmark evidence is preserved at 8f7d3bcd14109bfb13fa664d31710b88d820ad66.

* Remove migration benchmark harness

* fix: correct migration launch and local Act prerequisites

* Consolidate Turbo caches and production artifacts

* Exclude generated files from Docker cache inputs

* fix: address Bun migration review findings

* fix: check restored compiler bundle manifests
2026-10-07 16:38:14 +02:00
..
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00
2026-10-02 21:00:14 +02:00

Homarr motion reel

The Homarr 2.0 motion reel: the original feature reel, then everything new in v2. It renders two cuts:

  • homarr-motion-reel.mp4: the full reel (about 61 s).
  • homarr-motion-reel-v2.mp4: the v2 part only, from the rotating 3D logo (about 44 s).

Every frame is a pure function of reel time, so any frame can be rendered on its own: window.renderFrame(t) in reel.js lays out DOM, SVG, canvas and a three.js layer for reel time t. Headless Chromium screenshots each frame and ffmpeg averages sub-frames into real motion blur. The music and sound effects are synthesised in Python, so there are no audio assets.

Reel time is a dense 20-bar choreography at 128 BPM. make_warp.py maps output time to reel time so each shot slows down once its content is on screen and every cut lands on a beat. Change pacing there, not in reel.js.

Requirements

Run bun install at the repository root first; the scripts use its Playwright, esbuild and @tabler/icons. You also need Python 3 with numpy and scipy, ffmpeg, npm and network access for the first setup.

Render

Run everything from this directory.

python3 setup.py      # fonts, icons and the three.js bundle into assets/
python3 make_warp.py  # warp-a (original reel), warp-b (v2), warp-global and warp-v2cut
python3 score.py global && python3 score.py v2cut
WARP=warp-a.json OUT=chunks-a WORKERS=4 bun render.mjs
WARP=warp-b.json OUT=chunks-b WORKERS=4 bun render.mjs
./assemble.sh

Rendering is CPU-bound and takes about 20 minutes with eight workers (both halves at once). Chunks are resumable: stop the renderer at any time and run it again. Delete a chunk directory after changing reel.js or the warp.

Use bun preview.mjs <reel seconds...> to screenshot single frames into preview/ while you work. Scene start times are listed in the scene headers in reel.js.

Files

File Purpose
reel.js All scenes, transitions and overlays
index.html Stage, fonts and blur filters
three/ 3D logo and wordmark rigs from the 3D logo lab, bundled by setup.py
make_warp.py Shot lengths in beats and per-shot speed ramps
synth.py Drum, bass, pad, bell and effect synthesis
score.py Music arrangement and effects placed on reel events through the warp
render.mjs Parallel Playwright renderer with motion blur
assemble.sh Joins chunks, adds the soundtrack and the v2 cut's black pre-roll