Repository navigation
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
youtubeIdand 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
youtubeIdautomatically clears the active local file.
- Added a Local File picker in the Edit-mode source bar (
- Unified
MediaPlayerAbstraction (src/lib/mediaPlayer.ts):- Introduced the
MediaPlayerinterface covering the YouTube player methods SceneFlow calls, pluscreateVideoElementPlayerto 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.
- Introduced the
- 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.
- Gracefully surfaces
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.txtandpublic/schema.jsonstatic files. - Added
cuesAssetsPluginto serve/sync-prompt.txtand/schema.jsonin Vite dev middleware and emit them intodist/during production builds directly fromsrc/schemas/cues.prompt.tsandsrc/schemas/cues.schema.json.
- Removed duplicate
- Refined
CUES_SYNC_PROMPT(src/schemas/cues.prompt.ts):- Preserves exact script casing and ignores
[[STAGING]]blocks. - Enforces chronological sorting (
endTime > startTime, with a minimum0.5sduration for instantaneous shots or transitions). - Strips
(V.O.),(O.S.), and(CONT'D)extensions fromspeakernames and defines all 8 cuetypecategories (dialogue,action,shot,camera,audio,vfx,transition,environment).
- Preserves exact script casing and ignores
- Gemini Structured Output Schema (
src/schemas/cues.schema.json):- Marked
speakerasrequiredwithnullable: true("Explicitly null if non-dialogue.") and stripped non-Gemini$schemametadata.
- Marked
- Cues JSON Editor UI Cleanup (
src/components/RawCuesModal.tsx):- Removed duplicate copy buttons from the
Sync Prompt & Schemasub-view toolbar (retaining the single contextual Copy button in each panel header) and removed the redundant top-rightEdit JSON →tab-switch button.
- Removed duplicate copy buttons from the
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)
- Screaming Amber Wood (
- 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.
- Last Radio (
4. CI Workflow & Developer Tooling
- GitHub Actions CI (
.github/workflows/ci.yml):- Added automated CI running
npm ci,npm run lint(tsc --noEmit), andnpm run build(vite build) on pushes tomainanddevand on pull requests.
- Added automated CI running
- Cue Time Repair Skill (
.agents/skills/cue-time-repair/):- Added an agent skill and
repair_cue_timing.pyutility to diagnose and repair LLM timecode hallucinations (such asMM:SScolon stripping where1:10becomes110.0s).
- Added an agent skill and
📦 Compatibility & Migration
- 100% Backwards Compatible: Existing project JSON files, custom cue timings, and local storage configurations load without migration.
- Static Endpoints Preserved:
/sync-prompt.txtand/schema.jsonremain 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
- @icanhasjonas made their first contribution in #19
Full Changelog: v2.5.1...v2.6.0