pull - #490
Conversation
provider_menu() previously called get_info() and get_status() for each tool, doubling dependency checks. Reuse the status already produced by get_info(), with a fallback when status is malformed, and add a regression test to lock in single status evaluation. Co-authored-by: Copilot App <[email protected]>
…enMontage pipeline (#1) * feat: why-the-sky-is-blue explainer — research through edit checkpoints Co-authored-by: RiCSaucd <[email protected]> * feat: why-the-sky-is-blue compose checkpoint + Piper sentence-silence quirk skill Co-authored-by: RiCSaucd <[email protected]> * fix: address PR #1 review feedback on checkpoint metadata - Set pipeline_type to animated-explainer across all stage checkpoints - Point Piper quirk references to skills/core/piper-tts-quirks.md - Correct s4 review_notes durations and spacing in checkpoint_assets - Align compose total_duration_seconds with rendered MP4 (62.55s) - Embed final_review artifact and fix render_report audit refs Co-authored-by: RiCSaucd <[email protected]> * fix: address second round of PR #1 review feedback - Align d-008 sample-gate rationale with actual s4 duration (-2.5%) - Fix narration-s1 review_notes to reference s4 gate consistently - Correct d-010 skill paths to skills/core/piper-tts-quirks.md - Embed transcript_comparison results (150/150 words, accuracy 1.0) - Document data_explainer motion_ratio=0.0 as valid per delivery_promise Co-authored-by: RiCSaucd <[email protected]> * fix: address CodeRabbit PR review on sky video checkpoints - Count img-sunset-gradient in images_generated; clarify provider vs procedural - Align cut-4 stat to 5.9x (blue vs red) matching bar chart; update script/scene_plan - Set subtitle_check subtitles_expected/present true in compose final_review - Use canonical assets/ paths for narration, music, and sunset background in compose Co-authored-by: RiCSaucd <[email protected]> * fix: align caption stat text and proposal refs with review - Patch compose caption 'nine' -> 'six' to match script/provider_text - Update proposal checkpoint stat references from 9.4x to 5.9x blue-vs-red Co-authored-by: RiCSaucd <[email protected]> --------- Co-authored-by: Cursor Agent <[email protected]> Co-authored-by: RiCSaucd <[email protected]>
* feat: why-the-sky-is-blue explainer — research through edit checkpoints Co-authored-by: RiCSaucd <[email protected]> * feat: why-the-sky-is-blue compose checkpoint + Piper sentence-silence quirk skill Co-authored-by: RiCSaucd <[email protected]> * fix: address PR #1 review feedback on checkpoint metadata - Set pipeline_type to animated-explainer across all stage checkpoints - Point Piper quirk references to skills/core/piper-tts-quirks.md - Correct s4 review_notes durations and spacing in checkpoint_assets - Align compose total_duration_seconds with rendered MP4 (62.55s) - Embed final_review artifact and fix render_report audit refs Co-authored-by: RiCSaucd <[email protected]> * fix: address second round of PR #1 review feedback - Align d-008 sample-gate rationale with actual s4 duration (-2.5%) - Fix narration-s1 review_notes to reference s4 gate consistently - Correct d-010 skill paths to skills/core/piper-tts-quirks.md - Embed transcript_comparison results (150/150 words, accuracy 1.0) - Document data_explainer motion_ratio=0.0 as valid per delivery_promise Co-authored-by: RiCSaucd <[email protected]> * feat: produce 30s viral Netflix Documentary coffee vertical video - Netflix Documentary TikTok trend parody: Chapter One: The Pour - 1080x1920 vertical render via Remotion (explainer-data, tiktok profile) - Free stack: Piper TTS, Pixabay cinematic music, word-level captions - Production runner at scripts/produce_viral_netflix_coffee.py - Output: projects/viral-netflix-coffee/renders/chapter-one-the-pour.mp4 (~30s) Co-authored-by: RiCSaucd <[email protected]> * fix: address PR #15 review feedback on viral video checkpoints - Rewrite decision_log.json to schema-valid decisions[] format - Fix cut timing via concat section boundaries (not broken phrase search) - Transcribe with faster-whisper vad_filter=false (Piper speech was dropped) - Populate composition.captions and align render_report duration with ffprobe - Add decision_log_ref, final_review_ref, audio_codec, file_size_bytes - Use relative paths in final_review; document edit vs encoded duration padding - Reuse cached Pixabay music when search returns HTTP 403 Co-authored-by: RiCSaucd <[email protected]> * fix: address CodeRabbit PR review on sky video checkpoints - Count img-sunset-gradient in images_generated; clarify provider vs procedural - Align cut-4 stat to 5.9x (blue vs red) matching bar chart; update script/scene_plan - Set subtitle_check subtitles_expected/present true in compose final_review - Use canonical assets/ paths for narration, music, and sunset background in compose Co-authored-by: RiCSaucd <[email protected]> * fix: align caption stat text and canonical asset paths with review - Patch sky compose caption 'nine' -> 'six' to match script/provider_text - Update proposal checkpoint stat references from 9.4x to 5.9x blue-vs-red - Use assets/narration and assets/music paths in viral compose checkpoint - Persist canonical audio paths in produce script checkpoint output Co-authored-by: RiCSaucd <[email protected]> * feat: integrate Cinematic Intro Engine as cinematic-intro pipeline Add the 7-stage Seedance 2.0 intro workflow (line sheet → character sheet → beat map → storyboard → board gate → test/final render → VO delivery) as a first-class OpenMontage pipeline with director skills, prompt library HTML, routing in AGENT_GUIDE/INDEX, and contract tests. Co-authored-by: RiCSaucd <[email protected]> --------- Co-authored-by: Cursor Agent <[email protected]> Co-authored-by: RiCSaucd <[email protected]>
* feat: why-the-sky-is-blue explainer — research through edit checkpoints Co-authored-by: RiCSaucd <[email protected]> * feat: why-the-sky-is-blue compose checkpoint + Piper sentence-silence quirk skill Co-authored-by: RiCSaucd <[email protected]> * fix: address PR #1 review feedback on checkpoint metadata - Set pipeline_type to animated-explainer across all stage checkpoints - Point Piper quirk references to skills/core/piper-tts-quirks.md - Correct s4 review_notes durations and spacing in checkpoint_assets - Align compose total_duration_seconds with rendered MP4 (62.55s) - Embed final_review artifact and fix render_report audit refs Co-authored-by: RiCSaucd <[email protected]> * fix: address second round of PR #1 review feedback - Align d-008 sample-gate rationale with actual s4 duration (-2.5%) - Fix narration-s1 review_notes to reference s4 gate consistently - Correct d-010 skill paths to skills/core/piper-tts-quirks.md - Embed transcript_comparison results (150/150 words, accuracy 1.0) - Document data_explainer motion_ratio=0.0 as valid per delivery_promise Co-authored-by: RiCSaucd <[email protected]> * feat: produce 30s viral Netflix Documentary coffee vertical video - Netflix Documentary TikTok trend parody: Chapter One: The Pour - 1080x1920 vertical render via Remotion (explainer-data, tiktok profile) - Free stack: Piper TTS, Pixabay cinematic music, word-level captions - Production runner at scripts/produce_viral_netflix_coffee.py - Output: projects/viral-netflix-coffee/renders/chapter-one-the-pour.mp4 (~30s) Co-authored-by: RiCSaucd <[email protected]> * fix: address PR #15 review feedback on viral video checkpoints - Rewrite decision_log.json to schema-valid decisions[] format - Fix cut timing via concat section boundaries (not broken phrase search) - Transcribe with faster-whisper vad_filter=false (Piper speech was dropped) - Populate composition.captions and align render_report duration with ffprobe - Add decision_log_ref, final_review_ref, audio_codec, file_size_bytes - Use relative paths in final_review; document edit vs encoded duration padding - Reuse cached Pixabay music when search returns HTTP 403 Co-authored-by: RiCSaucd <[email protected]> * fix: address CodeRabbit PR review on sky video checkpoints - Count img-sunset-gradient in images_generated; clarify provider vs procedural - Align cut-4 stat to 5.9x (blue vs red) matching bar chart; update script/scene_plan - Set subtitle_check subtitles_expected/present true in compose final_review - Use canonical assets/ paths for narration, music, and sunset background in compose Co-authored-by: RiCSaucd <[email protected]> * fix: align caption stat text and canonical asset paths with review - Patch sky compose caption 'nine' -> 'six' to match script/provider_text - Update proposal checkpoint stat references from 9.4x to 5.9x blue-vs-red - Use assets/narration and assets/music paths in viral compose checkpoint - Persist canonical audio paths in produce script checkpoint output Co-authored-by: RiCSaucd <[email protected]> --------- Co-authored-by: Cursor Agent <[email protected]> Co-authored-by: RiCSaucd <[email protected]>
There was a problem hiding this comment.
Pull request overview
This PR expands OpenMontage’s video-editing and ingest capabilities by adding a Descript-style text-based editor (CutScript OSS integration), enhancing video_downloader for production ingest + limited playlist support, and introducing a new “cinematic-intro” pipeline with associated skills/contracts and agent-definition validation.
Changes:
- Add
text_based_editortool + supporting transcript segment utilities and CutScript-derived FFmpeg helpers (vendored with license/notice). - Extend
video_downloaderwithingest_modedefaults (reference vs production) and optional bounded playlist download, plus contract tests. - Add “cinematic-intro” pipeline definition + stage-director skills, and add
.claude/agentsschema/loader + contract tests.
Reviewed changes
Copilot reviewed 53 out of 54 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/video/text_based_editor.py | New transcript-driven editing tool (compute segments, export, studio sound). |
| tools/tool_registry.py | Reuse tool status from get_info() when possible. |
| tools/analysis/video_downloader.py | Add ingest modes, playlist support, normalized metadata, and audio extraction helper. |
| third_party/cutscript/video_editor.py | Vendored FFmpeg cutting/export helpers (stream-copy + re-encode). |
| third_party/cutscript/audio_cleaner.py | Vendored noise reduction helper (DeepFilterNet or FFmpeg fallback). |
| third_party/cutscript/init.py | Package init for CutScript-derived utilities. |
| third_party/cutscript/NOTICE.md | Attribution notice for vendored CutScript code. |
| third_party/cutscript/LICENSE | MIT license for CutScript vendored files. |
| third_party/init.py | Add third_party package marker. |
| lib/text_edit/segments.py | Transcript word normalization + keep-segment computation + filler detection utilities. |
| tests/contracts/test_text_based_editor.py | Contract tests for text_based_editor and segment utilities. |
| tests/contracts/test_video_downloader.py | Contract tests for new video_downloader ingest/playlist behavior. |
| tests/contracts/test_phase0_contracts.py | Add coverage ensuring provider menu doesn’t redundantly call get_status(). |
| requirements.txt | Add yt-dlp dependency range for video_downloader. |
| .agents/skills/text-based-editing/SKILL.md | New Layer-3 skill doc for transcript-driven editing workflows. |
| .agents/skills/video-download/SKILL.md | Document OpenMontage video_downloader parameters and playlist behavior. |
| pipeline_defs/talking-head.yaml | Make text_based_editor available for talking-head pipeline edit stage. |
| pipeline_defs/clip-factory.yaml | Make text_based_editor optional/available in clip-factory edit stage. |
| pipeline_defs/cinematic-intro.yaml | New cinematic-intro pipeline manifest (stages, gates, required skills/tools). |
| skills/creative/video-editing.md | Add text_based_editor to editing tool routing list. |
| skills/creative/cinematic-intro-engine.md | New “Cinematic Intro Engine” routing/prompt library doc. |
| skills/pipelines/cinematic-intro/executive-producer.md | New stage orchestration guidance for cinematic-intro pipeline. |
| skills/pipelines/cinematic-intro/proposal-director.md | New proposal stage director for cinematic-intro. |
| skills/pipelines/cinematic-intro/script-director.md | New script stage director for cinematic-intro. |
| skills/pipelines/cinematic-intro/scene-director.md | New scene_plan stage director for cinematic-intro. |
| skills/pipelines/cinematic-intro/edit-director.md | New edit stage director for cinematic-intro. |
| skills/pipelines/cinematic-intro/asset-director.md | New assets stage director for cinematic-intro. |
| skills/pipelines/cinematic-intro/compose-director.md | New compose stage director for cinematic-intro. |
| skills/pipelines/cinematic-intro/publish-director.md | New publish stage director for cinematic-intro. |
| skills/INDEX.md | Index updates: add cinematic-intro pipeline skills + Piper quirks entry. |
| skills/core/piper-tts-quirks.md | Document Piper CLI corruption quirk and workaround. |
| lib/agent_loader.py | Add loader/validator for .claude/agents/*.md frontmatter contract. |
| schemas/agents/agent_definition.schema.json | JSON schema for agent frontmatter validation. |
| tests/lib/test_agent_loader.py | Unit tests for lib/agent_loader.py. |
| tests/contracts/test_agent_definition_contracts.py | Contract tests to enforce agent definition validity in CI. |
| .claude/agents/sre.md | Add SRE subagent definition. |
| .claude/agents/image-prompt-engineer.md | Add image prompt engineering subagent definition. |
| .claude/agents/ai-data-remediation-engineer.md | Add AI data remediation subagent definition. |
| skills/pipelines/cinematic-intro/* | Stage-specific runbooks for cinematic-intro pipeline. |
| tests/contracts/test_cinematic_intro_pipeline.py | Contract test for cinematic-intro pipeline manifest/skills presence. |
| scripts/produce_viral_netflix_coffee.py | Add one-shot production script (viral-netflix-coffee). |
| pipelines/why-the-sky-is-blue/decision_log.json | Add decision log artifact for sample pipeline run. |
| pipelines/why-the-sky-is-blue/checkpoint_*.json | Add checkpoint artifacts for sample pipeline run. |
| pipelines/viral-netflix-coffee/decision_log.json | Add decision log artifact for sample pipeline run. |
| pipelines/viral-netflix-coffee/checkpoint_compose.json | Add compose checkpoint artifact for sample pipeline run. |
| AGENTS.md | Expand notes; reiterate AGENT_GUIDE as source of truth plus env notes. |
| AGENT_GUIDE.md | Add cinematic-intro to pipeline table + routing hint. |
| .devcontainer/devcontainer.json | Add minimal devcontainer config. |
Suppressed comments (1)
tools/video/text_based_editor.py:305
output_pathis aPath, so theif output_path else ""branch never selects the empty-string default (becausePath('')becomesPath('.'), which is truthy). This makesstudio_soundbehave incorrectly whenoutput_pathis omitted, and can also let a missing/emptyinput_pathslip through (sincePath('.')exists).
Prefer validating the raw strings, ensure input_path is a file, and only pass an explicit output_path to clean_audio when provided.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| input_path = Path(inputs.get("input_path", "")) | ||
| output_path = Path(inputs.get("output_path", "")) | ||
| if not input_path.exists(): | ||
| return ToolResult(success=False, error=f"Input not found: {input_path}") | ||
| if not output_path: | ||
| return ToolResult(success=False, error="output_path is required for export") |
| idempotency_key_fields = [ | ||
| "url", | ||
| "format", | ||
| "max_resolution", | ||
| "ingest_mode", | ||
| "allow_playlist", | ||
| "max_playlist_items", | ||
| "max_duration_seconds", | ||
| ] |
Cloud Agent HTTPS currently allowlists GitHub only. Provider keys in .env cannot call api.x.ai (or other Cloudflare-fronted APIs) until those hosts are allowlisted. Co-authored-by: Cursor Agent <[email protected]> Co-authored-by: RiCSaucd <[email protected]>
Summary
Related issue
Closes #
Changes
Testing
Checklist
make test-contracts/make test) where applicable.