Commit Graph

331 Commits

Author SHA1 Message Date
calesthio
7f43667dfd fix: refresh Fish Audio promotion and schema 2026-08-13 09:32:54 -07:00
calesthio
7052f3999b Merge remote-tracking branch 'origin/main' into codex/repair-pr-353
# Conflicts:
#	.env.example
2026-08-13 09:28:52 -07:00
Calesthio
51330d1723 Merge pull request #499 from calesthio/codex/paper-3d-world
feat: add production 3D world pipeline
2026-08-13 08:01:20 -07:00
calesthio
04571cfe8e test: make Blender doctor contract portable 2026-08-13 07:56:45 -07:00
calesthio
2702362c24 feat: add production 3D world pipeline 2026-08-13 07:48:38 -07:00
Calesthio
4eab34c5cf Merge pull request #466 from calesthio/codex/backlog-recovery-20260802
Recover bounded defects from the latest PR backlog
2026-08-03 14:49:08 +05:30
calesthio
9482eddeff fix: recover bounded defects from PR backlog 2026-08-03 02:14:01 -07:00
calesthio
c36e41223e Make Monty the Clapper the OpenMontage mascot
Replace the play-button logo in both READMEs with animated SVG versions of
Monty, served via <picture> + prefers-color-scheme so the mark reads on
GitHub's light and dark themes. Motion uses SMIL animateTransform rather
than CSS keyframes so it survives the <img> rendering context without
depending on transform-box: view-box.

Rebuild the 1280x640 social preview around Monty in the ink/cream/terracotta
palette, and refresh its stat row to the current counts (12 pipelines,
100+ tools, 700+ agent skills). The card's source HTML ships alongside it so
future count updates are an edit and a re-screenshot.
2026-07-24 12:25:41 -07:00
Calesthio
0af32ce5e1 Merge pull request #341 from yiyabo/feat/jimeng-video
Add Volcengine Jimeng (即梦 AI) video provider with V4 signing
2026-07-23 07:59:05 -07:00
Yiyabo
d4426f6e94 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.
2026-07-23 01:33:36 +08:00
calesthio
e0bfcb44a6 Update README capability counts 2026-07-22 07:16:53 -07:00
Tomofumi Yagi
990d7f9a2c fix: address selector contract, promo pricing, idempotency, and registry metadata review
- Require 'model' in the input schema and accept 'model_id' as a
  selector-compatible alias (tts_selector exposes model_id); add a
  selector-routing regression test
- Document s2.1-pro-free as promotional (free through end of July 2026,
  Fair Use, no SLA, possible request retention, commercial-use
  restrictions) in PROVIDERS.md and the Layer 3 skill; estimate_cost()
  falls back to the paid s2.1-pro rate after the promo window
- Normalize voice_id/reference_id and model_id/model aliases before
  computing the idempotency key, and include all output-affecting inputs
  (bitrate, sample_rate, temperature, top_p, repetition_penalty, latency,
  prosody, normalize, chunk_length) with API defaults applied
- Declare env:FISH_AUDIO_API_KEY in dependencies so registry metadata
  reports the requirement
- Add fish_audio to the TTS provider set in the phase3 registry contract
  test
2026-07-22 19:00:46 +09:00
Tomofumi Yagi
b29e238e8e docs: add fish.audio to provider docs and fix stale speech-1.x reference
- .env.example: replace removed speech-1.x mention with the actual
  supported backends (s1 / s2-pro / s2.1-pro)
- docs/PROVIDERS.md: add fish.audio section (setup, backend models,
  per-byte pricing incl. free s2.1-pro-free tier) plus entries in the
  env var summary, Provider-to-Tool Mapping, and Capability Coverage
- skills/INDEX.md: list fish-audio-tts in the TTS & Audio Layer 3 row
2026-07-22 18:52:33 +09:00
Tomofumi Yagi
d40c32441c feat: add fish.audio TTS provider
Add FishAudioTTS (capability=tts) so tts_selector auto-discovers a new
high-quality, voice-clone-capable provider. Backend model is required per
call: s1 (previous flagship, kept for compatibility), s2-pro (first S2
generation), s2.1-pro (latest flagship — inline emotion tags, 80+
languages), s2.1-pro-free (free tier for drafts). s1-mini and the
speech-1.x tier have been removed from the current fish.audio API and are
no longer supported. Voice cloning via reference_id with voice_id as a
selector-compatible alias. Adds temperature/top_p/repetition_penalty
sampling controls, optional sample_rate, opus output format, and a "low"
latency tier. Cost is estimated per UTF-8 byte to match fish.audio
billing. Includes a Layer 3 skill, .env.example entry, and unit tests.

