Commit Graph

173 Commits

Author SHA1 Message Date
calesthio
7837bfee4a ink-theater: clear code-review findings — license-clean mocap + font, fix stale clip refs
Licensing (finding 1):
- Mocap library is now 100% CMU-sourced (free for any use). Replaced the 3
  Meta/FAIR clips with CMU equivalents: wave=141_16, shuffle=77_29 (creep);
  dropped the un-CMU "dab", added twist=141_12. Deleted the 4 committed FAIR
  BVHs (dab/jumping/wave_hello/zombie).
- Ship Patrick Hand's SIL OFL license (assets/OFL.txt) beside the bundled font
  — OFL permits embedding/redistribution; this is the required attribution.
- Add THIRD_PARTY_NOTICES.md (Patrick Hand OFL + CMU) and rewrite mocap/NOTE.md
  to drop the "verify before commercial use" caveat (no longer applicable).

Stale clip names (finding 2):
- Update the /ink-art command files (.claude/.github/.cursor/.codex),
  character-design-director, and the creative skills to the current catalog
  (wave/twist/…), and point to add-motion.mjs.
- ink-puppet.js: console.warn on an unknown clip name instead of silent dead-time.

Examples (finding 3):
- Remove broken standalone reel.html/momentum.html (they referenced a missing
  ink-theater.js and momentum shipped the subset font the fix warns against).
- Keep mocap-figure/ as the canonical self-contained, lintable example; refresh
  its bundled clips.js/ink-puppet.js; add examples/README.md with the lint path.
2026-07-01 04:03:19 -07:00
calesthio
a80bb6e7e1 feat: /animated-drawing character-source chooser (ask first; generate/upload/stock/doodle-ify)
Adds an explicit 'choose a character source' step so the agent never silently
reuses a bundled character (the 'same mascot every video' problem). Options:
user uploads a drawing; user uploads a photo -> doodle-ify (img2img) -> rig;
generate a fresh doodle (FLUX/Imagen, recommended default); or stock
(pixabay/pexels, hit-or-miss). Bundled chars are demo-only.
2026-07-01 02:52:44 -07:00
calesthio
0b9cde8458 feat: complete Ink Theater motion system — action library + self-extending converter + balloon primitive + audit doc fixes
Ships Phases 1-3 so the feature isn't left hanging:
- Phase 1: 12-action mocap library (walk/run/jump/climb/march/kick/sit/wave/dab/
  shuffle/dance_spin/dance_glide) from CMU + fair1, with mocap/catalog.json.
  Fixes the '4 repeated moves' repetition problem.
- Phase 2: bvh2clip.mjs is skeleton-agnostic (fair1/CMU/Mixamo joint aliases) +
  frame cap + --name; add-motion.mjs fetches/converts/rebundles any BVH by CMU
  id / URL / path — self-extending, no code changes.
- Phase 3: skill guidance to read catalog.json + choreograph variedly (never
  loop a clip), add-motion, and the balloon primitive.
- Engine: InkTheater.balloon() speech-balloon primitive (both audit videos
  hand-built it).
- Audit fixes: /animated-drawing skill gains a motion->retarget mapping table
  (2 motions crashed on the wrong config) + a 'Compositing into HyperFrames'
  section (transparent output, GIF-freezes->VP9-alpha, the linter video
  contract) + character-variety guidance (animate the user's/a generated
  drawing, not a bundled char) + pipeline-exempt notes.
Example refreshed to the new library + full Patrick Hand TTF.
2026-06-30 21:13:38 -07:00
calesthio
2a7f130bee fix: correct the font gotcha — subset trap, not SVG-vs-HTML; bundle Patrick Hand TTF
Audit finding from video production: handwriting rendered as serif everywhere
because the woff2 we downloaded was a Google-Fonts css2 subset MISSING basic-latin
(ASCII) glyphs — not because 'SVG text can't use webfonts' (the old README claim
was a misdiagnosis; prior demos were silently serif). Fix: embed the FULL font.
Bundles ink-theater/assets/patrickhand.ttf and corrects README + skill guidance
(HTML overlay divs + full TTF).
2026-06-30 20:40:12 -07:00
calesthio
ccbce8bb1e feat: discoverability + cross-agent slash commands for Ink Theater / Animated Drawing
Makes the doodle-animation capability findable instead of hidden.

Routing (OpenMontage-internal):
- AGENT_GUIDE: Style Playbooks gets an ink-sketch row + a 'hand-drawn doodle'
  routing note (it's a style + engine on the animation / character-animation
  pipelines, NOT a new pipeline).
