Repository navigation
Conversation
Two documentation drifts found while auditing the repo against pipeline_defs/ and tools/: - `documentary-montage` ships a manifest and six stage director skills and is referenced elsewhere in AGENT_GUIDE (stage-gate section), but it was missing from both the AGENT_GUIDE "Available Pipelines" table and the PROJECT_CONTEXT pipeline table. Agents that route from those tables could not select it. - The tool-import table pointed at `tools.tts.elevenlabs_tts`, a module that does not exist; TTS tools live in `tools/audio/` (`tools/audio/elevenlabs_tts.py`). Following the table verbatim raises ModuleNotFoundError.
Both directories appear in the repo root on Windows hosts where the project interpreter cannot write to the user profile or the OS temp dir (a security policy/EACCES situation, documented for npm in `.env`): - `.npm-cache/` — npm's cache when `NPM_CONFIG_CACHE` points in-tree, so `npx`/HyperFrames work at all. ~165 MB in practice. - `pytest-of-<user>/` — pytest's scratch tree, left in the repo root by `make test` when the OS temp dir is not writable. Untracked build noise of this size is easy to sweep into a commit by accident (`git add -A`), so keep both ignored.
…s slow The runtime check gated every operation on a live `npm view` with a 5s timeout and cached the failure for the whole process, so one slow registry round-trip made the runtime unavailable for the rest of the run even though npx renders from its local cache. - Probe the local cache first with `npx --offline hyperframes --version` and only query the registry when nothing is cached. - Do not cache timeouts or network errors from `npm view` or the doctor probe; keep caching successes and 404s. Fixes #590
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
The JSON-LD fallback reported every "-1080" contentUrl as 1920x1080 and everything else as 1280x720, so portrait clips surfaced as landscape. Use the VideoObject's declared width/height (number, string, or QuantitativeValue) and leave them 0 (unknown) when absent, matching the card path. Adds portrait and missing-dimension JSON-LD tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bring the agent-facing docs back in line with what is on disk: - AGENT_GUIDE.md / PROJECT_CONTEXT.md: add the shipped documentary-montage pipeline (beta) to the pipeline tables. - AGENT_GUIDE.md / skills/INDEX.md: list the anime-ghibli playbook and mark ink-sketch as an Ink Theater style id rather than a styles/*.yaml playbook; point at list_playbooks() as the authoritative list. - skills/INDEX.md: Layer 3 count 47 -> 92, add the documentary-montage stage director section, and categorise the 26 .agents/skills entries the table omitted (GSAP, character animation, 3D assets, provider skills, synthetic screen recording, refresh procedures). - docs/ARCHITECTURE.md: refresh the repo tree and counts (181 tool modules, 33 video / 29 image / 18 TTS providers, 20 artifact schemas, 92 Layer 3 skills), add the missing capture/, character/, provider_contracts/, backlot/, ink-theater/ and scripts/ entries, replace the hand-maintained tool-name inventory with per-package module counts that defer to the registry, and list the nine artifact schemas the table lacked. - .python-version: 3.10 -> 3.11 to match the interpreter CI runs. The Makefile floor and README "3.10+" are unchanged. Counts were taken from the working tree and registry.provider_menu_summary() on 2026-10-25. Contract suite: 1316 passed, 7 skipped.
Openverse federates openly licensed media (Flickr, Wikimedia, Met, NYPL, ~90 providers) behind one keyless API. It indexes images and audio only, so the adapter declares video unsupported and short-circuits video queries without a network call. Defaults to license_type=commercial,modification so candidates permit monetised, edited video; OPENVERSE_LICENSE_TYPE overrides. Anonymous access is 20 req/min and 200/day; optional client credentials raise it. Downloads send a non-"Bot" User-Agent with an image Accept header because Flickr's CDN 403s the bot string, and retry 403/429 with backoff. A live corpus run went from 1/4 to 4/4 candidates accepted. Tests: 43 passed, 3 xfailed (the existing contract tests cover the new adapter automatically).
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
… ignore
Three stage-director examples used input names the tools do not accept:
- asset-director: subtitle_gen `max_words_per_line` -> `max_words_per_cue`
(old key silently ignored; cues fall back to 8 words)
- compose-director: green_screen_composite `foreground_path` -> `speaker_path`
(required input missing; the call raises KeyError)
- compose-director: video_compose encode `media_profile` / `video_bitrate` /
`audio_bitrate` -> `profile` / `crf` (silently ignored; the final encode
keeps the source resolution instead of the platform profile)
Add a contract test that discovers every `<tool>.execute({...})`,
`ToolClass().execute({...})` and `registry.get("tool").execute({...})`
example in skills/, docs/ and top-level markdown and checks each top-level
key against the registry's input_schema.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mermaid-cli 12 removed -w/--width in favour of --size, so diagram_gen failed with "unknown option '-w'" whenever the current mmdc was installed. Detect the installed major version once and pass the matching flag.
basicsr 1.4.2 (used by realesrgan and gfpgan) imports torchvision.transforms.functional_tensor, which torchvision removed in 0.17. The import error made upscale and face_restore report UNAVAILABLE even when installed. Alias the removed module to the current API before importing. face_restore also defaulted to CodeFormer, but GFPGANer cannot build a CodeFormer architecture, so every default call downloaded the weights and then failed to load. Default to GFPGAN and reject CodeFormer up front. GFPGAN/facexlib write weights to ./gfpgan/weights, so ignore that folder.
lip_sync and talking_head run inference with cwd set to the Wav2Lip/SadTalker checkout, but passed input/output paths through unchanged, so any relative path (e.g. projects/<id>/assets/...) resolved against the wrong directory and inference failed with "input_path must be a valid path". Resolve them to absolute paths first.
…ical shorts Explainer accepts an optional captionStyle (wordsPerPage, fontSize, bottomOffset) so 9:16 renders can use larger, shorter caption pages raised above platform UI. CaptionOverlay gains a bottomOffset prop. Root's calculateMetadata honors an optional tailPaddingSeconds so a short can end on footage instead of a blank second. Defaults are unchanged, so existing compositions render the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
faster-whisper returns Thai "words" as byte-level BPE fragments (single
consonants, detached tone marks), and remotion_caption_burn passed them
straight to CaptionOverlay with a " " separator, so Thai renders showed
broken syllables separated by spaces ("สู ง แล").
For Thai input the tool now joins each segment's fragments into a
per-character timeline, segments it into words with pythainlp (newmm),
maps each word back to its fragments' timing, breaks pages at segment
ends, and passes captionWordSeparator "" to TalkingHead. SRT input,
corrections (length-changing, timing-preserving) and the FFmpeg fallback
follow the same path. Non-Thai captions are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With OPENMONTAGE_ASSET_CACHE=1, video_compose (deterministic) was keyed only on operation, input_path and edit_decisions. A burn_subtitles call with a different subtitle file, or an encode at a different crf, restored the first call's video. Key on every top-level input execute() reads except output_path and remotion_timeout_ms, including gate inputs so a skip_contrast render is never restored for a final delivery. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With OPENMONTAGE_ASSET_CACHE=1, remotion_caption_burn (deterministic) was keyed only on input_path, segments and srt_path. A rerun with corrections (or a different words_per_page, font_size, highlight_color, overlays or force_ffmpeg) restored the first, uncorrected video. Key on every input except output_path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
filter_explicit_route judged model support only from declared vocabularies (enum, _MODELS, _MODEL_ALIASES, model_catalog). openai_tts, piper_tts and local_diffusion take a free-form model string, so they were dropped for every model, including their own schema default. tts_selector with preferred_provider="openai" and model="tts-1-hd" answered "No TTS provider available." although it worked before the routing filter existed. A free-form field cannot vouch for a model, so it is honored only when the caller targeted the tool (preferred_tool or preferred_provider) and no other candidate declares the model. Auto-mode unknown models still fail cleanly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`execute` filled width, height, num_frames, fps and duration_seconds from the request, falling back to the WAN defaults (832x480, 81 frames, fixed 16 fps). A custom workflow sets its own geometry and frame rate, so a 704x1280 / 137-frame / 24 fps LTX render was reported as 832x480 / 81 / 16 fps. Callers scheduling scenes from this metadata got the wrong timing and aspect ratio. - probe the downloaded file with the shared `probe_output` helper and report its width, height, fps, frame count and duration - `probe_output` now also returns `video_fps` and `video_num_frames` (additive keys; existing callers are unaffected) - when ffprobe is missing or cannot read the file, keep the request values but set `metadata_source: "requested"` plus a `metadata_warning`, and print the warning; a successful probe sets `metadata_source: "ffprobe"` Fixes #880 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Send text to the piper subprocess as UTF-8 on both ends (encoding +
PYTHONIOENCODING). With the Windows default (cp1252) accented text
("Ananké", "día") produced an empty WAV.
- Expose locally installed voices (*.onnx in the working dir) as
`_MODELS`, so selectors' `filter_explicit_route` no longer drops
piper_tts when an explicit `model` is passed ("No TTS provider
available"). Other tools' routing is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Full Remotion renders crashed the headless browser on low-memory machines (8 GB) at the default concurrency. Expose an optional remotion_concurrency input that is forwarded as --concurrency, alongside remotion_timeout_ms. Also pass cut.fontSize through to CalloutBox so callout text can be sized for legibility at 1080p. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…t CLI Adds minicut_upscale, a video_upscale tool in the enhancement capability, next to the local upscale tool. It sends a clip to MiniCut model topaz-standard and writes the upscaled clip to output_path, so no local GPU or torch install is needed. Video only (mp4, mov, webm); still images are refused with a pointer to upscale. dry_run returns the free price quote as an approval; execute sends only that approval, and resending it never starts a second paid job. A timeout returns resume_job, which collects the same job with no new charge. tools/minicut_cli.py is the shared CLI helper, byte for byte the same file as in the Kling 4 PR, so the two merge in any order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
The validation-only integration is complete. All 92 selected source PRs landed through 67 ordered merge operations, preserving original commit ancestry and the consolidated unique fixes/tests. Redundant #815, #814, #772 and #842 were closed; #566 and #751 remain excluded. Main at 356b5fa exactly matches this draft's validated file tree (1d7a4efb31356655424ac4ea81805071fe2ecca1). Exact-order CI passed 2,814 tests, 17 skipped and 1 subtest: https://github.com/calesthio/OpenMontage/actions/runs/42429872644. Closing this temporary draft without merging it; final main CI is https://github.com/calesthio/OpenMontage/actions/runs/42430932571. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This draft validates the combined tree of 92 reviewed PR heads before their canonical PRs are merged individually.
The integration preserves original contributor commits, consolidates competing implementations, retains additional stock-ID/retry tests, and resolves caption/cache/render-control interactions. #566 and #751 are excluded; redundant alternatives #815, #814, #772 and #842 are excluded as implementations.
Validation already completed: focused consolidation suites and full TypeScript compilation. The full Python suite runs here on GitHub Actions. This PR is a validation fixture and will not be merged; protected main will receive the reviewed canonical PRs after their refreshed approvals and passing CI.