Verified end-to-end with s2.1-pro + reference_id: generated a 7-segment
Japanese narration successfully.
2026-07-22 18:51:05 +09:00
Calesthio
888fe5a73c Merge pull request #337 from 0xDevNinja/fix/green-screen-chromakey-1x1-collapse
fix(green_screen): scale chromakey background to frame size, not 1x1
2026-07-21 14:57:37 -07:00
Calesthio
c934116c0a Merge pull request #413 from albatrossflyon-coder/fix/skill-template-os-command-injection
fix: sanitize os.system() shell injection in manimgl scene templates
2026-07-21 14:55:43 -07:00
Chris Brown
85a63471a2 fix: sanitize os.system() shell injection in manimgl scene templates
os.system(f"manimgl {__file__} ClassName") interpolates the script's own
path into a shell string. These templates are meant to be copied and
renamed per-scene by an agent, so a scene/folder name containing shell
metacharacters is a real injection path, not just malformed input.

Switched to subprocess.run() with an argument list (no shell=True), so
there's nothing left for a shell to interpret regardless of what the
path contains. Same fix applied in both duplicate locations
(.claude/skills and .agents/skills) since the files are identical.

Reviewed scripts/lib/tts.mjs's child_process usage as part of the same
report -- not included in this PR, it already passes args as a real
array with no shell:true anywhere in the call chain, so it isn't
actually exploitable.
2026-07-21 11:26:42 -05:00
calesthio
db91727598 Add website link to README
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:06:44 -07:00
Calesthio
80e045a1e7 Merge pull request #404 from calesthio/codex/remove-cla
Remove the CLA contribution gate
2026-07-19 09:24:36 -07:00
calesthio
8190911ca8 chore: remove CLA contribution gate 2026-07-19 09:16:31 -07:00
Yiyabo
53773cd5fc fix: tighten input_schema per Volcengine Jimeng 3.0 Pro contract
- frames: enum [121, 241] (was minimum 1)
- prompt: maxLength 800 (was 2000)
- seed: minimum -1 (was unbounded)
- Add 9 schema validation rejection tests
- Add authoritative API reference link to PROVIDERS.md
- Document CVSync2Async* route choice and schema constraints

Fixes calesthio's second review feedback on PR #341.
2026-07-19 21:47:06 +08:00
calesthio
c2045ad5f0 Merge Lyria music generation skill 2026-07-18 17:01:58 -07:00
Calesthio
6493ca6ed3 Merge pull request #401 from calesthio/cla-setup
Add Contributor License Agreement and CLA signature gate
2026-07-18 16:48:15 -07:00
calesthio
0ff7bb30e3 feat(music): add Google Lyria generation skill 2026-07-18 16:47:35 -07:00
calesthio
9f8f99e97e Add Contributor License Agreement and CLA signature gate
Introduces CLA.md (individual CLA: contributors keep all rights to their
work, grant the project the right to offer contributions under additional
license terms; includes a written commitment in section 6 that the engine
remains open source) and a CLA Assistant Lite workflow that gates every PR
on a one-comment signature, with signatures stored in-repo on the
cla-signatures branch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 16:44:11 -07:00
calesthio
af87fc1337 fix(backlot): surface approval artifacts before gates 2026-07-18 01:33:12 -07:00
calesthio
5072b4647c docs: update Bloome sponsor links 2026-07-17 23:10:34 -07:00
Calesthio
33c7000e68 Merge pull request #374 from ShiroKSH/fix/hyperframes-relative-output-path
fix: resolve relative HyperFrames output paths
2026-07-17 18:53:52 -07:00
Calesthio
2a6bf1e039 Merge pull request #391 from tianrking/agent/fix-delayed-audio-fades
fix(audio): schedule delayed track fades correctly
2026-07-17 18:51:56 -07:00
Calesthio
9f94c1fe0e Merge pull request #389 from 0xDevNinja/fix/imagen-multi-image-drop
fix(google_imagen): write every generated image, not just the first
2026-07-17 18:50:08 -07:00
Calesthio
39e46d78fe Merge pull request #393 from 0xDevNinja/fix/corpus-diversify-scale
fix(corpus): normalize diversify() position term so similarity can compete
2026-07-17 18:48:13 -07:00
0xDevNinja
7ad68f28ec fix(corpus): normalize diversify() position term so similarity can compete
The greedy score mixed incommensurate scales: cosine similarity bounded
to [-1, 1] against an absolute list index that grows with the pool. For
a candidate j positions later to be preferred at the default
diversity=0.5, its similarity advantage had to exceed j -- impossible for
the non-negative cosines real footage embeddings produce. diversify()
therefore returned the input order verbatim, placing exact-duplicate
clips in adjacent edit slots, the one thing its docstring promises to
prevent. The threshold where the knob started working also depended on
pool size (0.66 at 4 candidates, 0.95 at 11).