- animation/idea-director + character-animation/character-design-director point
  to the Ink Theater / Ink Puppet skills for hand-drawn character briefs.

Cross-agent slash commands (/ink-art, /animated-drawing) for Claude Code,
Copilot, Cursor, and Codex — thin pointers to the canonical skills so they stay
in sync. /ink-art = create a vector doodle from scratch (Ink Theater + Ink
Puppet mocap); /animated-drawing = animate a SUPPLIED drawing via Meta
AnimatedDrawings (raster). New skills/creative/animated-drawing.md documents the
Path A setup/run/limits. Codex prompts are user-home only — .codex/prompts/README
explains the copy/symlink step.

  .claude/commands/*.md            (Claude Code)
  .github/prompts/*.prompt.md      (Copilot)
  .cursor/commands/*.md            (Cursor)
  .codex/prompts/*.md + README     (Codex; copy to ~/.codex/prompts)
2026-06-30 20:13:48 -07:00
calesthio
389534af4a feat: Ink Puppet — real mocap (BVH) retargeted onto a hand-drawn figure
The agent-seamless character system: motion comes from a LIBRARY of real
motion-capture clips, never hand-tuned per video. Two parts:

- mocap/bvh2clip.mjs: offline BVH(3D) -> compact 2D clip converter (FK +
  projection + skeleton-rest scaling), run once per motion; bundled via clips.js.
- ink-puppet.js: runtime that draws a stick figure limb-by-limb (draw-on reveal)
  and plays named clips via a declarative choreograph() API. Deterministic /
  seek-safe (pose = pure fn of segment local time).

Example (examples/mocap-figure): the pencil figure draws itself, then waves /
dabs / jumps / walks from real mocap. Keeps vector white-ink + draw-on reveal
that Meta AnimatedDrawings (raster, humanoid-only, no reveal) cannot do.
Provenance/licensing: mocap/NOTE.md (prefer free CMU mocap for production).
2026-06-30 19:49:57 -07:00
calesthio
0aa986e61b feat: Ink Theater — deterministic hand-drawn moving-art engine + creative skill
Reusable engine (ink-theater/ink-theater.js, global InkTheater) for hand-drawn
ink-on-white animated 'moving art', authored for HyperFrames (atelier). Five
seek-safe primitives: variable-width brush strokes (inkPath/inkRibbon),
timeline-driven boil, closed-form damped-spring eases, FABRIK 2D IK + riggable
mascot, and a parametric contraption grammar (crank/gauge/hopper/slot/lever/box).

Adds skills/creative/ink-theater.md (metaphor method + mined archetypes + color
grammar) and README with the HyperFrames font gotcha (webfonts apply to HTML
divs, not SVG <text>). Two reference builds under ink-theater/examples/.

Grounded in deep-research on vector/physics/metaphor foundations (FABRIK,
bounded-biharmonic/ARAP, closed-form springs, LLM metaphor+layout planning).
2026-06-30 17:03:20 -07:00
Calesthio
299dd4f5fd Merge pull request #236 from calesthio/fix/skill-blob-hardlink-divergence
fix: reconcile hardlinked .claude/skills ↔ .agents/skills blobs (clean dirty tree)
2026-06-29 23:05:46 -07:00
Calesthio
46ed550883 Merge pull request #229 from calesthio/codex/expressive-tts-governance
[codex] Add expressive TTS governance
2026-06-29 23:04:56 -07:00
calesthio
1918be6526 fix: reconcile .claude/skills blobs with hardlinked .agents/skills
The skill SKILL.md files are hardlinked across .agents/skills/ and
.claude/skills/ (same inode, two paths), but git had committed divergent
blobs: the .agents/ copies carried an "Extended reference: AGENTS.md"
note that the .claude/ copies lacked. Because one physical file cannot
match two different blobs, the working tree was permanently dirty on the
three .claude/skills paths.

Stage the .claude copies so both paths commit identical content (with the
AGENTS.md reference note, the fuller intended version). Restores a clean
git status and keeps it clean across checkouts.

Affected skills: flux-best-practices, vercel-composition-patterns,
vercel-react-best-practices.
2026-06-29 22:58:56 -07:00
Calesthio
5ae4439105 Merge pull request #230 from Alcb4/comfyui-bridge
Add native ComfyUI provider (rebase of #29, conflicts resolved)
2026-06-29 14:55:03 -07:00
Alastair Beal
85cf047c93 comfyui: route custom workflows through image/video selectors
The selector path previously hid the custom-workflow feature: video_selector
filtered tools on per-operation readiness (bundled WAN models) and both
selectors only chose ToolStatus.AVAILABLE providers, so comfyui_image/
comfyui_video — DEGRADED when bundled model metadata is missing — were
dropped even when the ComfyUI server was up and the caller supplied a full
workflow_json/workflow_path plus output_node.

- Add a custom-workflow readiness path to both selectors: when a custom
  workflow is supplied, eligibility is based on server availability (status
  != UNAVAILABLE) for any provider advertising supports.custom_workflow,
  not on bundled-model readiness. A custom workflow also restricts routing
  to custom-workflow-capable providers, since the graph JSON is ComfyUI
  specific.
- Expose workflow_json, workflow_path, output_node, workflow_name,
  workflow_model, and workflow_model_stack in both selector schemas so
  agents can discover the feature without bypassing the selectors.
- image_selector only forwards the workflow inputs to providers that
  declare them.
- Add contract tests for the new eligibility path and schema exposure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 22:38:18 +01:00
calesthio
5e4943a41b Add expressive TTS governance 2026-06-29 12:16:07 -07:00
calesthio
7c4bb08890 comfyui: satisfy provider contract review items 2026-06-29 19:09:22 +01:00
martimramos
4c62186c95 comfyui: drop music tool — ACE-Step node interface not standardized
Removed comfyui_music and its workflow. The ACE-Step model runs in
ComfyUI but the node class names differ across custom node packs
(AceStepModelLoader vs native TextEncodeAceStepAudio, etc.), so a
bundled workflow would break for most users.

Documented the reasoning in the plan doc and listed it as an open
question for future work. Users with ACE-Step working can still use
the workflow_json override on any tool.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-29 19:09:22 +01:00
martimramos
e3947e1f11 comfyui: add model discovery and actionable error messages
- Client queries ComfyUI /object_info to discover installed models
  (checkpoints, diffusion models, VAE, CLIP, LoRAs)
- Each tool declares its required models and checks them on execute()
- get_status() returns DEGRADED when server is up but models are missing
- Clear error messages tell the user exactly which models to download
- When COMFYUI_SERVER_URL is not set, error message tells the user to
  configure it in .env instead of silently failing on localhost:8188
- 8 new tests covering URL config, error messages, and model requirements

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-29 19:08:49 +01:00
martimramos
6ec2bbb090 comfyui: add native ComfyUI provider for image, video, and music generation
Adds three new BaseTool providers that delegate GPU work to a running
ComfyUI server via its REST API.  This avoids the need to install
PyTorch/diffusers directly, which is critical on hardware where the
ecosystem hasn't caught up (e.g. NVIDIA Blackwell / DGX Spark, aarch64
+ CUDA 13.0).

New files:
- tools/_comfyui/client.py — shared REST client (submit/poll/download)
- tools/_comfyui/workflows/ — 4 bundled workflow templates
- tools/graphics/comfyui_image.py — FLUX 2 Dev NVFP4 text-to-image
- tools/video/comfyui_video.py — WAN 2.2 14B t2v + i2v (4-step LightX2V)
- tools/audio/comfyui_music.py — ACE-Step 3.5B music generation
- tests/contracts/test_comfyui_tools.py — 41 contract tests
- docs/comfyui-adapter-plan.md — design document

Zero changes to existing tools, selectors, registry, or pipelines.
Tools are auto-discovered and selectors pick them up via capability match.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-29 19:08:49 +01:00
Calesthio
80e51fd618 Merge pull request #211 from calesthio/docs/readme-star-history-and-trending-badge
docs(readme): add Star History chart + polish Repository of the Day badge
2026-06-27 17:21:35 -07:00
calesthio
5eb996681d docs(readme): replace stretched shields.io badge with bordered SVG card
The previous attempt at matching the deer-flow Repository-of-the-Day
design used `style=for-the-badge` shields.io rendered as two wide
black/orange rectangles spanning the README width — nothing like the
small bordered pill deer-flow actually ships (a Trendshift-served badge
with a laurel-wreath "1" emblem and two lines of restrained text).

OpenMontage isn't on Trendshift, so a real Trendshift badge isn't
available. Built a custom inline SVG matching the design intent:

- Small (340x68) bordered card with rounded corners
- Laurel-wreath emblem with serif "1" inside on the left
- Two-line text on the right: "GITHUB TRENDING" (small, dimmed gray)
  and "#1 Repository Of The Day" (bold, accent)
- Light + dark variants served via prefers-color-scheme picture/source
  - Light: white bg, #7C3AED purple stroke/text
  - Dark:  #0D1117 bg, #A78BFA lavender stroke, #C4B5FD headline

Files added:
- .github/assets/repo-of-the-day-light.svg
- .github/assets/repo-of-the-day-dark.svg
2026-06-27 17:16:25 -07:00
calesthio
de2323393f docs(readme): add Star History chart + polish Repository of the Day badge
- Add Star History section before License (dark-mode-aware picture/source
  pattern matching calesthio/Crucix). Links to star-history.com.
- Repository of the Day badge restyled to match the deer-flow aesthetic:
  dark labelColor (#0D1117 — GitHub background), gold accent (#F6B543
  dark / #D9892A light), prefers-color-scheme picture variants, 48px
  height for a more pill-like proportion. The current bright-purple
  shields.io block was less distinctive than the surrounding YouTube/X
  badges.

OpenMontage isn't currently listed on Trendshift (deer-flow's badge
provider), so the badge stays shields.io-based; design matches the
intent. If we want a real Trendshift badge later, register the repo
at trendshift.io and swap in the api/badge/repositories/<id> URL.
2026-06-27 17:11:40 -07:00
Calesthio
91ad909bd1 Merge pull request #209 from calesthio/docs/readme-add-alexandria-remove-abyss
docs(readme): swap 'Into the Abyss' for 'The Library at Alexandria'
2026-06-27 14:53:08 -07:00
Calesthio
3065bb91ef Merge pull request #208 from calesthio/chore/version-bumps-and-hf-resync
Version bumps + HyperFrames re-vendor (v0.7.17) + atelier doctrine HF-aware
2026-06-27 14:52:37 -07:00
calesthio
ea8c238c3e docs(readme): swap 'Into the Abyss' for 'The Library at Alexandria'
Adds the new atelier-mode bespoke piece (Library of Alexandria) to the
showcase block, right after THE LAST BANANA. Removes the prior 'Into the
Abyss' anime piece to keep the section focused.

Showcases the doctrine shipped in #203: every scene crafted from scratch
with no shared components — the signature device (the candle + Burning
Counter) appears in only one of five scenes (the climax), per the
scene-distinctness rule in skills/meta/bespoke-composition.md.
2026-06-27 14:33:09 -07:00
calesthio
c4d8975213 docs(atelier): recognize HyperFrames as natively bespoke
Building the in-a-hurry showcase video surfaced a real workflow gap:
bespoke-composition.md was Remotion-flavored throughout. A fresh agent
reading it for a music-driven hero piece would be routed straight to
Remotion atelier — missing that HyperFrames has no cut-schema and is
already atelier by its nature (every HF composition is a hand-authored
index.html with data-* timing and a GSAP timeline you write).

This commit reframes the doctrine to be runtime-aware:

- New "Atelier and the two runtimes" subsection explicitly separates
  Remotion (atelier as escape hatch from cut-schema registry) from
  HyperFrames (always atelier; composition_mode "atelier" is implicit).
  Same principles apply in both cases; the rendering path differs.

- Step 3 (vocabulary) now routes to /hyperframes-animation for HF
  projects — 36+ atomic rules (kinetic-beat-slam, 3d-text-depth-layers,
  motion-blur-streak, ...), 15+ scene blueprints, 16 transition families,
  7 runtime adapters (GSAP / Lottie / Three.js / Anime.js / CSS / WAAPI /
  TypeGPU), and the html-in-canvas-patterns headline capability for 1–3
  cinematic hero beats per video. Also points at /hyperframes-creative,
  /hyperframes-media, /media-use, /hyperframes-cli.

- Step 4 (engine mechanics) adds HF-side gotchas alongside Remotion:
  the data-* contract, mandatory class="clip", paused-timeline + seek
  rule, lint/validate/snapshot verification primitives, stable-id
  selectors over nth-of-type.

- Step 5 (render) split into per-runtime paths:
  * Remotion atelier — auto-stage copy + bespoke contract (unchanged).
  * HyperFrames — npx hyperframes init scaffold, beats workflow,
    lint+validate+snapshot verification, npx hyperframes render.
    Flags the known gap (F13): hyperframes_compose.render still requires
    cuts[] from the templated path; call npx directly until the tool
    grows a bespoke branch parallel to _render_via_atelier.

- Worked precedents section now lists both runtimes — Phantom Reach /
  Compound Snowball / Library of Alexandria for Remotion atelier, plus
  in-a-hurry for HyperFrames (kinetic-beat-slam + 3d-text-depth-layers
  + motion-blur-streak + css-distortion + html-in-canvas + Three.js
  bloom).
2026-06-27 14:28:16 -07:00
calesthio
46d5514a0a chore(deps,skills): bump Remotion 4.0.441→4.0.484; re-vendor HyperFrames skills at v0.7.17
## Remotion bump (mechanical, semver-safe)

remotion-composer: Remotion 4.0.441 → 4.0.484 (43 patch versions, all
within 4.0.x). Includes the seven core packages: remotion + @remotion/cli,
captions, google-fonts, media, player, transitions.

Smoke test: re-rendered the compound-snowball atelier composition through
the unchanged tool path; final_review status=pass, atelier checks clean.

Note: package.json also carries d3-geo@^3.1.1 forward — this line was
already in the working tree from prior unrelated WIP and is not part of
this bump. Removing it would leave package-lock mismatched, so it's
preserved as-is here; clean up separately when its consumer lands.

## HyperFrames skills re-vendor (0.4.2 → 0.7.17)

The runtime invoked by hyperframes_compose (`npx hyperframes`) was
already pulling 0.7.17 on every render, but the vendored skill docs the
agent reads were frozen at 0.4.2-era. This commit closes that gap.

Re-vendored from upstream commit 3351fb1a (tag v0.7.17, 2026-06-27):

  Re-vendored core 4 (restructured upstream):
  - hyperframes        (slim entry; deep content moved to focused skills)
  - hyperframes-cli    (1 → 7 files; covers validate/inspect/snapshot/
                        benchmark/lambda natively, dropping the obsolete
                        OM-local validate patch)
  - hyperframes-registry
  - website-to-video   (renamed upstream from website-to-hyperframes)

  Newly vendored (8 strategic additions in 0.5–0.7):
  - hyperframes-core        composition contract (data-*/tracks/sub-comps)
  - hyperframes-creative    palette, type, narration, beat planning
  - hyperframes-media       TTS, BGM, SFX, transcription, captions, bg-remove
  - hyperframes-animation   all motion knowledge (rules, blueprints,
                            transitions, 7 runtime adapters)
  - media-use               agent Media OS (one `resolve` verb for
                            BGM/SFX/image/icon; project + global cache)
  - motion-graphics         short design-led motion patterns
  - remotion-to-hyperframes migration guidance (directly relevant since
                            OpenMontage runs both runtimes)
  - music-to-video          beat-synced video using `hyperframes beats`

