Skip to content

Latest commit

 

History

History
75 lines (68 loc) · 4.51 KB

File metadata and controls

75 lines (68 loc) · 4.51 KB

Changelog

All notable changes to this project are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

1.0.0 - 2026-06-17

Initial public release of ReelForge — an AI pipeline that forges scroll-stopping 9:16 vertical reels from a single talking-head clip plus its word-level transcript.

Added

  • Ten-stage orchestrator (reelforge/cli.py, runnable via python -m reelforge) that wires ingest, analysis, routing, zoom, captions, stitch, audio, color, music, and quality evaluation, passing typed Pydantic models between stages.
  • Pluggable ingest layer (ClipSource) that assembles a ClipData from a local transcript JSON and source video, with backend-resolution hooks you can override to point at a real database / object store.
  • The Director (analysis/director.py) — a single Gemini video upload reused across three structured (JSON-schema) passes: B-roll segments, camera zoom events, and emphasis words.
  • Anchor-word timing snapping — AI-proposed cut points are fuzzy-matched (case-insensitive, punctuation-stripped) against real transcript word timings for ~0.01 s precision, with deterministic spacing/overlap constraints applied in code.
  • The Brain (routing/router.py) — cost-aware, quality-gated asset routing: sora_cinematic segments try Sora 2 and are graded by Gemini (PASS / REGENERATE / USE_FALLBACK) with auto-demotion to free Pexels stock; stock_broll goes straight to Pexels; zoom_only / text_emphasis use internal engines. Estimated dollar savings are tracked per run.
  • Sora 2 generator (routing/sora_generator.py) with job submission, progress polling, download, and validation, plus a dummy-video fallback.
  • Pexels stock fetcher (routing/stock_fetcher.py) with portrait-orientation filtering for the 9:16 format.
  • Face-tracked digital zoom (effects/zoom.py) — per-frame MediaPipe detection smoothed with an exponential moving average, crop-and-resize punch-in, graceful fallback to last-known position / center crop, and original audio re-merged via MoviePy.
  • Kinetic captions (effects/captions.py) — grammar-aware word chunking (max 4 words / 2 s / punctuation break), bold stroke-outlined Pillow rendering on a transparent 720x1280 canvas, emphasis words popped larger and in color, positioned in the 9:16 safe zone.
  • Frame-accurate stitcher (compose/stitcher.py) — MoviePy composite of base video + B-roll (cut / fade / crossfade / swipe transitions) + captions, all snapped to frame boundaries; MoviePy v1/v2 compatible imports.
  • Broadcast audio mastering (compose/audio.py) — EBU R128 loudness normalization to -14 LUFS first, then transition SFX mixed in at a fixed relative level with amix:normalize=0 to avoid re-triggering the limiter.
  • Cinematic color grading (compose/color.py) — FFmpeg lut3d .cube presets (cinematic warm / cool / vibrant / vintage / neutral) with sample LUTs generated procedurally when a preset file is absent.
  • Content-aware background music (compose/music.py) — Gemini mood/genre classification, Freesound (Creative Commons) fetching with a bundled-track fallback, and sidechaincompress ducking under the voice using per-energy presets.
  • Self-evaluating output (quality/evaluator.py) — Gemini scores the finished reel across six dimensions with a pass gate at an average >= 75, and also grades individual Sora clips before use.
  • Graceful degradation everywhere — every missing API key skips its stage or falls back to a free/local alternative instead of crashing.
  • CLI skip flags and presets--skip-zoom, --skip-captions, --skip-audio, --skip-color, --skip-music, --skip-evaluation, --color-preset, and --music-energy.
  • Environment-driven configuration (reelforge/config.py) with a minimal, dependency-free .env loader; no hardcoded secrets.
  • Self-contained sample data and tests — a runnable samples/sample_transcript.json and unit tests for the transcript model, ingest layer, caption chunking, and routing math that need no network or API keys.
  • Documentation and packagingREADME.md, docs/architecture.md, pyproject.toml / requirements.txt, a sample .cube LUT, MIT LICENSE, and a GitHub Actions CI workflow (ruff lint + byte-compile syntax check).