Normalize the position term to [0, 1] so both terms share a scale. The
documented endpoints hold exactly as before: diversity=0 returns input
order, diversity=1 picks the most mutually dissimilar. Enumerating the
position also drops the O(n^2) remaining.index() lookup per candidate.

Closes #392
2026-07-16 18:44:14 +05:30
tianrking
5e21f1b78a fix(audio): schedule delayed track fades correctly 2026-07-16 13:33:17 +08:00
0xDevNinja
011a27df6a fix(google_imagen): write every generated image, not just the first
execute() sends sampleCount=number_of_images and estimate_cost() bills
0.04 * n, but result handling decoded only predictions[0] and wrote it to
a single output_path. Images 2..n were dropped: never decoded, never
written, absent from artifacts. The user paid for n and received one.

The result also misreported the drop rather than failing loudly --
images_generated returned len(predictions) (what the API sent) while
artifacts held a single path, so an agent picking between variants read a
count that did not match the artifact list.

Add _output_paths() and loop over every prediction, mirroring the pattern
already used by openai_image and grok_image: suffix multi-image paths
_1/_2/... so none overwrite each other, keep the exact requested path when
n=1, return all paths in artifacts, and report images_generated as the
count actually written.

Closes #388
2026-07-15 16:30:57 +05:30
0xDevNinja
fa756fbec5 fix(green_screen): make chromakey compositing portable across FFmpeg builds
The CI Linux FFmpeg build carried the keyed frame forward without an alpha
plane, so overlay drew opaque green over the background (corner stayed green)
instead of compositing — the E2E test failed there even though it passed on
macOS/Windows.

Force `format=yuva420p` immediately after chromakey so the keyed transparency
always has an explicit alpha plane, and size the background to the frame up
front (color=...:size=WxH, passing the probed width/height into
_process_chromakey) instead of scaling a 1x1 source with scale2ref — dropping
scale2ref also removes the format negotiation that discarded the alpha on some
builds. Output is flattened to yuv420p after the overlay.
2026-07-14 14:27:40 +05:30
ShiroKSH
24617af460 fix: resolve relative HyperFrames output paths 2026-07-13 21:33:11 +03:00
Yiyabo
8414c485ad fix: restore requests module after test_lazy_imports_requests
Use monkeypatch.delitem instead of manual del sys.modules['requests']
so pytest automatically restores the module after the test. This
prevents 12 downstream Google auth/music/Veo tests from failing with
AttributeError: module 'requests' has no attribute 'exceptions'.

Fixes calesthio's review feedback on PR #341.
2026-07-13 12:55:27 +08:00
Calesthio
f8d94632ea Merge pull request #354 from amartya-dev/feat/azure-speech-to-text
feat(stt): add Azure AI Speech as an optional cloud speech-to-text provider
2026-07-12 10:48:36 -07:00
Calesthio
94f382a1b4 Merge pull request #363 from prasanthsasikumar/upstream/fix-file-uri-slashes
fix(remotion): correct file:// URI slash count for POSIX absolute paths
2026-07-12 10:46:05 -07:00
Calesthio
318e0843ee Merge pull request #325 from 0xDevNinja/fix/subtitle-ts-overflow-and-checkpoint-keyerror
fix: subtitle timestamp ms overflow; checkpoint KeyError on manifest-only stages
2026-07-12 10:45:47 -07:00
Calesthio
df3801a6b9 Merge pull request #323 from xucailiang/codex/kling-official-phase-1
Add official Kling API providers
2026-07-12 10:45:02 -07:00
Prasanth Sasikumar
9c9b1beeb5 fix(remotion): correct file:// slash count for POSIX absolute paths
resolveAsset() built `file:///` + a POSIX absolute path (which already
starts with /), yielding `file:////Users/...` (four slashes). Split the
branch: POSIX paths get `file://` + path (three slashes total), Windows
drive paths keep the explicit extra slash. Same fix across the five
compositions that share resolveAsset().

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 226a52d1e9b56b9da8b94e8e95ef6b753666abb0)
2026-07-11 22:33:05 -04:00
calesthio
f633b5f428 Improve Backlot light theme 2026-07-10 23:39:33 -07:00
calesthio
6aa15f6504 docs: add sponsor section 2026-07-10 21:59:33 -07:00
amartya-dev
a2a0d8c8af feat(stt): add Azure AI Speech as an optional cloud speech-to-text provider
Add an Azure AI Speech transcription tool. It is opt-in: when
AZURE_SPEECH_KEY is configured the agent may prefer it for cloud STT,
while the local faster-whisper `transcriber` stays the default offline
path. Shared pipeline manifests are intentionally left unchanged, so no
default provider selection is altered for existing users.

