Skip to content

feat(outro): parameterized outro system for @derblasseschimmer Reels#68

Open
shelynx79 wants to merge 2 commits into
browser-use:mainfrom
shelynx79:main
Open

feat(outro): parameterized outro system for @derblasseschimmer Reels#68
shelynx79 wants to merge 2 commits into
browser-use:mainfrom
shelynx79:main

Conversation

@shelynx79

@shelynx79 shelynx79 commented Jun 16, 2026

Copy link
Copy Markdown

Summary

  • helpers/make_outro.py — one-command outro pipeline (7 automated steps: frame extract → ffprobe luminance → config inject → HyperFrames PNG-sequence render → static still composite → final MP4 assembly with 30ms audio fade → 3 verification frames). Replaces ~40 min of manual iteration per Reel with a single command.
  • helpers/check_luminance.py — standalone luminance checker; outputs text/veil color strategy for any frame or video timestamp via ffprobe signalstats (no PIL dependency).
  • templates/outro/outro_template.html — parametrized GSAP/HyperFrames template; reads window.__OUTRO_CONFIG__ injected at render time; auto-selects text and veil colors from measured luminance (L >65 → espresso on cream; L <40 → alabaster on espresso; mid → white on dark).
  • SKILL.md — 3 new anti-patterns documented from this session: no zoompan on stills (integer stepping = stutter), always measure luminance before overlay design, veil easing must be power2.out not power2.in.

Usage

uv run python helpers/make_outro.py \
  --source "Reel.mp4" --cutpoint 39.16 \
  --content outro_content.json \
  --out "edit/Reel - neues Outro.mp4"

Content JSON schema:

{
  "stage1": { "kicker": "ZUM MERKEN", "context": "Merk Dir das für Deine", "hero": "Wunschliste" },
  "stage2": { "kicker": "BALD BEI MIR", "context": "Drei neue Skin Tint Balms", "hero": "im direkten / Vergleich", "handle": "@derblasseschimmer" },
  "veil_opacity": 0.88,
  "outro_duration": 7.0
}

Test plan

  • End-to-end run on IT Cosmetics Balm Reel (43.68s source, cutpoint 39.16s) — all 7 steps clean
  • Luminance auto-detected at 78.4 (HELL) → dark text + cream veil selected correctly
  • 3 verification frames extracted and visually confirmed
  • Output 46.16s, 1080×1920, 25fps, no stutter

🤖 Generated with Claude Code


Summary by cubic

Adds a one-command outro pipeline for @derblasseschimmer Reels that auto-detects luminance, chooses text/veil colors, renders a hyperframes overlay, and assembles the final MP4. This standardizes the outro look and removes ~40 minutes of manual work per Reel.

  • New Features

    • helpers/make_outro.py: 7-step pipeline (frame extract → ffprobe luminance → config inject → hyperframes PNG sequence → still composite/no zoompan → MP4 with audio fade → verify frames).
    • helpers/check_luminance.py: CLI to measure luminance for an image or video time; prints recommended text/veil strategy.
    • templates/outro/outro_template.html: parameterized gsap/hyperframes template reading window.__OUTRO_CONFIG__; luminance-aware colors and power2.out veil easing.
    • SKILL.md: adds three anti-patterns (no zoompan; measure luminance first; use power2.out for veil).
  • Bug Fixes

    • Audio: trim at cutpoint with a 30ms boundary fade and pad silence for the outro; added has_audio() guard so videos without audio don’t crash.
    • Luminance tool: ffprobe now runs with check=True; replaced deprecated temp file usage with NamedTemporaryFile to avoid race conditions.

Written for commit 265a79b. Summary will update on new commits.

Review in cubic

Introduces a one-command editorial outro pipeline that produces consistent,
brand-accurate results without manual iteration. Eliminates ~40 min of
per-Reel trial-and-error by automating luminance detection, color selection,
and HyperFrames rendering.

New files:
- helpers/make_outro.py — 7-step wrapper: frame extract → ffprobe luminance
  → config inject → HyperFrames PNG-sequence render → still composite
  (no zoompan) → final MP4 assembly with 30ms audio fade → verify frames
- helpers/check_luminance.py — standalone luminance checker for manual use
- templates/outro/outro_template.html — parametrized GSAP template; reads
  window.__OUTRO_CONFIG__, auto-selects text/veil colors from luminance
  (HELL >65 → espresso on cream; DUNKEL <40 → alabaster on espresso; mid → white)

SKILL.md: three new anti-patterns derived from this session:
- zoompan on static stills → integer stepping = stutter; use static still + GSAP veil
- Never design overlay colors without measuring luminance first
- Veil easing must be power2.out (never power2.in — starts too slowly)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

@cubic-dev-ai cubic-dev-ai 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.

4 issues found across 4 files

Reply with feedback, questions, or to request a fix.

Fix all with cubic | Re-trigger cubic

Comment thread helpers/make_outro.py Outdated
Comment thread helpers/make_outro.py Outdated
Comment thread helpers/check_luminance.py Outdated
Comment thread helpers/check_luminance.py Outdated
make_outro.py:
- Audio now trimmed at cutpoint with 30ms fade at the cut boundary;
  outro is silent (padded with silence), matching the hard rule
- Added has_audio() guard so videos without an audio stream no longer
  crash during filter graph resolution

check_luminance.py:
- Added check=True to ffprobe call so failures raise CalledProcessError
  instead of crashing with JSONDecodeError
- Replaced deprecated tempfile.mktemp() with NamedTemporaryFile to
  eliminate TOCTOU race condition

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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