Intentionally NOT vendored (HF-workflow-specific; would compete with
OpenMontage pipeline routing): embedded-captions, faceless-explainer,
general-video, pr-to-video, product-launch-video, slideshow,
talking-head-recut. Re-evaluate per pipeline need.

PROVENANCE.md refreshed with the new vendor point + re-sync instructions.

## GSAP CDN pin

.agents/skills/hyperframes/SKILL.md: gsap@3.14.2 → gsap@3 (auto-latest 3.x
on jsdelivr; avoids future drift without breaking the API surface).

## Doctrine updates routing to new skill structure

- skills/INDEX.md — HyperFrames row expanded to enumerate the 12 vendored
  skills and their roles.
- skills/meta/animation-runtime-selector.md — runtime decision matrix
  updated for the rename (website-to-hyperframes → website-to-video) and
  three new rows added: beat-synced music videos, Remotion→HF porting,
  and the media-use resolve verb. The HyperFrames composition row in the
  animation-library matrix split into four (core/creative/media/animation)
  per the upstream skill structure.
- skills/core/hyperframes.md — Layer-2 routing skill rewritten to point at
  the new focused skills and all website-to-hyperframes references renamed.
2026-06-27 14:00:00 -07:00
Calesthio
9a676d6997 Merge pull request #203 from calesthio/feat/atelier-bespoke-compositions
Atelier (bespoke) composition mode — hand-stitched every time
2026-06-27 12:02:35 -07:00
calesthio
f9f86ac9f8 feat(atelier): forbid hero-component spine; captions/text dedup rule (F12 + F9)
F12 — Hero-component spine is a templating anti-pattern. The first
atelier proof (alexandria-fire) leaned on a single candle as scaffolding
under every scene with different text below — same hero, different
caption — which is exactly the "branded slides" pattern atelier was
supposed to break. The signature device is meant to appear in ONE or
at most two beats (typically the climactic moment), not as the visual
scaffolding of every scene. Each scene must earn its own composition:
a different primary visual subject, a different scale, a different motion
register. Doctrine added as step 1.5 in skills/meta/bespoke-composition.md
("Plan each scene as its own composition") plus a reviewer
scene_distinctness gate enforced at compose stage — the reviewer samples
one representative frame per scene and refuses to pass if two or more
scenes share their primary visual subject.

