Skip to content

fix(video_compose): resolve and stage edit_decisions.audio.music for Remotion renders - #938

Open
gauravchahal20 wants to merge 1 commit into
OpenMontageInc:mainfrom
gauravchahal20:fix/issue-937-edit-decisions-music
Open

gauravchahal20 wants to merge 1 commit into
OpenMontageInc:mainfrom
gauravchahal20:fix/issue-937-edit-decisions-music

Conversation

@gauravchahal20

@gauravchahal20 gauravchahal20 commented Nov 10, 2026 •

Copy link
Copy Markdown

Summary

Resolves edit_decisions.audio.music and legacy edit_decisions.music against asset_manifest before rendering in VideoCompose. Adapts snake_case fade fields (fade_in_seconds, fade_out_seconds) into the camelCase properties (fadeInSeconds, fadeOutSeconds) expected by Remotion compositions (CinematicRenderer and Explainer), and ensures audio tracks are properly staged into Remotion's public directory. Also fails loudly with a clear error if an explicit asset_id cannot be resolved against asset_manifest rather than silently rendering silence and failing downstream review.

Related issue

Closes #937

Changes

  • Added VideoCompose._resolve_music: resolves edit_decisions.audio.music or top-level edit_decisions.music asset_id to file paths from asset_manifest.
  • Adapted fade fields to both snake_case and camelCase (fadeInSeconds, fadeOutSeconds) to satisfy both Remotion's CinematicRendererProps / Explainer and the underlying artifact schema.
  • Updated VideoCompose._render to pass resolved music into remotion_inputs, _render_via_hyperframes, _render_via_ffmpeg, and _pre_compose_validation.
  • Updated VideoCompose._remotion_render to synchronize props.music (for CinematicRenderer) and props.audio.music (for Explainer) so both composition shapes receive the resolved and staged music configuration.
  • Updated VideoCompose._compose FFmpeg fallback to pick up music if audio_path was not explicitly provided.
  • Added 4 unit tests in tests/tools/test_cinematic_remotion_adapter.py verifying canonical & legacy music resolution, missing asset ID handling, and end-to-end Remotion staging into props.

Testing

Ran the full compose test suite:

  • pytest tests/tools/test_cinematic_remotion_adapter.py (13 passed)
  • pytest tests/tools/test_video_compose_cache_identity.py (35 passed)
  • pytest tests/tools/test_video_compose_chart_palette.py (4 passed)
  • pytest tests/tools/test_video_compose_profile_aspect.py (2 passed)
  • pytest tests/tools/test_video_compose_vertical.py (3 passed)

All 57 tests passed.

Checklist

  • The change is focused on a single logical concern.
  • I ran the relevant tests locally (make test-contracts / make test) where applicable.
  • I updated docs/README if behavior or usage changed.
  • No unrelated files (build artifacts, local config) are included in the diff.

…Remotion renders

Resolves edit_decisions.audio.music and legacy edit_decisions.music against
asset_manifest before rendering. Adapts snake_case fade fields to the
camelCase properties expected by Remotion compositions (CinematicRenderer
and Explainer). Ensures explicit but missing asset_ids fail loudly rather
than silently rendering silence.

Fixes OpenMontageInc#937
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.

edit_decisions.audio.music is never read by the render path — documentary-montage renders silent

1 participant