- tools/analysis/azure_stt.py: new `azure_stt` tool (capability=analysis,
  provider=azure) calling the Fast Transcription REST API. The local file
  is uploaded via multipart and transcribed synchronously with word-level
  timestamps and optional diarization — no Blob storage or async polling.
  Output schema mirrors `transcriber` exactly, so it is a drop-in for
  `subtitle_gen` and other transcript consumers. Follows the existing
  provider-tool conventions (env-var status check, `_transcribe` helper,
  cost_usd/model on the result, fallback="transcriber").
- Auto-discovered by the registry; no registry or selector changes.
- tests/tools/test_azure_stt.py: contract, discovery, status, response
  mapping, execute guardrails, and a mocked-network success path (no live
  API calls).
- .agents/skills + .claude/skills: azure-speech-to-text Layer-3 skill.
- docs/PROVIDERS.md: Azure AI Speech setup, API notes, and pricing.
- .env.example, skills/INDEX.md, AGENT_GUIDE.md: document the optional
  cloud STT path alongside the default whisper transcriber.
2026-07-10 23:30:19 +05:30
xucailiang
6b9ba782d8 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.
2026-07-10 21:24:11 +08:00
xucailiang
b9b9b82b64 fix: harden Kling integration verification
Isolate Kling contract tests from the singleton registry so discovery state cannot leak into later selector tests. Align lip-sync face, audio, and timing payloads with the current official API and extend the live smoke coverage.
2026-07-10 20:53:45 +08:00
Yiyabo
2ad71dd591 fix: use minimax_video (not minimax_tokenplan_video) in fallback_tools
minimax_tokenplan_video does not exist in main branch (added in PR #297,
not yet merged). Use minimax_video which is the existing tool.

Fixes Copilot review comments on fallback_tools reference and
contract test assertion.
2026-07-10 18:54:25 +08:00
xucailiang
2b6d717f00 Merge remote-tracking branch 'origin/main' into codex/kling-official-phase-1
# Conflicts:
#	.agents/skills/ai-video-gen/SKILL.md
#	.env.example
#	docs/PROVIDERS.md
2026-07-10 14:02:30 +08:00
Yiyabo
e06f56d26a jimeng: add Volcengine Jimeng (即梦 AI) video provider with V4 signing
Implements the Jimeng/Volcengine part of issue #249, as agreed with
@xucailiang (who is handling the Kling provider separately).

Adds a first-class Jimeng video provider that calls the Volcengine
visual API directly (visual.volcengineapi.com) using HMAC-SHA256 V4
request signing with IAM AK/SK credentials. This is the first provider
in OpenMontage to use V4 signing (all others use Bearer token auth).

API flow: POST CVSync2AsyncSubmitTask -> poll CVSync2AsyncGetResult ->
download video_url.

Features:
- Text-to-video and image-to-video (Jimeng 3.0 Pro)
- Configurable frame count (121=5s, 241=10s at 24fps)
- Aspect ratio selection (16:9, 9:16, 1:1, etc.)
- Seed for reproducibility
- Full V4 HMAC-SHA256 request signing (not Bearer token)
- Error handling with Jimeng code 10000 success convention
- API key redaction in error messages (both env vars, no empty-string bug)

Env vars: VOLC_ACCESSKEY + VOLC_SECRETKEY (IAM AK/SK pair).
Idempotency keys include all output-affecting fields.

Files:
- tools/video/jimeng_video.py — new tool (V4 signing + submit/poll/download)
- tests/contracts/test_jimeng_video.py — 46 contract tests (no AK/SK needed)
- .env.example — VOLC_ACCESSKEY + VOLC_SECRETKEY
- docs/PROVIDERS.md — Volcengine Jimeng provider section

End-to-end tested with real Volcengine IAM credentials: generated a
1920x1088 H.264 5.04s video, ffprobe verified.

Test results:
  python -m pytest tests/contracts/test_jimeng_video.py -q  # 46 passed
2026-07-10 10:50:43 +08:00