F9 — Captions/on-screen-text dedup. When a SerifLine reads the script
verbatim AND auto-captions emit the same text, the piece looks amateurish
even when the rest is beautiful. Rule added under engine mechanics: decide
once per piece whether captions add meaning (numbers, names, translations,
attributions) or are accessibility subtitles echoing narration — never
both for the same content. Reviewer gate at compose stage compares active
caption text against on-screen text in the same time window.

Both gates are CRITICAL; the publish-stage check was updated to expect
six (was four) resolved atelier findings.

Self-audit of alexandria-fire under the new rules: 4 of 5 scenes share
the candle as their primary visual subject — would now flag CRITICAL
scene_distinctness and require re-planning. (Re-author the piece in a
follow-up; the doctrine is the deliverable here.)
2026-06-27 11:36:51 -07:00
calesthio
0f10381f2b feat(atelier): repo-root projects/, scaffolder, schemas (F1 + F3 + F5)
Closes the remaining three atelier audit gaps.

F1 — atelier projects live under repo-root projects/<slug>/ (the
established OpenMontage convention), not under remotion-composer/.
_render_via_atelier now auto-stages source files into
remotion-composer/projects/<slug>/ via mtime-skip copy when the entry
isn't already under the composer tree. Originally tried a directory
junction, but webpack walks up from the entry's REAL location to
resolve node_modules — junctions get dereferenced and module resolution
fails. Copy keeps source-of-truth under projects/, is invisible to the
user's project view, and is cheap (typical project is a few small .tsx
files). Output stays wherever output_path says. effective_entry is
returned in tool data for transparency.

