Repository

ARIS-Movie-Director

Hand a fuzzy story to your agent, wake up to a cross-model-audited movie 🎬 β€” no forgotten facts, no frame signing off on itself.<br> πŸ€– Agentic by design β€” planning Β· gating Β· cross Β· License MIT Β· Install via pip Β· Maintenance unmaintained

License
MIT
The problem
What ARIS-Movie-Director does about it
A demo hides what was tried and thrown away.
Every attempt / review / decision / failure-mode is written to the research-wiki β€” the reference run ships a 198-node trace you can read.

Specs

  • The problemWhat ARIS-Movie-Director does about it
  • A demo hides what was tried and thrown away.Every attempt / review / decision / failure-mode is written to the research-wiki β€” the reference run ships a 198-node trace you can read.

README

ARIS β€” Auto Research in Sleep

ARIS-Movie-Director

🌐 δΈ­ζ–‡ README Β· English

Hand a fuzzy story to your agent, wake up to a cross-model-audited movie 🎬 β€” no forgotten facts, no frame signing off on itself.<br>
🎞️ Image-based today, video next.<br>
πŸ€– Agentic by design β€” planning Β· gating Β· cross-model review on the agent; rendering on the diffusion model.

πŸ“š Jump to β€” β–Ά Watch the movie Β· ⚑ Quick Start Β· πŸ”„ Workflows Β· πŸ“ Make your own Β· 🧩 Layout Β· πŸ’¬ Community Β· πŸ“– Cite Β· 🀝 Contributing

Join Community Β· Cite Β· CI Β· ARIS Stars Β· arXiv Β· HF Daily #1 Β· PaperWeekly Β· awesome-agent-skills

This is an agentic, long-horizon visual generation task: hand a fuzzy story to an agent and produce a whole
image-based movie (the reference run is a 19-scene / 24-frame story), not a single image. The concrete job is
fuzzy story β†’ authored comic.json β†’ audited panels β†’ single-file viewer.

The hard part is faithfulness over time. Generated visual stories can look coherent while quietly changing
the facts β€” a chart rounds a number, a label mutates, a character's face drifts β€” and the run still ships,
because the same system that drew the frame is the one saying it looks fine. Across a long horizon, two failure
modes dominate:

  • 🧠 Long-range forgetting β€” over many frames, identity, established facts, and earlier decisions drift.
  • πŸ—£οΈ Linear, self-approved streaming β€” each frame is committed by the model that drew it, so mistakes compound unchecked.

πŸ”¬ Method at a glance. Read the figure left-to-right β€” the /movie-pipeline
agent workflow runs the full loop (author a source of truth β†’ bake β†’ cross-model gate): (1)
comic-author turns fuzzy intent into an authored comic.json + locked refs,
(2) comic-director runs the per-panel audited spiral β€” the multi-agent
debate
(Codex narrative β€– Gemini + Codex visual blind-read β†’ deterministic diff), logging every attempt / decision to the
research-wiki β€” (3) the pipeline assembles accepted panels into the
released viewer. The bottom-left failure is the whole rule: a beautiful but wrong literal still fails
(+6.2 expected vs +6.25 observed).

ARIS-Movie-Director β€” method overview

<sub>Figure 1 β€” from story intent to a verified movie, end-to-end (the loop described above). Full caption ↓</sub>

<details><summary><b>Figure 1 β€” stages, gates, and provenance</b> (click to expand)</summary>

(1) Authored source of truth β€” asset library Β· outline Β· storyboard compile into comic.json (content_svg Β· expected_literals Β· identity_ref). (2) The audited spiral (per panel) β€” a content-SVG blueprint is baked by image_gen, then a 3-reviewer cross-model panel_gate (narrative β€– Gemini + Codex visual blind-transcribe β†’ a deterministic token-diff Β· single-vote veto) returns a deterministic verdict: KEEP, or RETRY (≀4/panel) re-baked with the failed attempt's repair note; every attempt/review/decision/failure is logged to the research-wiki. (3) Assembly + release β€” a cast-aware page_assembly_gate (repair drift β†’ re-bake, ≀6/run) ships PNG panels + a single-file HTML viewer. The punchline (bottom-left): a beautiful panel with a wrong number does not pass β€” +6.2 expected vs +6.25 observed fails the token-diff.

