Skip to content

Add the Remotion project for the film Export before 16 October - #170

Merged
marcosqlbi merged 8 commits into
mainfrom
docs/film-export-before-october
Sep 29, 2026
Merged

marcosqlbi merged 8 commits into
mainfrom
docs/film-export-before-october

Conversation

@marcosqlbi

Copy link
Copy Markdown
Collaborator

tools/films is a Remotion project that renders the 30-second film "Export before 16 October", the third part of the launch campaign. It tells people who use the Microsoft Whiteboard app with a personal account to export each board before the app retires on 16 October 2026, and shows SQLBI Whiteboard opening the exported ZIP. Like tools/AssetGenerator, it sits outside Whiteboard.sln.

Remotion is used under its free license, because SQLBI has fewer than four employees. The README records this with the license URL.

Rendering

cd tools\films
npm install
npm run studio       # preview
npm run stills       # review stills of every shape, into out\stills
npm run render:all   # every rendition and the poster, into out

There is one script per rendition: render:16x9, render:1x1, render:4x5, render:9x16, and render:poster. Each shape renders at twice its size into out\master (3840 × 2160 for 16:9), and ffmpeg scales it down to the rendition. Rendering runs on Windows, because the type is Segoe UI Variable Display from the installed fonts. Remotion's own Chrome Headless Shell finds the real font; out\stills\font-check.png measures it against Segoe UI Variable Text, Segoe UI, and a monospace fallback.

The four shapes come from one composition. A landscape frame puts the text in a navy panel on the left, as the social card does. A square or portrait frame puts the window at the top and the text in a navy panel below it.

Captures, voice, and music

  • Captures go in tools\films\captures\ under the names in the README's shot list (C1 to C4). Until a file is there, the film shows a navy placeholder with the capture's name and what it will show. src/film1/captures.ts sets where the film starts reading each capture, its speed, and where the numbered callouts sit. The callout positions are estimates for a 2560 × 1440 capture at 150 % scaling, so they need checking against the real captures.
  • The voice goes in tools\films\audio\film1-vo.mp3. audio/film1-vo.txt holds the script to paste into ElevenLabs and the phrase each beat covers. Until the file exists the film carries a silent track of the same length.
  • Beat start times are in src/film1/beats.json, so aligning the film to the voice is an edit of that file. The README gives the ffmpeg command that lists the pauses between phrases.
  • The music bed goes in tools\films\audio\film1-bed.mp3. It plays 22 dB below the voice and fades out under the end card. No music was present, so these renders have none.

Captures, audio files, node_modules, and everything under out are gitignored.

Renditions

These were rendered with the placeholders and the silent track, so the files will grow once real captures are in.

File Size
film1-16x9.mp4, 1920 × 1080 1,282,230 bytes (1.2 MB)
film1-1x1.mp4, 1080 × 1080 1,028,067 bytes (1.0 MB)
film1-4x5.mp4, 1080 × 1350 1,031,466 bytes (1.0 MB)
film1-9x16.mp4, 1080 × 1920 1,056,986 bytes (1.0 MB)
film1-poster.jpg, 1920 × 1080 139,590 bytes (136 KB)

Each video is H.264 High, yuv420p (limited range), 30 fps, 900 frames, with an AAC track at 128 kbps and the index at the start of the file. ffprobe reports 30.000 s for the file, the video, and the audio, and the audio starts at 0 s. The review stills at 2, 6, 10, 14, 20, 25, and 29 s were checked for every shape: text inside the safe area, nothing clipped, and the font is Segoe UI Variable Display.

🤖 Generated with Claude Code

marcosqlbi and others added 8 commits September 27, 2026 17:37
tools/films is a Node project outside Whiteboard.sln that renders the 30-second
campaign film in four shapes (16:9, 1:1, 4:5, 9:16) and a poster from one
composition. The layout follows the aspect ratio and keeps text, callouts, and
the end card inside each platform's safe area.

The four screen captures, the voice, and the music bed are not committed. Until
a capture exists in captures/, the film shows a labelled placeholder in its
place, and until audio/film1-vo.mp3 exists it carries a silent track. Beat start
times are in src/film1/beats.json, so aligning the film to the voice is an edit
of that file.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
scripts/elevenlabs.mjs reads the key from ELEVENLABS_API_KEY, writes the
voice track from the script in film1-vo.txt and an instrumental bed into
audio/, and moves the beats in beats.json to where each phrase starts in
the voice track. The README says which key permissions it needs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The read covered Settings, Export, Zip in 2.5 seconds, and the capture
behind it shows three clicks and a save dialog, so the voice text gets a
Read section with short breaks between the steps. The beat starts now
follow the first word of each phrase in the generated track, found with
ElevenLabs forced alignment.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The Read section spells SQLBI the way it is said, so the on-screen script
stays as written while the generated voice says Sequel B I. The voice
command takes --speed for a read that runs past the film. The beats
follow the chosen read (Eric, eleven_multilingual_v2, 27 s).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ddress

The voice put a pause between the two parts of Sequel B I in the
sentence and none in the address, so the Read section uses a different
spelling in each place. The beats follow the new read.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The four recordings of 27 September are 4K at 30 fps and longer than the
shot list, so each capture now starts where its action starts and plays
at the rate that fits its beat. The callout boxes were read from the
frames: the gear, the Export menu item, and the Zip (HTML+JSON) button.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The new recordings show one board, Memory, in all four captures, and
their video tracks are shorter than their audio, so each trim now ends
inside the video track. C3 reads 1.4 to 8.0 s at 1.25x, because the beat
gives it 5.3 s and the board is on screen from 5.8 s of the capture.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The export deadline applies to personal accounts, because work and school
boards stay in Teams and on the web. The first caption names the account
so the film's audience is stated before the deadline is.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@marcosqlbi
marcosqlbi merged commit 3f01a8c into main Sep 29, 2026
5 checks passed
@marcosqlbi
marcosqlbi deleted the docs/film-export-before-october branch September 29, 2026 08:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant