GGitHubMerge commit from fork
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(stock-sources): raise transport errors instead of reporting no results Eight adapters -- dareful, esa, jaxa, loc, mixkit, nara, noaa, videvo -- wrapped their search request in `except Exception`, logged a warning and returned `[]`. That is indistinguishable from a source that genuinely matched nothing, so `direct_clip_search` reports `success: True, clips_downloaded: 0, errors: []` for a run in which every request failed. `base.StockSource.search` already documents the rule they violate: "Network errors should be raised -- the corpus builder catches and logs per-source so one flaky API doesn't poison the whole run." Both callers already do exactly that: `direct_clip_search` and `corpus_builder` catch per source and record `{phase, source, query, error}` before continuing, so the plumbing to receive the truth is already in place. Each adapter now re-raises after logging. The warning is kept -- it names the source in the adapter's own words, which the caller's generic record does not. Behavior change: a run where every source failed previously reported success with zero clips and will now surface the errors. Refs #511 | 2 个月前 | |
Initial release — OpenMontage: the first open-source agentic video production system 11 production pipelines, 47 tools, 124 agent skills. Supports cloud APIs (fal.ai, OpenAI, ElevenLabs, Suno, HeyGen, Runway) and free local providers (diffusers, Piper TTS, WAN 2.1, Hunyuan, CogVideo). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | 7 个月前 | |
up | 2 个月前 | |
up | 2 个月前 | |
feat: add Atlas Cloud media model gateway | 2 个月前 | |
fix(video): include local processing controls in cache identity (#796) * fix(video): include local rendering controls in cache identity Signed-off-by: Rudy Celekli <rudy@gradiahq.com> * fix(video): retain scene analysis controls in processing cache identity Signed-off-by: Rudy Celekli <rudy@gradiahq.com> --------- Signed-off-by: Rudy Celekli <rudy@gradiahq.com> | 9 天前 | |
Add BMTS-Lite fast beat montage route (#753) * Add independent BMTS-Lite beat montage route * Assert Lite remains an optional cinematic tool --------- Co-authored-by: sharbvane <253947805+sharbvane@users.noreply.github.com> | 20 天前 | |
Add BMTS-Lite fast beat montage route (#753) * Add independent BMTS-Lite beat montage route * Assert Lite remains an optional cinematic tool --------- Co-authored-by: sharbvane <253947805+sharbvane@users.noreply.github.com> | 20 天前 | |
fix(clip-cache): prevent path traversal in ingest, try_link, and eviction (#711) Sanitize clip_id and validate cached file names to ensure blob paths remain strictly confined within cache_dir. Root cause: Untrusted or malformed clip_id and manifest file_name values containing directory traversal sequences (e.g. '../') were directly joined with cache_dir without validation. This allowed operations such as unlink, file copy, and hard-linking to target arbitrary paths outside cache_dir. Fix: - Added _is_safe_clip_id() and _safe_blob_path() validation helpers. - Rejected traversal identifiers in ingest() and try_link(). - Sanitized entry deserialization in _read_manifest() so malformed or traversal rows are ignored. - Guarded blob deletion in _evict_to_fit_locked() against escaping paths. - Added comprehensive regression tests in tests/tools/test_clip_cache.py. Reported-by: BS.ehlas.cz | 20 天前 | |
Add documentary-montage pipeline for retrieval-first motion-clip montage New end-to-end pipeline for building thematic documentary montages from a locally-indexed corpus of free stock footage (Pexels, Archive.org, NASA). The agent builds a project-local corpus, CLIP-ranks candidates per scene slot, edits with motion-aware arc logic, and composes via ffmpeg. No paid APIs required for the full path. Pipeline definition and director skills: - pipeline_defs/documentary-montage.yaml: 5-stage manifest (idea -> scene_plan -> assets -> edit -> compose) - skills/pipelines/documentary-montage/: 6 director skills (executive-producer + idea/scene/asset/edit/compose directors) Corpus and retrieval infrastructure: - tools/video/corpus_builder.py: multi-source stock fan-out with resumable append-only corpus index - tools/video/clip_search.py: CLIP ViT-B/32 retrieval — rank_for_slot, find_similar_set, diversify, stats - tools/video/stock_sources/: base + pexels + archive_org + nasa adapters with a pluggable BaseStockSource contract - lib/clip_embedder.py: CLIP wrapper - lib/corpus.py: corpus schema, jsonl append/read, motion-score caching video_compose fix rolled in because any concat-based pipeline depends on it: - Replace ambiguous -to with -t duration (was double-trimming cuts) - Force re-encode + normalize to 1920x1080 @ 30fps (was keyframe- snapping with -c copy and breaking concat on mixed-source corpora) - Add silent-audio anullsrc fallback for clips without an audio stream README: add Documentary Montage row to the pipeline table and bump the pipeline count from 11 to 12. | 6 个月前 | |
fix(cogvideo_video): consult variant i2v flag instead of advertising it unconditionally COGVIDEO_VARIANTS declares cogvideo-2b i2v=False (it is t2v-only), but cogvideo_video advertised image_to_video + reference_image unconditionally and the variant flag was never consulted. An image_to_video brief against the 2B variant reached the diffusion pipeline and failed opaquely. - Add is_operation_available(operation) that derives capability from the variant table (the selector calls it without inputs, so it reports the DEFAULT variant cogvideo-5b: t2v + i2v both True). This replaces an implicit unconditional-True. - Add an execute()-time guard that consults the CALLER's chosen variant and fails fast with a clear error when it lacks the requested mode (2B + image_to_video), instead of dropping into generate_local_video. - Add _variant_for(inputs) helper shared by estimate_runtime / the guard. Tests pin: the 2B premise (i2v=False), default-variant capability reporting, fast-fail for 2B+i2v (generation never runs), and that 5B+i2v still routes through to generate_local_video. Refs: docs/REVIEW-image-to-video-voice.md §8 #4 Co-Authored-By: Claude <noreply@anthropic.com> | 3 个月前 | |
Merge pull request #527 from rbrogan-git/fix/wan22-t2v-temporal-latent fix(comfyui): use a temporal latent in the bundled WAN 2.2 t2v workflow | 29 天前 | |
fix(corpus-builder): sanitize clip_id and prevent path traversal in candidate processing (#717) Validate and sanitize cand.clip_id before constructing local file and thumbnail paths in CorpusBuilder._process_candidate() and the candidate processing loop in execute(). Previously, cand.clip_id was concatenated directly into relative and absolute paths under the corpus directory. A malformed or adversarial clip_id containing directory traversal sequences (e.g. '../../') could escape the corpus directory when resolved, allowing arbitrary file downloads or directory creation outside the intended corpus directory. Changes: - Added _is_safe_clip_id() helper to reject path traversal sequences, delimiters (/, \, :), control characters, and empty/dot names. - Added _safe_child_path() helper to enforce that resolved child paths strictly remain within the parent corpus directory. - Hardened CorpusBuilder.execute() to reject unsafe clip IDs upfront, recording diagnostics in errors and skipping malicious candidates. - Hardened CorpusBuilder._process_candidate() to validate clip_id fail-closed before heavy imports or downloads, and verify that local_abs and thumb_dir_abs do not escape the corpus root. - Added comprehensive regression tests in tests/tools/test_corpus_builder_path_traversal.py. Reported-by: BS.ehlas.cz | 20 天前 | |
Ship Backlot living storyboard release hardening | 3 个月前 | |
Refresh media providers and repair Google and ElevenLabs transports (#845) | 9 天前 | |
feat: add Gemini Omni, Seedance 2.5, and MiniMax H3 routes | 2 个月前 | |
fix(gemini-omni): migrate direct adapter to stable 1.1 Flash (#840) Co-authored-by: Hermes Video Production <hermes@localhost> | 9 天前 | |
fix(video): include local processing controls in cache identity (#796) * fix(video): include local rendering controls in cache identity Signed-off-by: Rudy Celekli <rudy@gradiahq.com> * fix(video): retain scene analysis controls in processing cache identity Signed-off-by: Rudy Celekli <rudy@gradiahq.com> --------- Signed-off-by: Rudy Celekli <rudy@gradiahq.com> | 9 天前 | |
fix(video): isolate temporary workspaces for parallel local renders (#788) Signed-off-by: Rudy Celekli <rudy@gradiahq.com> | 9 天前 | |
Refresh media providers and repair Google and ElevenLabs transports (#845) | 9 天前 | |
feat: refresh media providers and add HeyGen Avatar V | 30 天前 | |
Initial release — OpenMontage: the first open-source agentic video production system 11 production pipelines, 47 tools, 124 agent skills. Supports cloud APIs (fal.ai, OpenAI, ElevenLabs, Suno, HeyGen, Runway) and free local providers (diffusers, Piper TTS, WAN 2.1, Hunyuan, CogVideo). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | 7 个月前 | |
fix(video): runway/higgsfield model defaults diverge from schema runway (estimate_cost/estimate_runtime/execute) defaulted to gen4_turbo and higgsfield (execute) defaulted to kling_3.0, while both schemas advertise seedance_2.0 as model.default. Omitting model under-quoted cost (runway 6x: $0.25 vs $1.50) and silently generated a different model than advertised, violating the Decision-Communication / cost-accuracy contract. Root cause was a default duplicated across schema + 3 methods that drifted. Collapse it to a single _DEFAULT_MODEL constant referenced everywhere. Add tests/tools/test_provider_model_defaults.py to lock each tool's estimate default to its schema default and guard the execute path. | 4 个月前 | |
fix: enforce Hunyuan provider contracts | 2 个月前 | |
Initial release — OpenMontage: the first open-source agentic video production system 11 production pipelines, 47 tools, 124 agent skills. Supports cloud APIs (fal.ai, OpenAI, ElevenLabs, Suno, HeyGen, Runway) and free local providers (diffusers, Piper TTS, WAN 2.1, Hunyuan, CogVideo). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | 7 个月前 | |
feat: add production 3D world pipeline | 2 个月前 | |
fix: declare env dependencies and map selector duration to frames - Add env:VOLC_ACCESSKEY and env:VOLC_SECRETKEY to dependencies - Map selector 'duration' (seconds) to Jimeng 'frames' (121/241) - Add 4 selector duration mapping regression tests - 59 tests pass Fixes calesthio's third review feedback on PR #341. | 3 个月前 | |
fix: complete Kling idempotency inputs Include every request field that can alter Kling video, image, avatar, or lip-sync media in the public idempotency contract. Add a shared regression matrix that detects future cache-key collisions while excluding transport-only controls. | 3 个月前 | |
Fix video generation pipeline gaps found during UAT Four gaps found during user acceptance testing of the reference-video production workflow: - video_selector: expose aspect_ratio, duration, reference_image_path, reference_image_url, and image_url in schema so agents can discover these critical params. Auto-upload local images when the selected provider requires a URL. - _shared.py: add upload_image_fal() for local→URL image bridging via fal.ai storage. Fix upload_image_heygen() to try v2 presigned upload before falling back to fal.ai (old /v1/asset endpoint returns 404). - kling_video: call probe_output() so response includes output_path, duration_seconds, file_size_mb, video dimensions, and codec info. | 6 个月前 | |
feat: refresh media providers and add HeyGen Avatar V | 30 天前 | |
Initial release — OpenMontage: the first open-source agentic video production system 11 production pipelines, 47 tools, 124 agent skills. Supports cloud APIs (fal.ai, OpenAI, ElevenLabs, Suno, HeyGen, Runway) and free local providers (diffusers, Piper TTS, WAN 2.1, Hunyuan, CogVideo). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | 7 个月前 | |
Initial release — OpenMontage: the first open-source agentic video production system 11 production pipelines, 47 tools, 124 agent skills. Supports cloud APIs (fal.ai, OpenAI, ElevenLabs, Suno, HeyGen, Runway) and free local providers (diffusers, Piper TTS, WAN 2.1, Hunyuan, CogVideo). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | 7 个月前 | |
feat: add Gemini Omni, Seedance 2.5, and MiniMax H3 routes | 2 个月前 | |
feat: add Gemini Omni, Seedance 2.5, and MiniMax H3 routes | 2 个月前 | |
Initial release — OpenMontage: the first open-source agentic video production system 11 production pipelines, 47 tools, 124 agent skills. Supports cloud APIs (fal.ai, OpenAI, ElevenLabs, Suno, HeyGen, Runway) and free local providers (diffusers, Piper TTS, WAN 2.1, Hunyuan, CogVideo). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | 7 个月前 | |
Clamp Pixabay per_page to API-required 3-200 range Pixabay rejects per_page outside 3-200 with HTTP 400. The stock_sources adapter already clamped, but the PixabayVideo and PixabayImage tools passed the value through raw, so callers using per_page < 3 got a 400. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> | 3 个月前 | |
fix(video): isolate temporary workspaces for parallel local renders (#788) Signed-off-by: Rudy Celekli <rudy@gradiahq.com> | 9 天前 | |
feat: add Gemini Omni, Seedance 2.5, and MiniMax H3 routes | 2 个月前 | |
feat: add Gemini Omni, Seedance 2.5, and MiniMax H3 routes | 2 个月前 | |
video-gen: prefer Seedance 2.0 on every gateway that supports it Expands the Seedance 2.0 surface from fal.ai-only to every gateway the OpenMontage toolset can reach, so users on Replicate / Runway / Higgsfield automatically route cinematic briefs through Seedance 2.0 instead of the gateway's prior default. - tools/video/seedance_replicate (new): REPLICATE_API_TOKEN adapter for bytedance/seedance-2.0 and bytedance/seedance-2.0-fast. Same provider family ("seedance"), quality_score=0.95, premium capability flags. - tools/video/runway_video: add seedance_2.0 / seedance_2.0_fast to the model enum as the new default, flag native_audio + multi_shot + camera_direction + lip_sync in supports, point agent_skills at seedance-2-0 Layer 3 skill. Note Runway Unlimited/Enterprise + non-US gating in the model description. - tools/video/higgsfield_video: same pattern. seedance_2.0 is now the default model. Cost estimates calibrated to Higgsfield credit pricing (~$0.50-$1.20 per 5s). - tools/video/_shared: annotate HEYGEN_PROVIDERS seedance_pro/lite as Seedance 1.x (2.0 on HeyGen flows through Video Agent / Avatar Shots which need a separate wrapper — tracked as follow-up). - .agents/skills/seedance-2-0: update provider matrix to show which gateways are wrapped (fal.ai, Replicate, Runway, Higgsfield) vs. which are still roadmap (HeyGen Video Agent, BytePlus, Freepik, aggregators). The scoring engine already deduplicates by provider="seedance" so whichever gateway the user has configured wins automatically. Agents passing preferred_provider="seedance" to video_selector route to the best available Seedance 2.0 path without naming a specific gateway. | 6 个月前 | |
fix(seedance_video): send fal reference fields for Seedance 2.0 (#759) reference_to_video on model_version 2.0 put reference assets under reference_image_urls / reference_video_urls / reference_audio_urls. fal's bytedance/seedance-2.0/reference-to-video endpoint reads image_urls / video_urls / audio_urls (the same names already used for 2.5), so the references were dropped and every request failed with 422 "At least one reference image or video is required." Use the fal field names for both versions and add a 2.0 contract test alongside the existing 2.5 one. Co-authored-by: r4id3nzx-sys <340606627+r4id3nzx-sys@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> | 20 天前 | |
Merge commit from fork * fix(video): prevent ffmpeg filtergraph injection in drawtext and subtitle force_style (GHSA-cg89-3297-mwhg) * Close remaining filtergraph injection; preserve literal text Addresses review on this PR: 1. [P1] title_color (and background_color) were still interpolated directly into the filtergraph (showcase_card.py:182) - a crafted color literal could close the fontcolor option list and append a second drawtext filter that reads an arbitrary local file into the output. Adds _validate_color() (named color or 0x/#-hex literal only) and applies it to both fields, plus _validate_font_file() for title_font (bare filename, no path/quote/colon characters) and _validate_int_range() for output_width/output_height/font sizes. 2. [P2] _drawtext_safe destroyed literal punctuation in user text (stripped backslash/percent, turned ':' into ' —'). Replaced with _write_drawtext_textfile(): text is written verbatim to a temp file and read back via drawtext's textfile=+expansion=none, which needs no escaping of the text content at all. Only the (internally generated) temp-file path is embedded in the filtergraph, via _safe_filter_path(). Adds tests/tools/test_showcase_card_security.py: unit tests for the three validators and the textfile writer, plus FFmpeg integration tests reproducing the reviewer's title_color canary-file-read attack (now rejected) and verifying tricky punctuation (%, :, backslash, apostrophe, comma) now renders unchanged. * fix(video): escape temporary text paths across FFmpeg parsers --------- Co-authored-by: Filip Kulisiewicz <nisustawa@gmail.com> Co-authored-by: calesthio <celesthioailabs@gmail.com> | 4 天前 | |
fix(video): preserve source intervals during silence speed-up (#798) Signed-off-by: Rudy Celekli <rudy@gradiahq.com> | 9 天前 | |
feat(video): add Gemini Omni Flash provider with conversational editing Add gemini_omni_video, a native Gemini API provider wrapping gemini-omni-flash-preview via the Interactions API. Text-to-video, image/reference-to-video with <FIRST_FRAME>/<IMAGE_REF_N> prompt tags, and stateful edit_video turns via previous_interaction_id — the only provider in the fleet that can refine a clip without regenerating it. Reuses the existing GOOGLE_API_KEY / GEMINI_API_KEY, so one Google key now unlocks images, TTS, and video. - New Layer 3 skill .agents/skills/gemini-omni (prompting, edit-loop rules, tag/timecode syntax, preview limits) sourced from official Google docs; linked via agent_skills and the AGENT_GUIDE Layer 3 map - ai-video-gen gains the Gemini API gateway row + editing pointer - veo_video/sora_video fallback lists and video_selector agent_skills reference the new provider; quality_score 0.85 with rationale - Contract tests: registry discovery, selector routing, status from env keys, uri + inline delivery, edit turns, typed image parts, store=false editability, cost clamp | 3 个月前 | |
Refresh media providers and repair Google and ElevenLabs transports (#845) | 9 天前 | |
Merge commit from fork * fix(video): prevent ffmpeg filtergraph injection in drawtext and subtitle force_style (GHSA-cg89-3297-mwhg) * Close remaining filtergraph injection; preserve literal text Addresses review on this PR: 1. [P1] title_color (and background_color) were still interpolated directly into the filtergraph (showcase_card.py:182) - a crafted color literal could close the fontcolor option list and append a second drawtext filter that reads an arbitrary local file into the output. Adds _validate_color() (named color or 0x/#-hex literal only) and applies it to both fields, plus _validate_font_file() for title_font (bare filename, no path/quote/colon characters) and _validate_int_range() for output_width/output_height/font sizes. 2. [P2] _drawtext_safe destroyed literal punctuation in user text (stripped backslash/percent, turned ':' into ' —'). Replaced with _write_drawtext_textfile(): text is written verbatim to a temp file and read back via drawtext's textfile=+expansion=none, which needs no escaping of the text content at all. Only the (internally generated) temp-file path is embedded in the filtergraph, via _safe_filter_path(). Adds tests/tools/test_showcase_card_security.py: unit tests for the three validators and the textfile writer, plus FFmpeg integration tests reproducing the reviewer's title_color canary-file-read attack (now rejected) and verifying tricky punctuation (%, :, backslash, apostrophe, comma) now renders unchanged. * fix(video): escape temporary text paths across FFmpeg parsers --------- Co-authored-by: Filip Kulisiewicz <nisustawa@gmail.com> Co-authored-by: calesthio <celesthioailabs@gmail.com> | 4 天前 | |
feat: refresh media providers and add HeyGen Avatar V | 30 天前 | |
fix(video): include local processing controls in cache identity (#796) * fix(video): include local rendering controls in cache identity Signed-off-by: Rudy Celekli <rudy@gradiahq.com> * fix(video): retain scene analysis controls in processing cache identity Signed-off-by: Rudy Celekli <rudy@gradiahq.com> --------- Signed-off-by: Rudy Celekli <rudy@gradiahq.com> | 9 天前 | |
fix(video): include local processing controls in cache identity (#796) * fix(video): include local rendering controls in cache identity Signed-off-by: Rudy Celekli <rudy@gradiahq.com> * fix(video): retain scene analysis controls in processing cache identity Signed-off-by: Rudy Celekli <rudy@gradiahq.com> --------- Signed-off-by: Rudy Celekli <rudy@gradiahq.com> | 9 天前 | |
Refresh media providers and repair Google and ElevenLabs transports (#845) | 9 天前 | |
feat: refresh media providers and add HeyGen Avatar V | 30 天前 | |
feat: refresh media providers and add HeyGen Avatar V | 30 天前 | |
feat: refresh media providers and add HeyGen Avatar V | 30 天前 | |
up | 2 个月前 |