Skip to content

SceneFlow v2.6.0: Local Video Playback, SSOT Sync Schema & 9 New AI Examples

Latest

Choose a tag to compare

@taruma taruma released this 14 Nov 01:25
b22180b

SceneFlow v2.6.0 expands media playback beyond YouTube, unifies the AI cue-generation prompt and schema into a single source of truth, and grows the built-in Library Catalogue with 9 new Seedance 2.0 / 2.5 examples.

This release introduces Local Video File Playback (contributed by @icanhasjonas in #19) via a unified MediaPlayer abstraction, refactors /sync-prompt.txt and /schema.json to be served and emitted directly from src/schemas/ via a custom Vite plugin, refines Gemini structured-output schema rules, adds GitHub Actions CI, and includes a new cue-time-repair agent skill for normalizing LLM timecode hallucinations.


🌟 What's New in v2.6.0

1. Local Video File Playback (#19)

SceneFlow now supports playing local video files (.mp4, .webm, .mov) directly in the browser alongside YouTube:

  • Session-Only Local File Picker:
    • Added a Local File picker in the Edit-mode source bar (YoutubeSourceInput.tsx) that plays local video files via an object URL and an HTML <video> element.
    • Leaves the project's youtubeId and saved JSON untouched—explicitly indicating that the local file is for the current session only and not saved with the project.
    • Switching to a project or URL with a different youtubeId automatically clears the active local file.
  • Unified MediaPlayer Abstraction (src/lib/mediaPlayer.ts):
    • Introduced the MediaPlayer interface covering the YouTube player methods SceneFlow calls, plus createVideoElementPlayer to adapt a native <video> element.
    • Transport controls, timeline scrubbing, seeking, loop preview, keyboard shortcuts, and cue clock capture work uniformly across both YouTube and local video sources.
  • Decode Error Handling:
    • Gracefully surfaces "This browser can't play this file" in the source bar when a local file uses an unsupported codec or container.

2. Sync Prompt & Schema Single Source of Truth (src/schemas/, vite.config.ts)

Eliminated drift between the in-app AI cue-generation prompt/schema and the static public endpoints:

  • cuesAssetsPlugin (vite.config.ts):
    • Removed duplicate public/sync-prompt.txt and public/schema.json static files.
    • Added cuesAssetsPlugin to serve /sync-prompt.txt and /schema.json in Vite dev middleware and emit them into dist/ during production builds directly from src/schemas/cues.prompt.ts and src/schemas/cues.schema.json.
  • Refined CUES_SYNC_PROMPT (src/schemas/cues.prompt.ts):
    • Preserves exact script casing and ignores [[STAGING]] blocks.
    • Enforces chronological sorting (endTime > startTime, with a minimum 0.5s duration for instantaneous shots or transitions).
    • Strips (V.O.), (O.S.), and (CONT'D) extensions from speaker names and defines all 8 cue type categories (dialogue, action, shot, camera, audio, vfx, transition, environment).
  • Gemini Structured Output Schema (src/schemas/cues.schema.json):
    • Marked speaker as required with nullable: true ("Explicitly null if non-dialogue.") and stripped non-Gemini $schema metadata.
  • Cues JSON Editor UI Cleanup (src/components/RawCuesModal.tsx):
    • Removed duplicate copy buttons from the Sync Prompt & Schema sub-view toolbar (retaining the single contextual Copy button in each panel header) and removed the redundant top-right Edit JSON → tab-switch button.

3. 9 New AI Scenes & AI Clips Examples (src/examples.ts, SCENEFLOW_CATALOGUE.md)

Expanded the interactive Library Catalogue with 9 new synchronized projects:

  • AI Scenes (8 new, 24 total):
    • Screaming Amber Wood (scene_screaming_amber_wood, Seedance 2.5)
    • Coordinates for Three (scene_coordinates_for_three, Seedance 2.5)
    • Three Years Late (scene_three_years_late, Seedance 2.5, featured) — 4-part ensemble drama set at Cabo da Roca with 35mm aesthetic.
    • Pineapple (scene_pineapple, Seedance 2.0)
    • What the Glacier Keeps (scene_what_the_glacier_keeps, Seedance 2.0)
    • Paperweight (scene_paperweight, Seedance 2.0)
    • The Unresolved Variable (scene_the_unresolved_variable, Seedance 2.0)
    • The Event Boundary (scene_the_event_boundary, Seedance 2.0)
  • AI Clips (1 new):
    • Last Radio (clip_last_radio, Seedance 2.5) — 35mm disaster thriller cross-cut between a submerging subterranean parking structure and a storm-battered street command zone.

4. CI Workflow & Developer Tooling

  • GitHub Actions CI (.github/workflows/ci.yml):
    • Added automated CI running npm ci, npm run lint (tsc --noEmit), and npm run build (vite build) on pushes to main and dev and on pull requests.
  • Cue Time Repair Skill (.agents/skills/cue-time-repair/):
    • Added an agent skill and repair_cue_timing.py utility to diagnose and repair LLM timecode hallucinations (such as MM:SS colon stripping where 1:10 becomes 110.0s).

📦 Compatibility & Migration

  • 100% Backwards Compatible: Existing project JSON files, custom cue timings, and local storage configurations load without migration.
  • Static Endpoints Preserved: /sync-prompt.txt and /schema.json remain available at the same URLs in both development and production builds.

What's Changed

  • feat(player): play local video files alongside YouTube by @icanhasjonas in #19
  • release: v2.6.0 — Local Video Playback, SSOT Sync Schema, 9 AI Examples & CI by @taruma in #20

New Contributors

Full Changelog: v2.5.1...v2.6.0