Skip to content

pull - #490

Open
RiCSaucd wants to merge 10 commits into
calesthio:mainfrom
RiCSaucd:main
Open

pull#490
RiCSaucd wants to merge 10 commits into
calesthio:mainfrom
RiCSaucd:main

Conversation

@RiCSaucd

Copy link
Copy Markdown

Summary

Related issue

Closes #

Changes

Testing

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.

RiCSaucd and others added 9 commits July 6, 2026 21:41
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]>
@RiCSaucd
RiCSaucd requested a review from calesthio as a code owner August 10, 2026 13:57
Copilot AI lite review requested due to automatic review settings August 10, 2026 13:57

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_editor tool + supporting transcript segment utilities and CutScript-derived FFmpeg helpers (vendored with license/notice).
  • Extend video_downloader with ingest_mode defaults (reference vs production) and optional bounded playlist download, plus contract tests.
  • Add “cinematic-intro” pipeline definition + stage-director skills, and add .claude/agents schema/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_path is a Path, so the if output_path else "" branch never selects the empty-string default (because Path('') becomes Path('.'), which is truthy). This makes studio_sound behave incorrectly when output_path is omitted, and can also let a missing/empty input_path slip through (since Path('.') 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.

Comment on lines +240 to +245
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")
Comment on lines +164 to +172
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]>
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.

2 participants