Skip to content

Add promo video assets and rendering pipeline - #22

Open
steveseguin wants to merge 5 commits into
masterfrom
claude/exciting-goodall-ardecl
Open

steveseguin wants to merge 5 commits into
masterfrom
claude/exciting-goodall-ardecl

Conversation

@steveseguin

Copy link
Copy Markdown
Owner

Summary

Adds a complete promotional video package for CAPTION.Ninja, including a 1:54 main video, 30-second teaser, live browser-based animation, and original synthesized soundtrack.

Key Changes

  • promo/index.html - Interactive HTML5 animation that mirrors the video content, playable in-browser with synchronized soundtrack
  • promo/soundtrack.py - Python script that synthesizes the entire 114-second soundtrack from scratch (no samples):
    • 120 BPM track in D major with dynamic chord progressions
    • Synthesized instruments: kick, clap, snare, hi-hat, bass, pads, plucks, leads, bells
    • 15+ sound effects: whooshes, slashes, impacts, pops, blips, clicks, typing, confetti, bonks, risers
    • PolyBLEP band-limited oscillators and ADSR envelopes for clean synthesis
    • Automatic cue placement from exported sound effect list
  • promo/render.mjs - Node.js rendering pipeline that:
    • Frames out the HTML animation using Playwright + Chromium
    • Generates the soundtrack via the Python script
    • Encodes video with ffmpeg (H.264 + AAC, configurable quality)
    • Produces main video, teaser cut, and poster frame
    • Supports parallel worker rendering and frame range selection
  • promo/README.md - Complete documentation of the video content, script breakdown, and rendering instructions
  • Font files - Bricolage Grotesque and Inter font families (WOFF2 format) with OFL licenses
  • Video assets - Pre-rendered MP4 files (main video, teaser) and poster JPEG
  • Soundtrack MP3 - Exported audio for use on the live website

Implementation Details

The soundtrack uses scipy signal processing for band-limited synthesis and dynamic filtering. The rendering pipeline is fully automated: render.mjs orchestrates Playwright for frame capture, Python for audio generation, and ffmpeg for encoding. The HTML animation is self-contained and can be viewed standalone at caption.ninja/promo/ with the same visual and audio experience as the video.

https://claude.ai/code/session_01R8j3iT76b2oSLLnei6fzme

promo/index.html is a two-minute animated introduction to CAPTION.Ninja
(hook, three-step setup, translation, TTS, pro tools, self-hosting and a
call to action). Every frame is a pure function of time, so the page plays
live in a browser and renders frame-exact video.

promo/soundtrack.py synthesises an original 120 BPM soundtrack and places
sound effects from the cue list the page exports. promo/render.mjs renders
the page with headless Chromium and ffmpeg into an MP4 plus a 30-second
teaser. Fonts are Bricolage Grotesque and Inter (OFL); icons are Lucide (ISC).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R8j3iT76b2oSLLnei6fzme
End the opening and reveal scenes exactly on the slash flash so the white
frame never shows the previous scene, and fix the player's big Play button
to start from the beginning. render.mjs now also cuts a 30-second teaser
(the opening spliced onto the call to action on the same downbeat) and
writes partial --from/--to previews to the temp folder so they never
replace the finished video.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R8j3iT76b2oSLLnei6fzme
caption-ninja-promo.mp4: 1:54, 1920x1080, 30 fps, H.264 + AAC, -14.9 LUFS.
caption-ninja-teaser-30s.mp4: the opening spliced onto the call to action.
poster.jpg is the thumbnail; soundtrack.mp3 is used by the live page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R8j3iT76b2oSLLnei6fzme
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-29T13:45:01.831575Z 977982e New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 042bb184a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread promo/render.mjs
Comment thread promo/index.html Outdated
Comment thread promo/index.html Outdated
- Read the playback position before clearing `playing`, so pausing keeps
  the current frame instead of jumping back to the last seek point.
- Keep the transport at 0:00 on load (the logo frame is only shown as a
  poster), so the bottom Play control starts from the beginning.
- render.mjs falls back to the global Playwright install from
  `npm install -g playwright`, as the README documents, when no local
  install resolves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R8j3iT76b2oSLLnei6fzme

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 977982e698

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread promo/index.html Outdated

This branch has not been deployed

No deployments
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.

2 participants