Skip to content

Cinematic transition endpoints all return 500 (broken geq filter expr) — blocks Studio-native transitions #93

Description

@nanxingw

Summary

All four cinematic transition endpoints return HTTP 500 with an ffmpeg filter error, so transitions cannot be applied through the documented API. Because these are the only Studio-native way to render cinematic transitions, and Studio is the user's direct visual entry point, an agent is forced to hand-roll ffmpeg outside the composition — which then can't be represented in composition.yaml or shown/rendered by Studio.

Affected endpoints

  • POST /api/transitions/glitch
  • POST /api/transitions/light-leak
  • POST /api/transitions/domain-warp
  • POST /api/transitions/grav-lens

All four fail identically.

Repro

curl -X POST http://localhost:3271/api/transitions/glitch \
  -H "Content-Type: application/json" \
  -d '{"workId":"<id>","clipARelative":"assets/clips/a.mp4","clipBRelative":"assets/clips/b.mp4","outputFilename":"t.mp4","clipADuration":4.3,"transitionDuration":0.4}'

Inputs verified valid: both clips exist, 1080x1920, clipA duration 4.29s (> transitionDuration).

Actual result

HTTP 500
{"error":"glitch-cut transition: ffmpeg exit null\n
[Parsed_geq_3 @ ...] [Eval @ ...] Undefined constant or missing '(' in 't*200)*15,0)),Y)'\n
[AVFilterGraph @ ...] Error initializing filters\n","errorCode":"transition_failed"}

The ffmpeg geq expression the endpoint builds is malformed — an unbalanced/undefined expression around 't*200)*15,0)),Y)' — so filtergraph init fails before any frame is written (ffmpeg exit null). light-leak / domain-warp / grav-lens all hit the same transition_failed path.

Impact

  • Transitions are completely unusable via the API on this build.
  • Studio (the user's visual entry point) cannot show or render cinematic transitions, since the only supported path is broken.
  • Agents must fall back to hand-rolled ffmpeg xfade/flash/glitch, whose results live outside composition.yaml (the schema has no representation for these baked transitions/reframes), breaking WYSIWYG between the timeline and the exported video.

Suggested fix

Audit the geq expression construction in the transition renderer (the glitch RGB-shift / scanline expr looks like the culprit — a missing min(/max( open-paren or an unescaped comma inside the geq string). Add a smoke test that renders each of the four transitions on two solid-color clips in CI so a broken filter expr fails fast.

Environment

  • autoviral 0.1.11, backend on :3271
  • macOS (Apple Silicon), ffmpeg from Homebrew

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions