Skip to content

Editor suite step 3: caption fonts, animations and safe zones (#174) - #230

Open
ColinGPT9 wants to merge 2 commits into
editor-suite/step-2-make-clips-againfrom
editor-suite/step-3-caption-fonts
Open

ColinGPT9 wants to merge 2 commits into
editor-suite/step-2-make-clips-againfrom
editor-suite/step-3-caption-fonts

Conversation

@ColinGPT9

Copy link
Copy Markdown
Owner

Step 3 of the editor suite, stacked on #225 (step 2). Covers the fonts and caption-animation parts of #174.

What's new

  • 12 caption fonts that come with the app (all SIL OFL 1.1, about 1.1 MB): Anton, Archivo Black, Bangers, Barlow ExtraBold, Bebas Neue, Bowlby One, Kanit ExtraBold, Lilita One, Passion One Black, Poppins ExtraBold, Russo One and Titan One. The font list shows them in their own group, each name in its own typeface.
  • Caption animations: Pop, Fade, Bounce, Karaoke and Slide up.
  • Safe zones for TikTok, Instagram Reels and YouTube Shorts, which keep captions clear of the apps' buttons on vertical clips.
  • Presets: Classic (today's look), Bold pop, Clean fade, Karaoke, Bounce and Slide up, as a row of chips above the caption settings, with an animated example.

What stays the same

With no animation and the safe zone off, the captions file and the FFmpeg arguments are exactly what they were. The existing snapshots are untouched and the golden renders are identical.

How it works

  • video/fonts.py copies the fonts a captions file uses into a fonts folder beside it (after a sha256 check) and adds :fontsdir=fonts to the subtitles filter only when a bundled font is used. All eight burn places go through it.
  • A bundled font is kept only when it has the clip's language's letters; otherwise the Windows font for that language is used. A missing or damaged font burns in Arial with a plain line in the job log.
  • New internal routes: GET /fonts, GET /fonts/{file}, GET /caption-presets. The page's CSP gains font-src for the engine.
  • Remote rendering's protocol number goes from 1 to 2, so a render PC on an older app is asked to update instead of silently burning Arial.

Checks

  • QC and a render review over five rounds; defects 3-D1 to 3-D20 fixed (recorded in docs/editor-suite/state.json). The last four were fixed by hand and were not re-reviewed by an independent agent.
  • Black-box scenarios S1 to S7: all passed.
  • Performance: plain clips byte-identical, nothing slower than 4.9%, caption styles within noise.
  • UX and accessibility: passed with minors; the example honours reduced motion.

Known limits

  • Karaoke is not used for right-to-left languages (Arabic, Hebrew); those captions are shown plain.
  • On a clip that was cut or sped up, karaoke's fill follows each caption evenly by word length, not each word exactly.
  • Hindi and Arabic captions are not measured for the safe zone, so a very long word can still reach under the buttons.

Not for merging yet: waiting for the owner's click-through.

🤖 Generated with Claude Code

- 12 OFL caption fonts bundled in assets/fonts with a sha256 manifest and
  their licences; video/fonts.py stages them beside the captions file and
  adds fontsdir only when a bundled font is used (all eight burn places).
- Caption animations: pop, fade, bounce, karaoke and slide, written as ASS
  tags. Karaoke is burned plain for right-to-left languages, and spreads
  its fill by word length on a clip that was cut or sped up.
- Safe zones for TikTok, Instagram Reels and YouTube Shorts keep captions
  clear of the apps' buttons on vertical clips.
- Six caption presets (config/caption_presets.json) and the caption
  controls: preset chips, the font list in two groups, Animation, Safe
  zone and an animated example that honours reduced motion.
- GET /fonts, /fonts/{file} and /caption-presets; CSP gains font-src for
  the engine.
- With animation none and safe zone off the captions file and the FFmpeg
  arguments are unchanged: the existing snapshots and the golden renders
  are identical.

Checked: QC and a render review over five rounds (3-D1 to 3-D20 fixed; the
last four by hand and not re-reviewed), black-box S1 to S7, performance and
UX. Not merged; waiting for the owner's click-through.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
clips-kitty-web Ready Ready Preview Nov 12, 2026 4:28am UTC
1 Skipped Deployment
Project Deployment Actions Updated
clips-studio Ignored Ignored Preview Nov 12, 2026 4:28am UTC

The name was built from the process and thread ids in hex, which on
Linux is longer than the font's own file name, so the step 3 test for
long clip folders failed in CI. It is now 13 characters everywhere.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview – clips-kitty-web — 45a2ea3e Deployed Nov 12, 2026 by vercel[bot]
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