F3 — scripts/scaffold_atelier_project.py generates the engine
boilerplate (index.tsx / Root.tsx / Composition.tsx / art-direction.md /
props template / README) ONLY. No creative content emitted — the
Composition.tsx is a deliberately blank black placeholder with prominent
TODOs. This removes the friction that nudged agents back to templated
mode while making it impossible to ship the scaffold unauthored (review
correctly flags black frames / silent audio as 'revise'). Verified
end-to-end: scaffold → render → review fires the right warnings.

F5 — schemas extended to know about atelier:
  - decision_log: 'composition_mode' added to category enum.
  - proposal_packet.production_plan: composition_mode + art_direction.
  - edit_decisions: composition_mode + bespoke{entry, composition_id,
    art_direction, props_path, public_dir, scale, crf, concurrency}.
  - final_review.checks: 'atelier' block (stock_reuse_detected,
    offending_imports[], art_direction_declared, art_direction).
  - final_review.recommended_action: 're_author' added.
  - final_review.transcript_comparison: allow null word_accuracy /
    transcript_matches_script (pre-existing latent bug surfaced here).
Both pass and fail shapes of the atelier render's final_review now
validate against the updated schema.
2026-06-27 11:15:36 -07:00
calesthio
5481226faf feat(atelier): post-render review hook + reviewer enforcement (F6 + F7)
Closes the two biggest gaps from the atelier audit: hero bespoke renders
were skipping every automated quality gate, and the templated→atelier
inversion was advisory rather than enforced.