This figure was itself produced by the same loop it depicts: a labeled blueprint conditioned Codex's native image-generation tool (driven by Codex GPT-5.5 xhigh β€” dated 2026-06 provenance; the image backend, called gpt-image-2 at the time, is not runtime-attested), then 4 generation rounds were ratified by the method-figure panel β€” Gemini + Codex blind-transcribe + a deterministic content_diff, then a Claude structural sign-off β€” until clean. The exact prompt sequence that baked this image (all 4 rounds + the cross-model critiques) is published verbatim as a reference: skills/method-figure/examples/method_figure/PROMPTS.md.

</details>

ARIS-Movie-Director treats every frame as an auditable artifact: author a deterministic comic.json first
(lock the expected_literals + identity refs before any pixels), let a generative model bake the look, then
require independent cross-model blind-transcription + a deterministic token-diff before a panel is kept.
Looks right β‰  passes β€” a beautiful frame with a wrong literal is rejected. It answers the two failure modes
with two ideas from the ARIS series:

  • πŸ§ β†’ a research-wiki β€” persistent, inspectable memory (locked refs Β· expected_literals Β· every decision & failure as a node) that anchors late frames to early truth.
  • πŸ—£οΈβ†’ multi-agent debate β€” independent cross-model reviewers blind-read every frame and a deterministic diff decides KEEP / RETRY, so no frame signs off on itself. Every attempt / decision lands in that wiki trace.

This first release is image-based β€” the movie is told in baked still frames you flip through. Video-based generation is what comes next; this is just the beginning.

β–Ά Watch the image-based movie in your browser β€” flip through all 19 scenes of the cross-model-audited reference run.

Watch the movie β€” cover

<table><tr><td width="33%"><a href="https://wanshuiyin.github.io/ARIS-Movie-Director/comic/">

audit page

</a></td><td width="33%"><a href="https://wanshuiyin.github.io/ARIS-Movie-Director/comic/">

multi-panel page

</a></td><td width="33%"><a href="https://wanshuiyin.github.io/ARIS-Movie-Director/comic/">

the fix beat

</a></td></tr></table>

<sub>A few frames from the reference movie β€” including the story's own integrity beat: a run that reported +6.2 improvement but really moved +1.4 (that's the plot, distinct from the figure's bake-time +6.2/+6.25 token-diff). Watch all 19 scenes β†’</sub>

<details><summary><b>⚑ What the audit gate actually catches</b> β€” the problem β†’ mechanism table</summary>

The problem What ARIS-Movie-Director does about it
A panel can look right while changing a number, label, or code token. comic.json locks the expected_literals; independent visual reviewers blind-transcribe what's actually in the pixels; an exact token-diff rejects any wrong or missing literal.
The model that baked an image can wave its own output through. The bake never self-attests β€” independent visual models (a different family from the generator) read it blind, and a deterministic diff, not a model's opinion, decides KEEP / RETRY.
A frame can be baked with nothing to check it against. Phase 1 authors content_svg Β· identity_ref Β· ART_BIBLE Β· expected_literals before pixels; a baked figure-panel with no gateable literals fails closed.
Character & style drift accumulate across a long sequence. Locked identity refs + asset review (准×3) + a style bible + a cast-aware assembly gate check consistency while allowing intended scene/cast variation (absence β‰  drift).
Retry loops go opaque or endless. Per-panel attempts and assembly repairs are bounded; each failure carries a repair note; a non-convergent panel is flagged for a human, never silently shipped.
A demo hides what was tried and thrown away. Every attempt / review / decision / failure-mode is written to the research-wiki β€” the reference run ships a 198-node trace you can read.

</details>


<a id="quick-start"></a>

⚑ Quick Start

# 1 Β· get the repo + Python deps  (everything but jsonschema is stdlib)
git clone https://github.com/wanshuiyin/ARIS-Movie-Director.git && cd ARIS-Movie-Director
python3 -m pip install -r requirements.txt

# 2 Β· external tools for the bake/review stages β€” install + authenticate, then verify:
#     codex CLI  Β·  a google-family reviewer (legacy gemini CLI, or Antigravity via the shipped shim β€” see note)  Β·  headless Chrome / Chromium
python3 cli/preflight.py

There is no bundled installer β€” the skills/ are followed by your coding agent pointed at this repo; the deterministic CLIs run in-repo.