F6 — _render_via_atelier now runs the full _run_final_review (technical
probe + visual spotcheck + audio spotcheck + duration drift + transcript
comparison) plus two atelier-specific doctrine checks:

  - stock_reuse_check: rglobs the bespoke project tree for imports from
    the stock creative registry (src/components, src/Explainer, etc.).
    Any hit fails the render with status="fail" and names the offending
    file — the doctrine bypass is now mechanically caught.
  - art_direction_check: requires edit_decisions.bespoke.art_direction.
    Missing → warning surfaced in final_review.issues_found; forcing
    function for step 1 of skills/meta/bespoke-composition.md.

Verified end-to-end on the compound-snowball proof render: positive case
status=pass, atelier checks clean; negative case (deliberate stock import
+ missing art_direction) returns status=fail with both findings named.

F7 — skills/meta/reviewer.md gets a "Composition Authoring Mode Review"
section that enforces the inversion at every stage:

  - proposal: composition_mode must be a presented decision with both
    options; hero briefs default to atelier; templated for hero requires
    an explicit sanctioned reason.
  - scene_plan/edit: any stock cut.type in an atelier piece is CRITICAL;
    bespoke.{entry, composition_id, art_direction} required.
  - compose: consumes final_review.checks.atelier from F6; mandates a
    recorded distinctness review (the human taste call the tool can't
    automate — its absence is itself CRITICAL).
  - publish: blocks ship on any unresolved atelier finding.

Engine knowledge stays reusable; creative components don't.
2026-06-27 11:01:00 -07:00
calesthio
578f0f1bb1 feat(compose): add atelier (bespoke) composition mode + doctrine
Introduce a hand-authored, project-local Remotion render path that bypasses
the cut-schema and the stock scene-type registry, for hero/bespoke videos
that must look distinct from one another.

- video_compose: composition_mode="atelier" (or renderer_family="bespoke")
  routes to _render_via_atelier, which renders a project-local entry under
  remotion-composer/projects/<slug>/ with an optional per-project public_dir
  (skips copying the bloated shared public/). No cut-schema, no stock registry.
- skills/meta/bespoke-composition.md: routing skill — art direction
  (visual-style) -> motion principles (Disney 12) -> engine mechanics
  (remotion-best-practices + stock components read only as a mechanics codex)
  -> atelier render. Doctrine: reuse engine knowledge, never creative components.
- AGENT_GUIDE: "Composition Authoring Mode" (templated vs atelier); default
  atelier for hero work; scene-type catalog reframed as a mechanics codex.
- animation-runtime-selector + INDEX: authoring-mode-first pointers.
- base_tool.run_command: decode subprocess output as UTF-8/replace (Windows
  cp1252 crashed the reader thread on Remotion's Unicode progress output).
- .gitignore: remotion-composer/projects/ (throwaway bespoke compositions).
2026-06-27 10:32:07 -07:00
Calesthio
49a1e56825 Merge pull request #136 from vizionik25/feat/apple-silicon-mps-support
feat(gpu): Apple Silicon MPS (Metal) GPU Support
2026-06-26 14:29:55 -07:00
Calesthio
7cda18df13 Merge pull request #188 from 0xDevNinja/chore/gitattributes-line-endings
chore: add .gitattributes to normalize line endings
2026-06-26 11:22:34 -07:00
Calesthio
af778b2340 Merge pull request #162 from mlaniak/claude/friendly-aryabhata-fd5bd4
chore: gitignore downloaded voice models (*.onnx)
2026-06-26 11:12:07 -07:00
Calesthio
05cadb74ee Merge pull request #195 from 0xDevNinja/fix/issue-60-reference-analyst-runtime-default
fix: defer composition runtime choice to Present Both gate in reference-analyst
2026-06-26 11:10:22 -07:00
Calesthio
ff93b20339 Merge pull request #196 from An-idd/fix/provider-model-default-drift
fix(video): runway/higgsfield model defaults diverge from schema → wrong cost & silent model swap
2026-06-26 11:09:25 -07:00
Calesthio
27144c70e6 Merge pull request #197 from 0xDevNinja/chore/issue-61-orphaned-agents-stale-gsap
docs: resolve orphaned skill AGENTS.md scope and stale gsap README (#61)
2026-06-26 11:08:44 -07:00
0xDevNinja
8cb971b233 docs: de-stale gsap/README.md and mark it a non-loadable nav map
The GSAP family README described HyperFrames as a 'future' engine ('if the
parallel HyperFrames engine gets wired in', 'becomes a day-1 skill', 'Future
hyperframes_compose tool — if added'). Every other artifact (AGENT_GUIDE.md,
skills/core/hyperframes.md, skills/INDEX.md) treats HyperFrames as a fully
production composition runtime, and hyperframes_compose is a registered tool.

Update the HyperFrames references to present-tense production reality. Also add
a scope note: this directory has no SKILL.md and is not a loadable skill — it
is a navigation map for the sibling gsap-* skills, which removes the ambiguity
about why it is not loadable via agent_skills[].

Closes #61
2026-06-26 13:18:35 +05:30
0xDevNinja
9631e077a2 docs: scope orphaned skill-level AGENTS.md as supplementary references
Three skill directories ship a long-form upstream AGENTS.md alongside their
loadable SKILL.md:

  .agents/skills/flux-best-practices/AGENTS.md
  .agents/skills/vercel-composition-patterns/AGENTS.md
  .agents/skills/vercel-react-best-practices/AGENTS.md

None were referenced by their parent SKILL.md, skills/INDEX.md, AGENT_GUIDE.md,
or any pipeline manifest, leaving their authority scope undefined relative to
the repository-root AGENTS.md (override / extend / ignore?).

Reference each from its SKILL.md with explicit scope: the AGENTS.md is
supplementary upstream reference material for that skill only, SKILL.md is the
loadable entry point and the authority, and it does not override or extend the
root AGENTS.md / AGENT_GUIDE.md. Preserves the vendored content while removing
the ambiguity.

Refs #61
2026-06-26 13:18:35 +05:30
An-idd
93d96de8f1 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.
2026-06-26 15:30:22 +08:00
0xDevNinja
00604e293d fix: defer composition runtime choice to Present Both gate in reference-analyst
The video-reference-analyst capability audit pre-locked Remotion as the
default composition engine ('Remotion is the default ... Never default to
FFmpeg when Remotion is available'). Because the analyst skill runs first
in any reference-led flow, this silently locked the runtime before the user
was ever offered a choice — violating the 'Present Both Composition Runtimes
(HARD RULE)' in AGENT_GUIDE.md, which forbids silently picking a default and
treats Remotion and HyperFrames as parallel, non-ranked runtimes.

It also omitted HyperFrames from the engine list entirely, so it was never
surfaced as an option in the reference-led path.

Update Step 2 (Capability Audit) to:
- add HyperFrames to the audited runtime list
- remove the 'Remotion is the default / preferred' framing
- defer engine selection to the AGENT_GUIDE 'Present Both' gate
- keep FFmpeg scoped to standalone ops, not composition

Closes #60
2026-06-26 12:53:20 +05:30
Mike Laniak
cf3bb2b8ed fix(setup): add numpy to requirements; gitignore downloaded voice models
tools/video/green_screen_composite.py imports numpy at module level (and
declares "python:numpy" as a dependency), but numpy was missing from
requirements.txt. Because registry.discover() imports every tool module,
a fresh `make setup` followed by the mandatory preflight crashes with
ModuleNotFoundError: No module named 'numpy'. Add numpy>=1.24.

Also gitignore *.onnx/*.onnx.json so Piper TTS voice models fetched at
runtime (e.g. en_US-lessac-medium.onnx, ~60MB) aren't accidentally
committed to the repo root.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:45:50 -05:00
Calesthio
0d917ea2ca Merge pull request #193 from calesthio/codex/add-ci-pipeline
[codex] Add GitHub Actions CI pipeline
2026-06-25 16:56:27 -07:00
calesthio
6419cfcf97 ci: add GitHub Actions validation pipeline 2026-06-25 13:19:12 -07:00
Calesthio
758f6ebd21 Merge pull request #190 from 0xDevNinja/chore/issue-pr-templates
chore: add issue templates and a pull-request template
2026-06-25 12:38:17 -07:00
Calesthio
928311bf58 Merge pull request #191 from harshdadiya-wappnet/fix/skill-warnings-and-references
fix: resolve skill loading warnings and correct video-toolkit naming
2026-06-25 11:58:19 -07:00
Calesthio
82c5cff606 Merge pull request #186 from 0xDevNinja/fix/windows-remotion-props-equals
fix: use --props=<path> equals form for Remotion render on Windows
2026-06-25 11:40:01 -07:00
Harsh Dadiya Wappnet
3656222356 fix: resolve skill loading warnings and correct video-toolkit naming 2026-06-25 19:00:47 +05:30
0xDevNinja
bbb0e929ac chore: add issue templates and a pull-request template
The repo had no .github issue or PR templates, so bug reports arrived
with inconsistent detail and questions landed on the tracker instead of
Discussions.

Add GitHub community templates:
- ISSUE_TEMPLATE/bug_report.yml: structured form (OS, pipeline, runtime,
  repro, expected vs actual, logs)
- ISSUE_TEMPLATE/feature_request.yml: problem / solution / alternatives
- ISSUE_TEMPLATE/config.yml: disables blank issues and routes questions,
  ideas, and show-and-tell to the existing Discussions categories
- PULL_REQUEST_TEMPLATE.md: summary, linked issue, testing, checklist

Additive only; no source changes.

Closes #189
2026-06-25 18:52:25 +05:30
0xDevNinja
4bb9f54084 chore: add .gitattributes to normalize line endings
Without a .gitattributes, line-ending normalization depends on each
contributor's local core.autocrlf. On Windows checkouts this can
materialize text files — and shell scripts like render-demo.sh — with
CRLF, which breaks script shebangs and produces noisy cross-platform
diffs.

Add a root .gitattributes that:
- defaults all text files to LF (* text=auto eol=lf)
- pins shell scripts, Makefile and .env.example to LF explicitly
- keeps .bat/.cmd as CRLF
- marks image/video/audio/font assets as binary so Git never
  normalizes or diffs them

Only the policy file is added; existing files are intentionally left
unrenormalized to keep this change reviewable.

Closes #187
2026-06-25 18:49:45 +05:30
0xDevNinja
c5f6859a83 fix: use --props=<path> equals form for Remotion render
On Windows, passing --props and the JSON path as two separate CLI
arguments causes Remotion to mis-parse the value due to platform quote
escaping, failing with "neither valid JSON nor a file path to a valid
JSON file". Switch to the --props=<path> equals form, which Remotion
recommends for file paths and which works consistently across
platforms.

Fixes #172
2026-06-25 18:23:28 +05:30