Google-family reviewer (2026-07): the legacy gemini CLI is deprecated upstream (it now dies with
IneligibleTierError β€” Gemini Code Assist for individuals is retired; Google's migration target is
Antigravity). Install Antigravity (agy) + log in, then pass
--gemini-cmd "python3 cli/gemini_agy_shim.py" to run_comic.py / run_spiral.py β€” the shipped shim
translates the old gemini -p "@file …" reviewer interface to agy and pins a Gemini model
(Antigravity also serves Claude/GPT-OSS; the second-reviewer slot must stay google-family or the
cross-model quorum's provenance is corrupted). If your legacy gemini CLI still works, the default is
unchanged.

Run the two workflows β€” in a coding agent that has these skills (/… is a slash-command agent workflow, not a shell binary):

> /movie-pipeline "a short film about an autonomous research run"   # Workflow 1 β€” fuzzy idea β†’ audited movie + viewer (pauses at intent + outline)
> /method-figure  path/to/method_figure_brief.json                 # Workflow 2 β€” a brief β†’ audited Figure-1 (render + verify β†’ Claude sign-off)

See it first β€” zero setup, no API: β–Ά open the hosted movie at https://wanshuiyin.github.io/ARIS-Movie-Director/comic/ (all 19 scenes / 24 frames). To rebuild it locally, see Workflow 1 β†’ See the reference movie below.

<sub>Full map β€” fuzzy story β†’ /movie-pipeline β†’ comic.json + audited panels + outputs/index.html Β· method_figure_brief.json β†’ /method-figure β†’ figure.png + blueprint + trace</sub>


<a id="workflows"></a>

πŸ”„ Workflows

Two cross-model-audited workflows. Each is one slash-command agent workflow (the ARIS /research-pipeline
paradigm β€” an agent runs it, pausing at the human gates), with a deterministic CLI core you can also run
standalone (the part CI tests).

🎬 Workflow 1 Β· Movie pipeline β€” /movie-pipeline (fuzzy idea β†’ audited movie)

Hand your agent a fuzzy story, approve two story gates, wake up to a baked, cross-model-audited movie + a clickable viewer:

> /movie-pipeline "a short film about an autonomous research run"

It chains comic-author (Phase 1 β€” author the source of truth) β†’ the zero-credit
p0_proof gate β†’ comic-director (Phase 2/3 β€” the audited spiral β†’ viewer); the
orchestrator is movie-pipeline. It's an agent workflow, not a shell binary β€”
it needs a coding-agent runtime and pauses at intent + outline for your approval. (A step that doesn't fire is
safe β€” each layer consumes the prior LOCKED node, so a skipped step fails closed at the next gate, never shipping a
wrong frame.)

  • 🧭 Intent β€” fuzzy idea β†’ intent_spec Β· stop for your approval
  • 🎨 Style lock β€” the ART_BIBLE.md + locked style_anchors (warm-lab / dark-cyber / starfield)
  • 🧱 Outline β€” 3-lens debate β†’ synthesis β†’ outline_spec Β· stop for your approval
  • 🎞️ Storyboard β€” pages Β· panels Β· the MOTIF STATE TABLE Β· consolidated asset_requests
  • πŸ§‘β€πŸŽ¨ Assets β€” a single-source library, reviewed to locked (准×3 same-round unanimity)
  • πŸ“ Blueprints β€” a deterministic content_svg per panel (no baked bubbles)
  • 🧾 Prompts β€” exact bake prompts + verbatim expected_literals (搬运ε·₯εŽŸε‰‡)
  • βœ… Compile β€” schema-valid comic.json; the zero-credit p0_proof gate runs BEFORE any image credit
  • πŸ”₯ Spiral bake β€” render β†’ agent mcp__codex__codex sidecar bake (Codex's native image tool) β†’ 3-reviewer panel_gate β†’ keep / retry-same-panel β†’ assembly_gate (re-bakes only NAMED drifting panels on cross-page drift) β†’ viewer

πŸ“ Flow β€” the skill chain (trace it top-to-bottom):

/movie-pipeline "fuzzy idea"            one slash-command Β· agent-run, NOT a shell binary
   β”‚
   β–Ό   comic-author drives these Phase-1 skills IN ORDER (they are not separate slash-commands):
   comic-intent-parser
     β†’ ⟨HUMAN APPROVE β€” intent⟩
     β†’ comic-style-bible-lock
     β†’ comic-outline-creator
     β†’ ⟨HUMAN APPROVE β€” outline⟩
     β†’ comic-storyboard-creator
     β†’ comic-asset-ref-generator β†’ comic-asset-review-loop          (准×3 unanimity β†’ assets LOCKED)
     β†’ comic-blueprint-author β†’ comic-panel-prompt-builder β†’ comic-json-compiler
   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Phase 1 Β· comic-author β€” author the source of truth ─────────────────
   β”‚
   β”‚   β†’ comic.json + locked assets + the author wiki trace
   β–Ό
   comic-cross-layer-gate --gate p0_proof     β”œβ”€ P0 Β· ZERO-CREDIT proof β€” must pass before any image credit ──
   β”‚
   β–Ό   comic-director β€” the audited spiral     (run_comic.py  |  packages/core/spiral_engine.js)
   per panel:  content_svg β†’ agent mcp__codex__codex sidecar bake β†’ panel_gate
                  reviewers: Codex narrative β€– Gemini visual β€– Codex visual
                  β†’ blind transcriptions β†’ deterministic token-diff vs expected_literals
               verdict ─ KEEP β†’ page pool
                       β”œ RETRY ≀4   (re-bake the SAME panel + repair note)
                       β”” assembly_gate repair ≀6 β€” re-bake ONLY the NAMED drifting panels when drift is localized (seed-anchored; never wipes prior good panels)
   page assembly_gate β†’ project accepted panels to comic.json β†’ build_comic.py β†’ outputs/index.html
   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Phase 2/3 Β· comic-director β€” audited spiral + viewer ─────────────────

   πŸ“š research-wiki β€” reads the locked source nodes before each layer; writes every attempt / review /
                      decision / failure after each gate & bake (the inspectable audit trace).
   πŸ”„ human-in-loop β€” intent + outline are HARD stops; a failed p0 / panel / assembly gate stops or
                      escalates; a non-convergent panel is flagged for you, never silently shipped.

The panel_gate (Phase 2/3, per panel): the bake is read by 3 independent reviewers β€” a narrative
reviewer (does it land the beat? β€” currently the codex CLI, recorded honestly as family openai; a
configurable --narrative-reviewer is planned, not yet implemented) β€– Gemini visual β€– Codex visual β€” who
blind-transcribe the pixels; a deterministic token-diff of observed_literals vs the authored
expected_literals decides KEEP / RETRY; content_corruption is a single-vote veto, both visual reviewers must
score, and no model self-acquits. Every attempt / reviewΓ—3 / decision / failure is written to the research-wiki.
There is no live Claude CLI reviewer in this panel β€” Claude's role is the workflow-layer structural sign-off;
cross-family acquittal vs the Claude-authored prompts comes from Gemini + the deterministic fuse.

Phase 2/3 standalone (once comic.json exists). Only the zero-credit --dry-run below is genuinely
agent-free β€” that's the CI-tested slice:

python3 skills/comic-director/scripts/run_comic.py --project examples/<name> --page <PAGE> --panels S01,S02 --dry-run    # zero credit, NO agent: prints bake prompts (the CI-tested slice)
python3 skills/comic-director/scripts/run_comic.py --project examples/<name> --page <PAGE> --panels S01,S02 --finalize   # REAL bake β€” REQUIRES the agent sidecar SOP (see below)

run_comic.py is a subprocess port of packages/core/spiral_engine.js's movie
branch; it starts from an existing comic.json β€” it cannot start from a fuzzy idea. The deterministic CLI
core (validation, blueprint render, the token-diff gates) is what CI exercises, but the --finalize bake is
NOT agent-free
: each panel bake is fulfilled by the agent-sidecar SOP β€” the
comic-director skill agent watches for the core's *.bakereq.json, calls
mcp__codex__codex (with config: {include_image_gen_tool: true, model_reasoning_effort: xhigh}) to fire the
native image tool, and writes back *.bakestatus.json. So a real movie bake needs a coding-agent runtime; only
--dry-run runs standalone. Model honesty: the bake payload pins model: gpt-5.5 + effort xhigh as a
single compatibility default (run_comic.get_bake_plan() β€” the exact plan the P0 certificate digests; a
config-driven override is planned, not yet implemented), while the codex CLI reviewers pin no model β€” they
follow your local codex config, at effort xhigh (--review-effort). Throttling: a
rate-limited bake stops cleanly with fresh_run_required β€” after cooldown launch a fresh run for the remaining
panels, do not resume cached state. Caps: ≀4 attempts/panel Β· ≀6 rollbacks/run Β· no concurrent bakes
(docs/spiral-runtime.md).

Authoring template: copy the Phase-1 author-node shapes from examples/comic_min_author/
when adding a new project. The flow diagram above is the canonical skill chain β€” the two human gates and the
fail-closed gates are shown there; prereqs (codex + gemini + headless Chrome) are in Quick Start.

▢️ See the reference movie β€” what Workflow 1 produces (zero setup, no API)

python3 cli/validate_wiki.py examples/comic_m3_audit             # verify the shipped trace β†’ PASS (198 nodes, 26 edges)
python3 packages/viewer/build_comic.py examples/comic_m3_audit  # (re)build the single-file viewer from comic.json + panels
open  examples/comic_m3_audit/outputs/index.html

…or just open the hosted one: https://wanshuiyin.github.io/ARIS-Movie-Director/comic/ β€” all 19 scenes / 24 frames of the cross-model-audited reference run.

πŸ–ΌοΈ Workflow 2 Β· Method figure β€” /method-figure (a brief β†’ Figure-1)

One slash-command, /method-figure β€” give it a method_figure_brief.json
(the same brief paper-plan emits after its claims_matrix) and it runs the whole audited spiral to a signed-off
figure (Step-0 compile β†’ render condition β†’ sidecar bake via Codex's native image-generation tool β†’ Gemini + Codex blind panel + content_diff β†’
retry until clean β†’ Claude structural sign-off):

> /method-figure path/to/method_figure_brief.json

The deterministic core β€” Step-0 compile, blueprint validation, the condition render, and the content-diff
gate β€” is driven by one command, run_spiral.py. Its zero-credit slices (--p0-only / --dry-run) run with
no agent runtime
; a real bake β€” Codex's native image-generation tool (image backend not runtime-attested) β€” REQUIRES the agent sidecar SOP (the
method-figure skill agent services the core's *.bakereq.json by calling
mcp__codex__codex with config: {include_image_gen_tool: true, model_reasoning_effort: xhigh}):

# OUR example brief bakes ARIS's own Figure 1 β€” swap in your own method_figure_brief.json
python3 skills/method-figure/scripts/run_spiral.py \
    skills/method-figure/examples/method_figure/method_figure_brief.json \
    --out-dir figures/method_figure/demo
#  β†’ figures/method_figure/demo/figure.png   (the PANEL-CLEAN candidate, awaiting your structural sign-off)
#     (+ blueprint.json + traceability.json + trace.jsonl of every round)
#  the REAL bake above needs the agent sidecar (mcp__codex__codex servicing .bakereq.json) β€” NOT agent-free.
#  first run? add --p0-only β€” that slice IS agent-free (zero image credits: validate + compile + render + lint).
#  NOTE: --dry-run (also agent-free) still writes these files.

<details><summary>πŸ“ flow β€” /method-figure (brief β†’ audited render β†’ sign-off)</summary>

(upstream β€” only if you have a paper; NOT part of /method-figure):
   paper_to_brief.md  β†’  method_figure_brief.json      agent-authored; claims / numbers copied VERBATIM
        β”‚
        β–Ό
/method-figure  <method_figure_brief.json | blueprint.json>        the skill = pure render + verify
   run_spiral.py β€” the deterministic core (starts from a brief):
     compile_brief.py (Step-0) β†’ blueprint.json + traceability.json     every node traces to a brief field β€” else FAIL-CLOSED
       β†’ validate_blueprint.py β†’ render_condition.py                    labeled condition SVG β†’ PNG
       β†’ agent mcp__codex__codex (workspace-write, config{xhigh}) β†’ native image-gen bake    fail-closed verifier, not a sandbox setting
       β†’ Gemini blind-transcribe β€– Codex blind-transcribe β†’ content_diff.py     deterministic vetoes
       β†’ RETRY ≀4 (re-assert the locked labels) β†’ Claude STRUCTURAL sign-off
   β†’ figure.png   (+ blueprint.json + traceability.json + trace.jsonl of every round)
   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ method-figure Β· audited render / verify spiral ─────────────────

</details>

Step-0 is deterministic inside the skill β€” you never hand-write a blueprint or place coordinates; the identity
sheet resolves from the brief's identity_refs[].path (no separate --identity); every node is
traceability-checked back to a brief field (un-traceable β†’ fail-closed). No model self-acquits β€” the bake is
ratified by Gemini + Codex blind reads + a deterministic content_diff, then a separate Claude structural
sign-off
. Needs the codex + gemini CLIs + headless Chrome (python3 cli/preflight.py).

Only have a paper, no brief yet? Author the brief FIRST β€” point your coding agent (e.g. the
ARIS main project) at your paper via
paper_to_brief.md (claims/numbers verbatim) β€” then
/method-figure it. Power-user: already have a hand-tuned blueprint? run_spiral.py blueprint.json --identity sheet.png --out-dir … --from-blueprint runs the legacy path. The worked 4-round convergence (the
exact prompts) is in PROMPTS.md.

πŸ›‘οΈ Why the two gates differ (both correct, by design)

The movie panel_gate is a 3-reviewer panel (narrative β€” currently the codex CLI β€– Gemini visual β€– Codex visual) β€” a story
panel must land its beat AND be visually on-model. The method-figure panel is Gemini + Codex
blind-transcribe + the deterministic content_diff
, with Claude the post-pass structural sign-off β€” a
figure has no "beat", so the bar is exact labels + clean layout, not narrative. Both obey the one rule:

The gate is the point: a beautiful panel/figure with a wrong number does not pass. Faithfulness is a
token-diff over reviewers who are never shown the expected values.

<a id="positioning"></a>

🧭 Positioning β€” ARIS lineage; an audit layer, not a generation/orchestration claim

ARIS-Movie-Director is the multimodal vertical of the ARIS series: ARIS taught a research agent to work while you sleep, and its research-wiki + multi-agent-debate ideas are exactly what make a generated story auditable β€” the same loop (author a source of truth β†’ let a model bake the look β†’ ratify with a cross-model panel), now producing character-consistent visual stories instead of papers.

The framework knows nothing about any particular story β€” a project plugs in via examples/<name>/movie.project.json + a comic.json IR. The reference example builds a 19-scene / 24-frame pixel-art movie about an autonomous research run, and ships its real, inspectable generation trace as proof the multi-agent loop actually ran.

Related work — where we fit. The field already generates and orchestrates visual stories well, and we build on that, not against it: JoyAI-Echo (JD) is strong at long-form text→video with synced audio and memory-based character consistency; FireRed-OpenStoryline (Xiaohongshu) is a strong conversational video-editing agent — NL planning, tool orchestration, human-in-the-loop, reusable style skills; NEWTON shows planner-plus-verifier loops for physically-grounded video. ARIS-Movie-Director is complementary — it doesn't claim better generation or broader orchestration; it adds the audit layer around a generated visual story: blind cross-model reads → deterministic literal-diffs → bounded retry → an inspectable trace.


<a id="layout"></a>

🧩 Layout

  • packages/ β€” the framework runtime (core spiral, gates, conditioning, viewer)
  • protocols/ β€” the cross-model review / governance contracts (framework-owned)
  • schemas/ β€” versioned IR + wiki schemas (comic.schema.json, node_schema.json, edge_schema.json)
  • cli/ β€” validate_wiki.py (the stdlib release gate for a project's wiki)
  • docs/ β€” comic-json.md (the authored-input spec), spiral-runtime.md (the live runtime doc), architecture.md (historical pre-rewire design), GENERATION_RETRO.md
  • examples/comic_m3_audit/ β€” the reference movie: comic.json IR, gen/ blueprint scripts,
    panels/ baked art, wiki/ the 198-node generation trace (outputs/index.html β€” the viewer β€” is
    built on demand by build_comic.py, not shipped in the repo)

<a id="community"></a>

πŸ’¬ Community

New workflows, gates, and example projects welcome. ARIS-Movie-Director is part of the ARIS series β€” PRs that add an audited workflow, a gate with teeth, an example project, or a domain adaptation are welcome (start at CONTRIBUTING.md).

Join the WeChat group (shared with the ARIS main project) for discussion on Claude Code + AI-driven multimodal generation:

WeChat Group QR Code

<a id="citation"></a>

πŸ“– Citation

ARIS-Movie-Director is the multimodal vertical of the ARIS series. If you use it in your research, please cite the ARIS paper:

@article{yang2026aris,
  title={ARIS: Autonomous Research via Adversarial Multi-Agent Collaboration},
  author={Yang, Ruofeng and Li, Yongcan and Li, Shuai},
  journal={arXiv preprint arXiv:2605.03042},
  year={2026}
}

πŸ“„ License

MIT β€” see LICENSE.

The example artwork is AI-generated β€” this is a disclosure, not a second license; reuse should still follow your image-model provider's terms.