Files

1 line
1.5 MiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "chrischen667788/wind-comic", "files": {"README.md": {"b669de64f871f5a96f50d4c7afca341662e13683": {"t": 1785747256.2746956, "n": 46139, "h": "48b1de7d4d4bd493", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.264</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3507%2F3507-2ea44f\" alt=\"3507 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3507 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3507/3507 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "ef473fcd7e2cb4b51438005d4d1361e904a7cd69": {"t": 1785771873.6010187, "n": 46139, "h": "7fa3d2858fe5c95d", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.263</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3507%2F3507-2ea44f\" alt=\"3507 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3507 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3507/3507 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "8ea8365e83fcf0501cf2878711e04505a4c25a46": {"t": 1785771875.2242277, "n": 46139, "h": "4402de6cdf6b0d79", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.262</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3506%2F3506-2ea44f\" alt=\"3506 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3506 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3506/3506 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "426e1cd1bbbbc7f4e58a8eb0ce1d9bccf337fa93": {"t": 1785771876.6435256, "n": 46139, "h": "9b897966f3c913a7", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.261</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3502%2F3502-2ea44f\" alt=\"3502 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3502 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3502/3502 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "89de19445ab984c0f8df44d4dc266bda187bfd14": {"t": 1785771879.235628, "n": 46139, "h": "e4f2b8a671f38e1f", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.260</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3499%2F3499-2ea44f\" alt=\"3499 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3499 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3499/3499 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "b9805bcee59bf7fc72bc952fa1e762923d32ea76": {"t": 1785771881.8412292, "n": 46139, "h": "7eb4ac64c01172d2", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.259</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3493%2F3493-2ea44f\" alt=\"3493 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3493 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3493/3493 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "65118f5b1bb4d55474462a88fcd6f22620db9c14": {"t": 1785771883.3461301, "n": 46139, "h": "095181c301146f31", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.258</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3482%2F3482-2ea44f\" alt=\"3482 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3482 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3482/3482 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "4b993880f91fc2d4af0efc79c5b6576678e466d0": {"t": 1785771885.2378693, "n": 46139, "h": "b353e4ecba40f68e", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.257</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3474%2F3474-2ea44f\" alt=\"3474 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3474 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3474/3474 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "0f427f9159b169221b018dba18514dba7a09ef90": {"t": 1785771887.8409915, "n": 46139, "h": "4176d9a28af9235c", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.256</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3472%2F3472-2ea44f\" alt=\"3472 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3472 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3472/3472 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "6ec6058c9bb2238a9b4186cd5d98f66cf7e71a4d": {"t": 1785771890.470626, "n": 46139, "h": "2d5307a07eef1af9", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.255</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3469%2F3469-2ea44f\" alt=\"3469 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3469 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3469/3469 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "4174828664d4a75340c5de11c24ead1f5ef4858e": {"t": 1785771892.0715783, "n": 46139, "h": "2e1ae3f6ee42bd72", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.254</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3467%2F3467-2ea44f\" alt=\"3467 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3467 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3467/3467 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "c05c4bae204585005328fe735b7cece1e694b570": {"t": 1785771894.3988605, "n": 46139, "h": "b3c4da289a033ab4", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.253</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3459%2F3459-2ea44f\" alt=\"3459 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3459 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3459/3459 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "292c9712c8e3400561ab2d6e2c7f2226a8714236": {"t": 1785771896.0566533, "n": 46139, "h": "96684be24d444797", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.252</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3451%2F3451-2ea44f\" alt=\"3451 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3451 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3451/3451 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "f42042be1bcaacba816d135f0dfe3df40fa5370d": {"t": 1785771897.4423456, "n": 46139, "h": "3ad10709f2882fd6", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.251</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3443%2F3443-2ea44f\" alt=\"3443 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3443 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3443/3443 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "0a33b35ca605c33aad647da2a5b1b99c0de386d5": {"t": 1785771899.0485122, "n": 46139, "h": "6b343f7e4dea2602", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.250</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3432%2F3432-2ea44f\" alt=\"3432 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3432 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3432/3432 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "83c3282001a6a61b9ef1dc301fdc42ebee7bd01f": {"t": 1785771902.599187, "n": 46139, "h": "a5a10a2669a6ef1a", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.249</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3425%2F3425-2ea44f\" alt=\"3425 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3425 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3425/3425 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "eb99c04f1081fda96b64329d25471da33ee08118": {"t": 1785771904.8131428, "n": 46139, "h": "d0f788f5a184c9c6", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.248</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3419%2F3419-2ea44f\" alt=\"3419 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3419 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3419/3419 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "8cdc92057eedbd9ee28234056bc124993685a5aa": {"t": 1785771906.2534037, "n": 46139, "h": "bcb21a484382d096", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.247</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3419%2F3419-2ea44f\" alt=\"3419 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3419 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3419/3419 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "c6fc9896e9fa2a89c71400bba9d1e795bad1968b": {"t": 1785771909.0044436, "n": 46139, "h": "f26d11c0513ab873", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.247</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3403%2F3403-2ea44f\" alt=\"3403 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3403 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3403/3403 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.247–v12.247 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "1d9ee352a6dee505a7cb73b7767c8b6c75beffa8": {"t": 1785771914.6304026, "n": 46139, "h": "41cb62b715040455", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.246</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3387%2F3387-2ea44f\" alt=\"3387 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3387 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3387/3387 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.246–v12.246 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "eb9a68bb9914362f0077446494c5e824f5cb2a7a": {"t": 1785771920.293174, "n": 46139, "h": "7fd1c21fe0bc7bb2", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.245</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3369%2F3369-2ea44f\" alt=\"3369 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3369 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-24(Artificial Analysis 盲投竞技场):**格局易主 —— 谷歌 Gemini Omni Flash 登顶双榜**。它把 text/image/audio/video 统一进一个多模态架构(此前 Gemini 各模态分开再交给专用模型),并支持**对话式视频编辑**(自然语言迭代改片、保留不动的部分)。**带音频文生视频榜:Gemini Omni Flash 榜首(Elo 1245)** → Dreamina Seedance 2.0 720p(1227)→ Wan2.7-260612(1164)→ HappyHorse-1.1(1152)→ HappyHorse-1.0(1131);**图生视频带音频:Gemini Omni Flash(1200)** → Seedance 2.0 720p(1198)→ Grok Imagine 1.5(1118)→ HappyHorse-1.1(1110)→ Wan2.7(1099)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨的企业安全牌(4K);**Kling 3.0** 性价比冠军(~$0.50/clip,短剧首选,多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。**⭐ 我方 BYO 架构已可直接接住这波**:v12.238 起 `GEMINI_API_KEY` 一填即启用 Gemini 图像(Nano Banana)provider —— 竞品登顶反而成了本管线可调度的引擎,「引擎越强我们越强」。\n> **v12.214→244 双线推进**。**产品层**:GPT Image / Nano Banana(Gemini)接入插件式图像 provider 链(issue #11,社区 @flobo3 提议,`OPENAI_IMAGE_ENABLED` / `GEMINI_API_KEY` 门控、原生 i2i 接角色一致性契约);**多集连续生成补上「剧情记忆」**(第 N 集 Writer 注入前几集前情提要 + 承接纪律,对标红果/阅文的 60~100 集连续,此前各集独立成篇)。**平台/工程层**:六轮独立对抗复检把安全洞从 CRITICAL 到 LOW 全清(SSRF 逐跳重验重定向 + IPv6 全隧道变体 / serve-file 签名能力 URL / WebSocket 鉴权 / 预算护栏),并把反复踩的「改了守卫却没跟到消费方」这个病**固化成 CI 入库门禁**(`npm run gate:consumer`,零容忍,上线即抓到 2 个人肉复检漏掉的真 SSRF)。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Gemini Omni Flash | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️(单段生成,多镜叙事非强项) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ 多模态统一 | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ 4 模态原生一体 | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌(它自己就是模型) | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ✅ 对话式迭代编辑(招牌能力) | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ⚠️(对话式改片,非结构化卡点/情绪剪辑) | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ⚠️ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ⚠️ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ✅ 原生 | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌(是模型不是 app) | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3369/3369 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.245–v12.245 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "435ecf30d0f4f2c65e07803fe49dcd414e7688ba": {"t": 1785771924.2347586, "n": 45735, "h": "9918e50a75bcd4c8", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.244</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3369%2F3369-2ea44f\" alt=\"3369 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3369 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3369/3369 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.244–v12.244 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "6d190c530d4c2a80788e70edbec1f9121e07268e": {"t": 1785771928.1720068, "n": 45735, "h": "50ce2ff97670c98a", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.243</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3359%2F3359-2ea44f\" alt=\"3359 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3359 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3359/3359 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.243–v12.243 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "ec741c83fd1d6bdd6f6f763c2b46c2cc1e480e2a": {"t": 1785771930.4698727, "n": 45735, "h": "f2e100d28bdf5870", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.242</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3354%2F3354-2ea44f\" alt=\"3354 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3354 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3354/3354 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.242–v12.242 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "e027b2279bbc2ac8c102f444121cf43dd8494821": {"t": 1785771932.0399399, "n": 45735, "h": "42e08e08e3eb6e18", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.241</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3336%2F3336-2ea44f\" alt=\"3336 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3336 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3336/3336 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.241–v12.241 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "ebf45d2d454ea342fecb025c1929617eb0f08c04": {"t": 1785771934.4141524, "n": 45735, "h": "28ba2a161a482479", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.240</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3332%2F3332-2ea44f\" alt=\"3332 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3332 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3332/3332 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.240–v12.240 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "a2b4ff7cc5af9a05df488a8478a095a2d1fe43d5": {"t": 1785771937.1061738, "n": 45735, "h": "c21b7bdaa51ed2f8", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.239</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3313%2F3313-2ea44f\" alt=\"3313 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3313 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3313/3313 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n### Community contributors\n\nFeatures that exist because someone outside the team took the time to file a good report:\n\n- **[@flobo3](https://github.com/flobo3)** — [#11](https://github.com/ChrisChen667788/wind-comic/issues/11): proposed **GPT Image** (`gpt-image-1`) and **Nano Banana** (Gemini Image) as first-class image providers, including the endpoints, the env-var naming, the \"reuse the already-configured `OPENAI_API_KEY` to lower the barrier\" idea, and the observation that Nano Banana's native i2i fits the existing character-consistency contract. Shipped in v12.239–v12.239 essentially as designed.\n- **[@MikhailNikolaev44](https://github.com/MikhailNikolaev44)** — [#2](https://github.com/ChrisChen667788/wind-comic/issues/2): reported that selected characters were being ignored on shot regeneration, which uncovered **three** separate bugs in the reference-image path (v12.132–v12.134), plus the script-language selector request.\n- **[@JSap0914](https://github.com/JSap0914)** — [#1](https://github.com/ChrisChen667788/wind-comic/pull/1): fixed broken README links.\n\nFound something? Issues and PRs are genuinely read — several of the pipeline's sharpest fixes started as an outside bug report.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "790314caa0c09ccf942b778cfa0f8ac596debbe5": {"t": 1785771938.51496, "n": 44525, "h": "862c5cc22eba80ab", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.238</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3289%2F3289-2ea44f\" alt=\"3289 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3289 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3289/3289 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "839c6018448c2abcdbe3610ca2f6032ced7d6ee8": {"t": 1785771940.4248984, "n": 44525, "h": "fae29d1607f78a5f", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.237</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3276%2F3276-2ea44f\" alt=\"3276 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3276 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3276/3276 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}, "25ed349b821023046f1a8788aa558ba5c83373e7": {"t": 1785771944.2128203, "n": 44525, "h": "6abe2799bafdbd23", "c": "<p align=\"center\">\n <img src=\"assets/banner.png\" alt=\"Wind Comic — One line of text. One finished short drama.\" width=\"100%\" />\n</p>\n\n<h1 align=\"center\">🌬️ Wind Comic <sub><sup>v12.236</sup></sub></h1>\n\n<p align=\"center\">\n <b>One sentence in. A finished short-form drama out — script, cast, storyboards, voiceover, timeline, mp4.</b><br/>\n Multi-agent AI studio · reusable characters · novel→season splitting · director's control room · real-time collab · bring-your-own LLM.\n</p>\n<p align=\"center\">\n <b>一句话进,整片短剧出 —— 剧本 · 角色 · 分镜 · 配音 · 时间线 · mp4 一条龙。</b><br/>\n 多 Agent AI 创作工作室 · 可复用角色 · 长篇小说→自动分集 · 导演级控片台 · 实时协作 · 自带 LLM。\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ChrisChen667788/wind-comic/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\" /></a>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\"><img src=\"https://img.shields.io/github/stars/ChrisChen667788/wind-comic?style=social\" alt=\"GitHub stars\" /></a>\n <img src=\"https://img.shields.io/badge/Tests-3262%2F3262-2ea44f\" alt=\"3262 tests passing\" />\n <img src=\"https://img.shields.io/badge/Node-20%2B-339933?logo=node.js&logoColor=white\" alt=\"Node 20+\" />\n <img src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 16\" />\n</p>\n\n<p align=\"center\">\n <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a> · <a href=\"docs/MARKETING-en.md\">🔥 Pitch</a> · <a href=\"docs/llm-providers.md\">🔌 BYO LLM</a>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\">\n <img src=\"assets/promo/wind-comic-promo.gif\" alt=\"Wind Comic — 39-second promo (click to watch with voiceover &amp; sound)\" width=\"100%\" />\n </a>\n</p>\n<p align=\"center\">\n ▶ <a href=\"https://github.com/ChrisChen667788/wind-comic/raw/main/assets/promo/wind-comic-promo-en.mp4\"><b>Watch the full 39-second promo — with voiceover &amp; sound</b></a><br/>\n <sub>Real cinematic footage woven with motion-graphics · 8 distinct art styles · English narration · scored by the platform's own MiniMax music engine.</sub>\n</p>\n\n---\n\n## ✨ Why Wind Comic?\n\nMost \"AI video\" tools give you a 5-second clip from a one-line prompt. **Wind Comic gives you a finished short-form drama** — script, character bible, multi-shot storyboards, voice-acted lines, BGM, mouth-synced characters (indicative 2D lip bar out of the box; photorealistic face-level lip-sync via BYO wav2lip/SadTalker/MuseTalk or Kling), and a final mp4 — from the same single line.\n\nIt works because it doesn't try to be one giant model. It's an **honest multi-agent pipeline** where each role (Writer, Director, Producer, Character Designer, Storyboard Artist, Cameo Locker, Lipsync, Editor) is a specialist that hands off with strict consistency contracts. Plus a **real-time multiplayer timeline** to edit with your team like Figma for film.\n\n```\n \"A reborn CEO confronts his cheating ex-fiancée at her wedding.\"\n │\n ▼\n Writer ▶ Director ▶ Style Bible ▶ Char Designer ▶ Scene Designer ▶\n ▶ Storyboard (vision-audited) ▶ Video (multi-engine race) ▶\n ▶ TTS (per-character voice) ▶ Lipsync (Kling/Sync.so/Hailuo) ▶\n ▶ Editor (j-cut/l-cut + BGM per act + CJK subtitles) ▶ final.mp4\n\n + Real-time collab timeline (Yjs CRDT)\n + Bring-your-own LLM (3 env vars, 0 code change)\n + Plug-in image/video providers (12+ supported)\n + Lip-sync pipeline: viseme track → align score → drift auto-correct → engine render → back into timeline (v10)\n + Template market: save a hit project → rate / favorite / one-click remix (with its voices) (v10)\n + Per-project cost attribution + budget guard, four-dimension publish gate (v10)\n```\n\n---\n\n## 🏗 Architecture\n\nThree views of the same engine. **Open on GitHub to watch them animate** — flowing dashes trace live data &amp; control paths, traveling dots are data packets moving through the pipeline.\n\n<p align=\"center\"><img src=\"assets/diagrams/architecture.svg\" alt=\"Wind Comic system architecture — Next.js client · orchestration · 8-agent pipeline · LLM gateway · 12+ media engines · quality / data / realtime platform\" width=\"100%\" /></p>\n\n<sub>**System architecture** — five layers, top to bottom. The **Director** threads control across all eight agents; the **LLM gateway** falls back DeepSeek → MiniMax with zero code change; **12+ media engines** plug in behind one router; everything lands on a **dual-driver** (SQLite ⇄ PostgreSQL) platform.</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/sequence.svg\" alt=\"Sequence diagram — one idea to one finished film, with the Vision-Audit retry loop and multi-engine race\" width=\"100%\" /></p>\n\n<sub>**Sequence** — the lifecycle of one *idea → film* request, time flowing down. Two signature beats: the **Vision-Audit retry loop** (auto-regenerate any shot scoring &lt; 70) and the **multi-engine race** (Seedance / Kling / Veo / Vidu — first good clip wins).</sub>\n\n<p align=\"center\"><img src=\"assets/diagrams/dataflow.svg\" alt=\"Data-flow diagram — the artifact refinery from text to final.mp4, persisted to DbDriver and the asset store\" width=\"100%\" /></p>\n\n<sub>**Data flow** — the artifact refinery. One line of text is refined stage-by-stage (`TEXT → JSON → PNG → IMG → MP4`); every artifact is persisted to the dual-driver DB + asset store and is independently reusable, so any stage can be re-run in isolation.</sub>\n\n> 🎞️ Diagrams are **animated SVG, authored as code** in [`assets/diagrams/`](assets/diagrams/) — crisp at any zoom, versioned with the source. *(Animation renders on GitHub; the ModelScope mirror shows static PNG.)*\n\n---\n\n## 🆕 New in v12 — the quality loop era\n\n**Sketch-Lock storyboarding** — every shot first renders a B/W composition sketch, then the final frame is generated *locked to that composition* (toggle at creation time, or per-shot in the Shot Workshop). Camera language finally survives the diffusion lottery.\n\n**Emotion-driven camera** — shots missing camera movement get one derived from story beats (hook→push-in, chase→handheld, reveal→zoom-in, farewell→pull-out, emotion temperature → push/orbit/crane). Even the Ken Burns degradation follows the intended move.\n\n**Engine matrix, honestly** — Veo · MiniMax (Hailuo) · Kling (official Beijing API) with a one-line env priority (`VIDEO_ENGINE_ORDER=kling,minimax,veo`), base64 first-frame channel for local assets, and an *honest* fallback chain: a failed shot becomes a labeled animatic, never a still image masquerading as video.\n\n**The quality loop** — ffprobe-powered film health report (aspect/duration/fps/bitrate/audio/degraded shots) per project *and* per series; batch re-render of degraded shots (2-way concurrent); a season-export health gate so no broken episode sneaks into the compilation; an engine weather bar so you know *before* you hit generate.\n\n**Round-trip storyboards** — export the pull sheet as CSV / Markdown / print-ready PDF (with character sheet + health appendix), edit in Excel, import it back — changed visual fields offer one-click re-render of exactly the affected shots.\n\n**Writer resilience** — truncated or quote-mangled LLM scripts are salvaged (bracket-stack completion + content-quote escaping) instead of being silently replaced by a template. The real 23KB incident dump lives in the test fixtures.\n\n## 🆕 Earlier: v6 → v10 — from *demo* to *production platform*\n\n> v3 shipped the pipeline. **v6 turned it into a production studio; v7–v9 hardened it into a platform; v10 closed the lip-sync, template-market, and cost loops.** Reusable characters, a prompt IDE, novel→season auto-splitting with real voiceover, a 60-style gallery, a director's control room, team credit budgets, an industry-grade script audit (**Polish Pro**, v7.1), a **premium design pass** (v8.3), a **fully-migrated Postgres backend** (v9), a **lip-sync delivery pipeline + template market + cost observability** (v10), and a live API health board — every screen below is a **real capture of the running app**.\n\n<p align=\"center\">\n <img src=\"assets/v10/landing.png\" alt=\"Wind Comic landing — 青枫漫剧 AI Animation Agent Studio, 8 agents · 7 engines · 3 consistency guards, looping cinematic hero\" width=\"100%\" />\n <br/><sub>v10 landing — looping cinematic hero, 8 collaborating agents · 7 media engines · 3 consistency guards.</sub>\n</p>\n\n### 🎙️ v10 — Lip-sync delivery · Template market · Cost guard *(Stage 16)*\n\n- **🎙️ Voice & lip-sync, end-to-end** — per-character voice routing (auto by name + manual pick/audition) → TTS → **viseme keyframe track** → measured **mouth-vs-audio alignment score** (Web-Audio) → **drift auto-correct** → pluggable engine render (wav2lip / SadTalker / MuseTalk, BYO `LIPSYNC_API_URL`) → written back into the timeline. One-click **whole-film lip-sync** with a Vision **QC self-heal loop** (weak shots auto re-render).\n- **🧩 Template market** — turn a hit project into a reusable template (style + multi-ref elements + pacing + **voices**), with a **preview clip**, **★ ratings & ♥ favorites**, quality score, and **one-click remix** that prefills a new project.\n- **💴 Cost observability + budget guard** — per-project cost attribution by stage (LLM / image / video / TTS / lip-sync), saving hints, and an **ok/warn/over budget guard**. The **publish-readiness gate** is now four-dimensional: picture-vs-script · consistency · lip-sync alignability · **measured mouth-vs-audio**.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/create.png\" /><br/><sub><b>创作工坊</b> — one line → film: style presets · multi-ref element shelf · character lock · live preview · gold-neon genre gallery</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/templates.png\" /><br/><sub><b>模板市场</b> — preview clips · ★ ratings / ♥ favorites · quality score · one-click remix (carries voices)</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/qc.png\" /><br/><sub><b>成片质检 + 配音口型</b> — four-dimension publish gate · consistency trend · viseme track (animated mouth + measured alignment) · per-shot Vision scores</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cost.png\" /><br/><sub><b>技术监看 · 成本归因</b> — per-stage cost share (video / image / LLM / TTS / lip-sync) + saving hints</sub></td>\n</tr>\n</table>\n\n> Every screen above is a **real capture of the running v10 app**. Design language (v8.3 *Taste* pass — Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, AI gold-neon genre emblems) carries across all of them.\n\n> Notes are consolidated **per major version** — the full minor-by-minor changelog lives in [`VERSIONS.md`](VERSIONS.md) / [`ROADMAP.md`](ROADMAP.md).\n\n| Major version | What landed |\n|---|---|\n| **v6 · Production studio** | **Character Studio** (reusable cast, multi-view turnaround + 8-field **DNA identity lock**, cross-project **Cameo IP**) · **Prompt Workbench** (`@`-mention assets + compile-preview + readiness score) · **Long-form Intake** (novel → chapter-aware episodes, **real TTS narration** + burned SRT, N-episode parallel) · 60-look **Style Gallery** · **Director Console** (4-stage pipeline, stale-detection, single-stage rerun) · **Team Workspace** (credit pool + RBAC + real invite links) · **API Health Board** (live gateway status + balance) · top-tier model repointing (`veo3.1-pro`) + supplement gateway backfilling TTS / Midjourney / Kling. |\n| **v7 · Platform hardening** | Writer/Director on DeepSeek **`deepseek-v4-pro`** with a **universal MiniMax fallback** on any error / out-of-credits / timeout (3-tier LLM health board) · tiered models (**`deepseek-v4-flash`** for speed) that cured the reasoning-token instability · **Polish Studio Pro** — industry script audit: AIGC-readiness score, Save-the-Cat 3-act beat-gap detection, on-the-nose dialogue flags, per-character identity anchors. |\n| **v8 · AI director station + premium design** | Per-shot **cinematography console** (景别/机位/镜头/运镜/焦点) + **continuity & seed lock** + emotion/rhythm curves + JSON↔visual **parameter linkage**, all converging into an **11-tab director station** · **Taste design pass**: Plus Jakarta Sans + Phosphor icons, gold machined-bezel cards, spring motion, an asymmetric **bento dashboard**, 60 AI-rendered **style thumbnails**, and AI **gold-neon genre icons** (18 templates + 5 modes + 8 looks). |\n| **v9 · Postgres platform + monetization** | Full SQLite↔Postgres **dual-driver** cutover — **17 core tables/clusters** migrated to async repos, verified end-to-end on Postgres with **transaction commit + rollback** atomicity (default stays SQLite, same file, **zero split-brain**; `DB_DRIVER=pg` is opt-in) · multi-platform **distribution-pack** generator (抖音 / 快手 / 视频号 / 小红书 / YouTube Shorts / B站) · **real binary AAF export** (MS-CFB container, for Avid) alongside EDL / FCPXML · plus **quality & consistency depth** (publish-readiness gate, rebirth loop, consistency report) and the **Kling-style multi-reference + one-click film** fusion. |\n| **v10 · Lip-sync delivery · template market · cost** *(Stage 16)* | **Voice & lip-sync end-to-end** — per-character voice routing (auto + manual audition), viseme keyframe track, measured **mouth-vs-audio alignment** + **drift auto-correct**, pluggable engine render (wav2lip/SadTalker/MuseTalk) **plus a zero-config built-in 2D engine that works out of the box (no BYO key)**, written **back into the timeline**, one-click whole-film with a Vision **QC self-heal** loop · **Template market** — save→rate/favorite→one-click remix (carries voices), preview clips, quality score · **Cost observability** — per-project stage attribution + **budget guard**, and a **four-dimension publish gate** (picture · consistency · lip-sync · measured alignment). **2135 tests** green on both drivers. |\n\n| **v12.49–v12.80 · Commercial Ad Factory** *(Stage 22)* | **电商/品牌广告工厂全链** — 一句 brief(或**贴商品 URL 自动出 brief**)→ 竖屏成片:现代写实+photoreal **双硬锚**(Director 跑偏古装/3D 的实测病根双修 + plan 确定性净化保险)· **结构化 Hook/CTA 文字卡**(ffmpeg drawtext 零乱码,Hook 公式化选句:问句>感叹,**批量 Hook 变体 A/B**,品牌色可配)· **karaoke 词级扫光字幕**(对齐 TTS 真实时长,抖音/小红书**安全区避让**)· **BGM sidechain 自动闪避** · **《广告法》合规净化**(绝对化用语/医疗红线,全入口覆盖)· **质量三防线+账本**(逐镜 VLM 门禁 photoreal/烤字/畸变→定向重生 · 视频瞬时错误同引擎重试 · 坏 mp4 完整性拦截 · **失败镜 Ken Burns 兜底保时长** · quality_report 健康分)· **发布预检**(三平台硬指标)· rembg 商用安全抠图(产品跨镜一致)+ Kling Elements 打通 · LLM 网关 429/503 **健康感知自动降级**。**2712 tests** green。 |\n| **v12.82–v12.120 · Ad Factory 深化 + 供给链扩容** | **视频通道扩容**(qyt-vidu(Vidu Q3 via 网关 `/ent/v2`)入链 pri=75 · minimax 轮询超时可调 · Seedream 4.5 图像尾梯队(720x1280 原生竖屏,实测 14s/张))· **素材质量闭环**(Pexels B-roll 双层兜底 + 人设感知检索 + 烤字/字幕 VLM 抽查(B-roll 与 AI 镜双向)+ 结果缓存 LRU)· **响度归一 -14 LUFS**(实测 -13.62/-1.42 dBTP 命中平台标准)· **成片抽帧封面精选**(VLM 打分,零 T2I 额度)+ 发布包封面链(chosen>AnyText>候选)· **karaoke 长台词折行+行内缩字**(libass 实渲验证)· **英文广告链**(语言感知 CTA + 6 条英文合规红线)· 合规词表可扩展(env+JSON)· 导演/编剧自检修正轮入账 + 导演台 HEALTH KPI + 包装车间结构化结果面板 · LLM 健康缓存全端点对齐(拥堵实测:fable-5 断粮 403 → opus→sonnet→OpenRouter→MiniMax 五级无感降级)。**2780 tests** green。 |\n\n### 📂 More modules — earlier (v6–v8) captures\n\n> Features that still ship. **Director console · novel→season · finished-film station · team workspace · Cinema timeline are refreshed to v10** (live demo data). The **style gallery, API health board, Polish Pro audit, and character turnaround** are kept as earlier (v6–v8) captures because they show fuller sample output (the full style grid / live balances / a complete Pro audit / a 3-view turnaround sheet).\n\n### 🎬 Director Console — the whole film as one control room *(v6.4)*\nEvery stage at a glance — what's ready, what's gone stale because you changed something upstream, and a one-click rerun that knows exactly which downstream stages it invalidates.\n<p align=\"center\"><img src=\"assets/v10/director-console.png\" width=\"100%\" /></p>\n\n### 📖 Novel → season, with real voiceover *(v6.2)*\nPaste a full novel; Wind Comic splits it into episodes by chapter markers (or by target length), picks a narration mode, and can render a real narration track + burnable subtitles for the whole season in parallel.\n<p align=\"center\"><img src=\"assets/v10/story-intake.png\" width=\"100%\" /></p>\n\n### 🎨 Style Gallery — 60 cinematic looks, one click *(v6.3)*\nLock a consistent visual identity before you generate. Search, filter by category, and apply any preset straight into the creation workshop.\n<p align=\"center\"><img src=\"assets/v6/styles.png\" width=\"100%\" /></p>\n\n### 🩺 API Health Board — never get surprised by a dead key *(v6.7)*\nLive status for every model and gateway: 正常 / 额度用尽 / 配置缺失 / 不可达, with real balance read-out and a \"去充值 / 补配置\" hint. Keys are never stored or returned.\n<p align=\"center\"><img src=\"assets/v6/health.png\" width=\"100%\" /></p>\n\n### 🩺 Polish Studio — Pro industry audit *(v7.1)*\nPaste a draft, hit **Pro**: deepseek-v4-pro returns a polished script **plus a full industry diagnostic** — AIGC-pipeline readiness score (e.g. 85/100), style profile, first-3-second hook strength, Save-the-Cat 3-act breakdown with missing beats called out, on-the-nose dialogue lines flagged, and per-character Cameo/Seedance identity anchors so every shot stays on-model.\n<p align=\"center\"><img src=\"assets/v8/polish-pro-audit.png\" width=\"100%\" /></p>\n\n### 👤 Character Studio + Cameo IP turnaround *(v6.0 / v7.x)*\nEvery character gets a real 3-view turnaround sheet (front / three-quarter / back) with a locked structured \"DNA prompt\" — face geometry, skin tone, signature props, color palette, silhouette identity, full body pose — so the same actor reads identically across all 6 shots. The Cameo IP economy lets the same character travel between projects.\n<p align=\"center\"><img src=\"assets/v8/character-studio.png\" width=\"100%\" /></p>\n\n### 🎬 Finished film + 11-tab director station *(v8.0)*\nOne project, eleven tabs of cockpit-grade control: 导演台 · 剧本 · 角色 · 场景 · 分镜 · 连贯性 · 视频 · 镜头工坊 · Cinema 时间线 · 节奏分析 · 成片质检 · 技术监看 · 参数联动 · 评论协作 · 完整播放. The finished film plays right in the workspace with a 90/100 audit badge and one-click `mp4` / platform export.\n<p align=\"center\"><img src=\"assets/v10/final-film.png\" width=\"100%\" /></p>\n\n### 👥 Team Workspace *(v6.5)* · 🎞️ Cinema Timeline + narration track *(v6.2.4)*\n<table>\n<tr>\n<td width=\"50%\"><img src=\"assets/v10/team.png\" /><br/><sub>Credit pool + per-member allocations, RBAC, real invite links.</sub></td>\n<td width=\"50%\"><img src=\"assets/v10/cinema-timeline.png\" /><br/><sub>Multi-track timeline; narration audio + subtitles burned in.</sub></td>\n</tr>\n</table>\n\n---\n\n## 🎯 Who is this for?\n\n| You are... | What Wind Comic gives you |\n|---|---|\n| **Vertical short-drama creator** (霸总 / 重生 / 战神 / 古装) | Trope-aware Writer, hook-first shot 1, reversal density audit, cliffhanger detection, 9:16 default |\n| **Content marketing team** | 1 idea → 30-second polished ad with consistent characters across cuts, real Chinese subtitles burnt in, brand-safe negative prompts |\n| **Indie filmmaker / video artist** | Style Bible locks the visual identity across all shots, McKee-structured story beats, Logic-Pro-style multi-track timeline, real BGM waveform editor |\n| **Comic / manhua adaptation studio** | Script → storyboards in your chosen art style, character consistency via cref+sref+DNA, drag-rearrange shots, regenerate single shots |\n| **Educator / explainer** | Pacing audit warns when content is too flat, conflict-score per shot, suggestions for hooks |\n| **Open-source builder** | Swap any LLM with 3 env vars (OpenAI / Anthropic / DeepSeek / Qwen / Kimi / OpenRouter / Ollama local — all work) |\n\n---\n\n## 🚀 Highlights · The features competitors don't have\n\n### 1. **Multi-agent pipeline, not one black-box model**\nDirector plans the story → Writer drafts dialogue under McKee structure → Style Bible Frame locks the look → Character Designer extracts an 8-dimension **DNA signature** of each character → Storyboard renders with Vision Audit (auto-regen on <70 score) → Video producer races multiple engines (Minimax / Veo / Kling) → Editor cuts j/l-cut on emotional beats and burns CJK subtitles.\n\n### 2. **The visual coherence trick — Style Bible Frame** (v2.20)\nWe render **one canonical \"key art\" frame from the Director's plan**, then pass it as the first `--sref` of every subsequent storyboard render. Net effect: all 6 shots feel like they came from the same show, not 6 random Midjourney runs. (Most competitors only carry a 2-frame rolling chain — shot 6 doesn't know what shot 1 looked like.)\n\n### 3. **9:16 by default + 12 short-drama trope templates** (v2.20 P0.2)\nWriter prompt detects 短剧/漫剧 genres and switches to vertical canvas + injects proven hook patterns (重生回到 N 年前 · 当街掌掴 + 秘密身份 · 系统提示音突响 · etc). McKee 3-act still backs it; tropes are the surface.\n\n### 4. **Real CJK subtitle burning** (v2.22)\nThe garbled-Chinese-text-in-AI-video problem solved properly: we **strip dialogue text** from the video prompt (so the model doesn't try to draw garbled glyphs) + add aggressive negatives (`--no text --no chinese --no captions`) + post-bake real subtitles with ffmpeg `subtitles` filter using a system CJK font (PingFang / Noto Sans CJK).\n\n### 5. **Character consistency = cref + sref + 8-dim DNA + Cameo Vision Retry** (v2.21 P1.2)\nBeyond reference image hacks, we run each character's turnaround sheet through Vision LLM to extract structured features (eye shape / jaw angle / hair style / signature outfit etc.), then inject as natural-language anchor into every shot prompt. Combined with cameo-vision-retry: if a shot's character match scores <75, we auto-regen with boosted cw.\n\n### 6. **Logic-Pro-style multi-track timeline with real-time collab** (v3.1.1–v3.1.3)\n- 3 tracks: shots / BGM / subtitle\n- **Real BGM waveform** decoded via Web Audio API (not procedural)\n- **Drag-to-retime + edge handles** to resize duration\n- **Auto-snap to neighbors** within 0.4s threshold + hard-clamp on overlap\n- **Real-time multiplayer**: Yjs awareness paints other users' cursors live, presence avatars show which tab each collaborator is in, Y.Map locks prevent two people editing the same segment\n- **Project invites** with viewer/commenter/editor role gating\n\n### 7. **Lipsync that actually works** (zh / en; needs a public video URL + audio ≥ 2s)\nKling lip-sync API for talking heads, with Sync.so and Hailuo as auto-fallback. The pipeline strips dialogue from the prompt so the model only generates lip *motion*; we then sync the lips to the TTS audio in post. **Real-machine limits:** dialogue audio must be ≥ 2 seconds and the source video must be reachable at a public URL; ja/ko/ru currently degrade to no lip-sync (honest skip, surfaced in the engine-weather panel).\n\n### 8. **Conflict / reversal / cliffhanger pacing audit** (v2.21 P1.1)\nAfter Writer finishes, we score each shot 0-10 on a Chinese-conflict-word dictionary + detect emotional polarity reversals + cliffhanger keywords. If a vertical drama has <2 reversals or shot-1 conflict <5, you see a warning in the dedicated Pacing tab with actionable suggestions.\n\n### 9. **Bring Your Own LLM** (v3.1.3)\nEvery text-LLM call (Director / Writer / Vision / Audit) goes through one OpenAI-compatible `chat/completions` endpoint. Want to swap to DeepSeek-r1 / GPT-4o / Claude (via OpenRouter) / Qwen-Max / local Ollama? **Edit 3 lines in `.env`. Zero code change.** See [`docs/llm-providers.md`](docs/llm-providers.md) for the full matrix.\n\n### 10. **3262 tests, TypeScript strict, no fake \"coming soon\"s**\nEvery feature listed above is in `main`, type-checked, unit-tested, and visible at `/projects/[id]` if you `npm install && npm run dev` right now.\n\n---\n\n## 🥊 vs. competitors\n\n> 阵容核验 2026-07-13(Artificial Analysis 盲投竞技场):格局较 07-12 稳定(1 日无实质变动) —— **带音频文生视频榜:Dreamina Seedance 2.0 720p 仍榜首(Elo 1226)**、Wan2.7-260612 次席(1160)、HappyHorse-1.1 第三(1152)、Kling 3.0 1080p Pro(1112);**无音频榜 HappyHorse-1.0 登顶(1287)**、HappyHorse-1.1(1277)、Seedance 2.0(1272)、Kling 3.0 Pro(1245);**图生视频 Seedance 2.0 榜首(Elo 1345)**。**Seedance 2.5** 已进入主流对比梯队(我方 v12.177 预备态待网关额度激活)。**Veo 3.1** 仍是画质/物理/原生 48kHz 音轨王者(4K,企业首选);**Kling 3.0** 性价比冠军(多语对白+lip sync);**Sora 2** 关停时间线不变(App 已下线、API 2026-09-24 关停,勿依赖)。\n> **本轮 v12.195–213 全部落在护城河「制作/平台层」**(生成层红海不硬拼):可灵首尾帧锁定+口型同步修复(image_tail/lip-sync,均为探测修正的 live-caught bug)、**情感 TTS 真接通**(中文情绪→MiniMax 枚举,speech-2.8-hd)、角色档案多主体人脸库(对标即梦)、出海多语版一键译制 + **5 语全量 UI(zh/en/ja/ko/ru)**(对标阅文 ToonScroll)、AI 作曲免版权 BGM、多引擎色调统一+晕影+锐化、EBU R128 双遍响度、Kling 4K/enable_audio 门控、决策日志/成本下钻/一键自愈/URL→创意 等断层入口补齐。\n> 结论不变:**生成层已是红海(竞品在出片/多镜/音频都第一梯队),Wind Comic 护城河收窄到「制作/平台层」**——节奏审计、智能剪辑、字幕烧入、协作、自托管、开源、BYO。\n\n| Capability | Veo 3.1 | Kling 3.0 | Seedance 2.0 | Runway Gen-4.5 | Grok Imagine 1.5 | HappyHorse-1.1 | **Wind Comic** |\n|---|---|---|---|---|---|---|---|\n| Multi-shot story from one prompt | ⚠️ | ✅ storyboard mode | ✅ multi-shot native | ⚠️ | ⚠️ (one clip) | ⚠️ (one clip) | **✅ 8-agent script→edit pipeline** |\n| Character consistency across shots | ✅ | ✅ | ✅ | ✅ reference | ✅ | ✅ reference-to-video | **✅ cref + sref + 8-dim DNA + vision retry** |\n| Style coherence locked | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | **✅ Style Bible Frame** |\n| Native dialogue + SFX audio | ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ 单次生成即带音频 | **✅ per-character TTS + lip-sync** |\n| Real CJK subtitles (burned-in) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ libass + PingFang burn** |\n| Vertical drama tropes | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12 templates + 9:16 default** |\n| Real-time multiplayer timeline | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Yjs CRDT + Y.Map locks + cursors** |\n| Self-hostable | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ Next.js + SQLite + Web Audio** |\n| BYO LLM (OpenAI / Claude / DeepSeek / local) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ 12+ providers via .env** |\n| Open source | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ 权重部分开放 | **✅ MIT** |\n| Per-shot regenerate with custom prompt | ⚠️ | ✅ | ⚠️ | ✅ motion brush | ⚠️ | ✅ video-edit 端点 | **✅ + reference image upload** |\n| Pacing / conflict audit | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ shot-level score + reversal detection** |\n| Smart editing (beat-snap + emotion pacing + one-instruction style) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ beat-snap · emotion pacing · emphasis · transition aesthetics · \"fast & hype/slow & lyrical\" in one line (BYO LLM)** |\n| First+last frame lock (image_tail cut-to-cut coherence) | ❌ | ✅ (v1.5 only) | ⚠️ | ❌ | ❌ | ❌ | **✅ Kling FLF wired into main pipeline, per-shot tail-frame picker** |\n| Multi-character face cast library (post-build editable) | ❌ | ✅ 主体库 | ✅ 角色管理 | ⚠️ | ❌ | ❌ | **✅ 3-slot cast + cross-shot subject_reference injection** |\n| One-click localization (script + re-voice) | ❌ | ⚠️ dub only | ❌ | ❌ | ❌ | ❌ | **✅ 8-lang translate → apply → re-TTS, honest degradation** |\n| Royalty-free AI BGM per story | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ MiniMax music-2.6, style-prompt → project BGM** |\n| Per-shot auditable decision log (engine/cost/consistency) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **✅ decision log + cost drill-down + quality score** |\n| Emotion-aware TTS (mapped to native enum) | ⚠️ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | **✅ CN emotion → MiniMax speech-2.8-hd enum, live A/B verified** |\n| Lip-sync wired into pipeline (auto per dialogue shot) | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | **⚠️ Kling lip-sync — zh/en only (needs public video URL + audio ≥2s); ja/ko/ru degrade to none; honest skip on non-face** |\n| Full-app i18n (zh/en/ja/ko/ru, all UI) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | **✅ 5-language core UI, ~400 keys (component-level string cleanup ongoing)** |\n\n> Cells marked ⚠️ = the feature exists but in a limited / locked-down form (e.g. \"you can only do this on a paid Pro tier through a UI panel\").\n\n---\n\n## 🆕 New in v11 → v12 — pull-replicate, smart editing & management\n\nReal puppeteer captures of the running app (`node scripts/capture-v12.mjs`). 核心迭代:\n\n- **阶段十九 AI 拉片复刻(v11.1.x)**:拉片五栏真值表(出厂参数,非 AI 看图猜)· 外部视频 ffmpeg 拆条 + BYO Vision 打标 · 替换工作台(「全员换猫」级全局替换)+ 复刻起片(保原片镜头结构/时长)· 复刻保真度对照 · 存为私有模板。\n- **项目/资产管理(v11.2.0)**:我的项目 / 我的资产 删除 + 下架(级联清理 + 属主守卫)。\n- **模型雷达(v10.6.3)**:一键扫描各 API 最新模型 + 同家族自动升级(四护栏 + 回滚)。\n- **钩子审计三指标(v10.6.2)**:开场 3 秒钩子 / 集尾悬念 / BGM 卡点对齐率。\n- **阶段二十 A 智能剪辑(v12.0.x,五刀全交付)**:卡点剪辑(切点吸附音乐拍点)· 情绪节奏曲线(峰值镜 breathe / 动作镜快切)· 侧重强调(关键镜不压 + 沉稳转场)· 转场审美(按镜头关系选转场)· **一句指令调风格(v12.0.4,BYO)**——「快节奏燃向」/「慢叙抒情」一句话调 pacing 力度 + 转场软硬,无 key 走规则、配 key LLM 解析自由文本。\n- **阶段二十 B 预览音频(v12.1.x)**:片段预览叠播配音(静音裸片 + 同步配音轨)+ 成片音频体检自愈(ffprobe 缺流补轨)。\n- **阶段二十一 角色/资产一致性升级 · 全局资产记忆库 v2(v12.2.x,五刀全交付)**:对标同构竞品 OiiOii「角色高维特征向量 + 跨场景一致性」——名称归一修 DNA 漏注入 · DNA/场景锚落库(rerun/重启复用、早镜不漏) · **给 `global_assets.embedding` 死列通电**(BYO 文本嵌入 + 内存余弦检索) · 建角色入口「相似角色」推荐一键复用(防重复建/跨集漂移) · **身份漂移检测**(逐镜视觉 embedding 余弦距离标 outlier 漂移镜)。全程**无 key 走确定性地板(精确名+文本匹配),有 key 向量增强**,诚实降级。\n- **安全加固(v11.1.4)**:JWT 公开兜底密钥根除(进程级随机密钥,旧泄露值作废)。\n\n| 我的项目 · 删除/下架管理 | 拉片表 + 复刻工作台 |\n|---|---|\n| ![我的项目](docs/screenshots/v12/01-my-projects-manage.png) | ![拉片](docs/screenshots/v12/04-pull-sheet-replicate.png) |\n\n| 素材库 · 资产管理 | API 健康 · 模型雷达 |\n|---|---|\n| ![素材库](docs/screenshots/v12/02-my-assets-manage.png) | ![模型雷达](docs/screenshots/v12/03-api-health-model-radar.png) |\n\n| 钩子审计三指标 | 一句指令调剪辑风格(v12.0.4) |\n|---|---|\n| ![钩子审计](docs/screenshots/v12/05-pacing-hook-audit.png) | ![剪辑风格](docs/screenshots/v12/06-edit-style-instruction.png) |\n\n| 片段预览音频:三态徽章 + 带声试听(v12.1.2) | |\n|---|---|\n| ![片段音频预览](docs/screenshots/v12/07-clip-audio-preview.png) | 左:带配音(TTS 叠层)+ 带声试听开关 · 右:片段无独立音轨(成片含配乐+配音) |\n\n完整逐版本核心迭代见 [`VERSIONS.md`](VERSIONS.md);阶段计划见 `docs/stage18`–`docs/stage20`。\n\n---\n\n## 🎬 Screenshots\n\nBelow is the **foundational v3 pipeline** (the v6 studio screens are in the [New in v6](#-new-in-v6--from-demo-to-studio) section above). Every panel is **a real puppeteer capture of the running app** (run `node scripts/capture-screenshots.mjs` / `node scripts/capture-v6.mjs` to refresh).\n\n### Workspace overview\nThe 创作总览 dashboard: 99 projects + 4 case studies + recent activity feed + system status (engines in use, model versions).\n<p align=\"center\"><img src=\"assets/screenshot-dashboard-v3.1.3.png\" width=\"100%\" /></p>\n\n### Asset library\nCross-project reusable: 角色 / 场景 / 视频 / 音乐 / 字幕 / 模板 — 1467 assets in this demo project.\n<p align=\"center\"><img src=\"assets/screenshot-assets-v3.1.3.png\" width=\"100%\" /></p>\n\n### Project library\nEvery short film with auto-generated cinematic covers + status badges + quality donut.\n<p align=\"center\"><img src=\"assets/screenshot-projects-v3.1.3.png\" width=\"100%\" /></p>\n\n### Creation workspace — live multi-agent canvas\nThe whole pipeline as a live agent flow: Writer / Character Designer / Scene Designer / Storyboard Artist / Video Producer / Editor nodes wired together with progress streaming per node, plus a chat side-rail showing every agent message in real time.\n<p align=\"center\"><img src=\"assets/v8/creation-canvas.png\" width=\"100%\" /></p>\n\n### Per-project script + shot list with beats\nThe 剧本 tab: every shot with duration, emotion tag (警觉 / 凝重 / 惊恐 / 暴风的沉着 / 镇定的专注…) and a one-line **beat note** (从表面到深层警觉 / 从无知到悉知威胁 / 从警戒到遭受袭击 …) so the rhythm of the cut is legible at a glance.\n<p align=\"center\"><img src=\"assets/v8/script-shotlist.png\" width=\"100%\" /></p>\n\n### 🆕 Cinema Timeline (v3.1.1–v3.1.3 — multi-track + collab)\n3-track layout (SHOTS / BGM / SUBTITLE), drag-to-retime, double-click subtitles to rewrite, drag edges to resize, **real BGM waveform** (Web Audio decode), live other-user cursors with name labels, segment lock indicators.\n<p align=\"center\"><img src=\"assets/screenshot-cinema-timeline-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Pacing Analysis (v2.21 P1.4)\nKPI: 平均冲突分 / 反转数 / 通过状态. Per-shot conflict-score bar chart with reversal arrows + emotional polarity icons. Color-coded green (≥7) / amber (4-6) / red (<4). Below: actionable warnings + suggestions.\n<p align=\"center\"><img src=\"assets/screenshot-pacing-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Comments + @mentions (v3.0 P0.1)\nProject-level + per-shot threaded comments with @-autocomplete and notification bell. Each shot collapses for context.\n<p align=\"center\"><img src=\"assets/screenshot-comments-v3.1.3.png\" width=\"100%\" /></p>\n\n### 🆕 Shot Workshop (v2.16 P1.4 + v2.23 P0.2)\nPer-shot \"改 prompt 重生\" (regenerate image with custom prompt + reference image upload) and \"4K 重渲\" (Kling Master 4K re-render, plan-gated).\n<p align=\"center\"><img src=\"assets/screenshot-workshop-v3.1.3.png\" width=\"100%\" /></p>\n\n---\n\n## 🛠️ What's in the box\n\n| | What it does | Where it lives |\n|---|---|---|\n| **Multi-agent pipeline** | Director / Writer / Char Designer / Storyboard / Editor — 8 agents | `services/hybrid-orchestrator.ts` |\n| **Style Bible Frame** | One canonical key-art frame locks visual identity across all shots | `lib/style-bible.ts` |\n| **Character DNA** | 8-dim vision-extracted character signature + per-shot prompt injection | `lib/character-dna.ts` |\n| **Style Vision Audit** | Auto-regen any shot scoring <70 on palette/lighting/colorTemp/texture | `lib/style-audit.ts` |\n| **Cameo Vision Retry** | Auto-regen any shot scoring <75 on character resemblance | `services/cameo-retry.ts` |\n| **Pacing Audit** | Conflict-score / reversal-detect / cliffhanger per Chinese drama tropes | `lib/pacing-audit.ts` |\n| **Drama Tropes** | 12 vertical-drama hook templates + 9:16 default + reversal density rules | `lib/drama-tropes.ts` |\n| **CJK Subtitle Burner** | ffmpeg libass with system CJK font discovery | `lib/text-control.ts` + `services/video-composer.ts` |\n| **Multi-track Timeline** | 3 tracks, drag/resize/snap/auto-collide, BGM waveform | `components/project/cinema-timeline.tsx` + `lib/timeline-tracks.ts` |\n| **Real-time collab** | Yjs CRDT + WS server + presence + cursors + segment locks | `scripts/ws-server.mjs` + `hooks/use-yjs.ts` + `hooks/use-segment-locks.ts` |\n| **Project invites** | viewer/commenter/editor role + token expiry + revoke | `lib/project-share.ts` |\n| **Comments + @mentions** | Threaded comments, @-autocomplete, mention notifications | `lib/comments.ts` + `lib/notifications.ts` |\n| **Lipsync** | Kling / Sync.so / Hailuo auto-select, fail-safe fallback | `services/lipsync.service.ts` |\n| **Plan-gate billing** | Per-engine plan checks (Vidu Q3 = enterprise, etc.) | `lib/plan-gate.ts` |\n| **API quota tracker** | Per-provider failure tracking + dashboard banner | `lib/api-usage-tracker.ts` |\n| **18 project templates** | 霸总/重生/穿越/古装/科幻/儿童/纪实/恐怖/喜剧 etc. | `lib/story-templates.ts` |\n| **BYO LLM docs** | 12-provider config matrix, 0-code swap | `docs/llm-providers.md` |\n| 🆕 **Character Studio** | Multi-view turnaround + DNA lock + auto-bound voice + bio | `lib/character-studio.ts` |\n| 🆕 **Prompt Workbench** | `@`-mention assets, autocomplete, compile-preview, readiness score | `lib/prompt-ide.ts` + `components/prompt-editor.tsx` |\n| 🆕 **Long-form Intake** | Novel→episodes + narration modes + real TTS + season parallel | `lib/story-intake.ts` + `lib/narration-synth.ts` + `lib/season-orchestrator.ts` |\n| 🆕 **Style Gallery** | 60 presets, 5 categories, one-click apply | `lib/style-presets.ts` + `app/dashboard/styles` |\n| 🆕 **Director Console** | 4-stage pipeline model + stale detection + single-stage rerun | `lib/pipeline-stages.ts` + `components/director-console.tsx` |\n| 🆕 **Team Workspace** | Credit pool + per-member allocations + RBAC + real invites | `lib/team-credits.ts` + `lib/team-invite.ts` |\n| 🆕 **Postgres cutover (v9)** | SQLite↔PG dual-driver; **all write paths on async repos** (project_assets/projects/users/notifications/comments cleared), tx commit+rollback verified, `DB_DRIVER=pg` opt-in | `lib/db-driver.ts` + `lib/repos/*` + `scripts/pg-migrate.ts` |\n| 🆕 **API Health Board** | Live model/gateway status + balance + out-of-credits detection | `lib/provider-health.ts` + `app/dashboard/health` |\n\n---\n\n## 🔀 Gateway routing — default model map *(matches current `lib/config.ts`)*\n\nEvery model call is provider-pluggable (priority chain + automatic fallback). Creative and high-frequency LLM traffic are split across two model tiers, and **MiniMax is always the last-resort fallback** on any error / out-of-credits / timeout:\n\n| Capability | Default model (env override) | Supplement / fallback |\n|---|---|---|\n| **Creative LLM** (writer / director) | `deepseek-v4-pro` (`OPENAI_CREATIVE_MODEL`) + `deepseek-v4-flash` fast tier for drafts/polish | `MiniMax-M2.7` (`LLM_FALLBACK_MODEL`) · optional self-hosted **XVERSE-Ent** (A5.7B / A4.2B) |\n| **General LLM** (planning / validation / Vision-Audit) | `claude-sonnet-4-6` (`OPENAI_MODEL`) | `MiniMax-M2.7` |\n| **Video** | `veo3.1-pro` (`VEO_MODEL`) | `veo3.1` · Kling → **MiniMax Hailuo** (Sora-2 retired — API EOL 2026-09-24) |\n| **Image** | `flux.1-kontext-pro` (`IMAGE_MODEL`) | Midjourney (`mj_imagine`) · fal FLUX Kontext · local ComfyUI → **MiniMax image** |\n| **TTS / voiceover** | `gpt-4o-mini-tts` (`VE_TTS_MODEL`) | MiniMax T2A (`speech-02-hd`) |\n| **Music / BGM** | MiniMax music | (Suno when gateway channel available) |\n\n- **Why two LLM tiers**: the creative tier (DeepSeek `-pro`, a reasoning model) carries writer/director quality work; the general tier (Claude `sonnet-4-6`) handles high-frequency planning / validation / Vision-Audit; the `-flash` tier keeps draft-compare & basic polish at sub-second latency.\n- **MiniMax safety net**: any primary LLM / video / image failure auto-routes to MiniMax (OpenAI-compatible) — surfaced live on the **API Health Board** (正常 / 额度用尽 / 配置缺失 / 不可达).\n- **XVERSE-Ent** is an **open-source MoE screenwriting model** you can self-host (vLLM / SGLang / ModelScope) and slot in as the writer/director LLM — set `XVERSE_ENABLED=true`.\n- **Swap anything** in `.env.local` (`OPENAI_*` / `OPENAI_CREATIVE_*` / `VEO_*` / `IMAGE_MODEL` / `VE_TTS_MODEL` / `MINIMAX_*`) — zero code change. See [`docs/llm-providers.md`](docs/llm-providers.md).\n\n---\n\n## 🏁 Quick start\n\n```bash\n# 1. clone + install\ngit clone https://github.com/ChrisChen667788/wind-comic.git\ncd wind-comic\nnpm install\n\n# 2. configure (3 mandatory lines, see docs/llm-providers.md for swaps)\ncp .env.example .env.local\n# Edit .env.local:\n# OPENAI_API_KEY=sk-...\n# OPENAI_BASE_URL=https://api.openai.com/v1 # or any compat provider\n# OPENAI_MODEL=gpt-4o # or claude-opus-4 via OpenRouter, etc.\n\n# 3. run\nnpm run dev # Next.js on :3000\n# Optional second terminal for real-time collab:\nnpm run dev:ws # Yjs WebSocket server on :1234\n\n# 4. open http://localhost:3000 and create your first short film\n```\n\n**Minimum LLM**: any model ≥24B parameters that responds in JSON. We've tested gpt-4o, Claude Opus 4, DeepSeek-r1, Qwen-Max, MiniMax-M2, GLM-4.5, Kimi-K2.\n\n**Optional engines** (graceful fallback when missing):\n- `MINIMAX_API_KEY` — image-01 / Hailuo-2.3 video / speech-2.8-hd TTS / music-2.6 BGM\n- `KELING_API_KEY` — Kling Master 4K + first-last-frame fusion + lip-sync\n- `VIDU_API_KEY` — Vidu Q3 (long-form 16s clips)\n- `VEO_API_KEY` — Veo 3.1-fast video fallback\n- `GROK_API_KEY` — xAI Grok Imagine 1.5 (T2V/I2V, native audio; BYO — 2026-06 image-to-video #1; auto-preferred when set)\n- `JIMENG_AK` / `JIMENG_SK` — ByteDance Seedance 2.0 (火山引擎 CV; multi-ref + native A/V; 2026-06 text-to-video #3; BYO)\n- `LTX_API_KEY` (or `FAL_KEY`) — LTX-2.3 (Lightricks open-weight #2 text-to-video; **self-hostable** via `LTX_BASE_URL`; BYO)\n- `GEN_CONCURRENCY` / `GEN_CONCURRENCY_VIDEO` · `_STORYBOARD` · `_SCENE` — per-stage generation concurrency (default 2, max 8). ⚠️ Higher *video* concurrency is faster but weakens keyframe-chain continuity (shot N pulls shot N-1's last frame) — keep low (1–2) when cross-shot 衔接 matters.\n- `SYNCSO_API_KEY` / `HAILUO_API_KEY` — alternative lip-sync providers\n\n---\n\n## 🤝 Contributing\n\nWe're open to PRs. Two things matter most:\n1. **Don't break the multi-agent contracts.** Each agent has explicit input/output shapes — see `types/agents.ts`.\n2. **Tests gate everything.** Vitest 3262/3262 must stay green. Add tests for new lib/service files.\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for the repo's contribution guide.\n\n---\n\n## 📚 Docs\n\n- [`docs/llm-providers.md`](docs/llm-providers.md) — Swap LLM provider in 3 env vars\n- [`docs/SCREENSHOTS.md`](docs/SCREENSHOTS.md) — Module-by-module screenshot manifest\n- [`docs/MARKETING-en.md`](docs/MARKETING-en.md) · [`docs/MARKETING-zh.md`](docs/MARKETING-zh.md) — Pitch deck copy\n- [`ROADMAP.md`](ROADMAP.md) — Full sprint-by-sprint changelog (v2.10 → v9.2.0) · [`VERSIONS.md`](VERSIONS.md) — version history table\n- [`docs/COMPETITIVE-GAP-2026-05.md`](docs/COMPETITIVE-GAP-2026-05.md) — Honest analysis vs Sora/Kling/Vidu/Higgsfield\n\n---\n\n## 📄 License\n\nMIT. Use it, fork it, build a startup on it. We just ask: if you ship a feature on top, send a PR back.\n\n### ⚠️ Redistribution notice — bundled binaries are not all MIT\n\n**Wind Comic's own source is MIT.** But three npm dependencies ship pre-built binaries under copyleft licenses. This does **not** affect the MIT status of this repository, and it does not affect you if you simply run or fork the source. It **does** matter the moment you redistribute a bundle that embeds those binaries (a Docker image, a desktop build, a hosted appliance you hand to a customer):\n\n| Dependency | License | What you must do when redistributing a bundle |\n|---|---|---|\n| `ffmpeg-static` | **GPL-3.0-or-later** | **Strongest constraint.** Ship the GPL-3 text and a written offer for the corresponding FFmpeg source — or drop the dependency and point `FFMPEG_PATH` at a system ffmpeg you obtained separately. |\n| `lightningcss` (+ platform binaries) | MPL-2.0 | File-level weak copyleft. Unmodified use/redistribution carries no extra duty; only if you modify its MPL-licensed files must you publish those files. |\n| `@img/sharp-libvips-*` | LGPL-3.0-or-later | Dynamic linking does not infect your code. On redistribution you must let end users replace/relink the library and point them to its source. |\n\nCI enforces this: [`scripts/license-check.mjs`](scripts/license-check.mjs) scans the **production** dependency tree every run and **fails the build** if a copyleft dependency appears that is not registered in the table above — so a new GPL dependency can never slip in unnoticed.\n\n---\n\n## 🙏 Acknowledgements\n\nWind Comic stands on a lot of excellent open-source work:\n\n- **App & UI** — [Next.js](https://nextjs.org) (App Router + Turbopack) · [React 19](https://react.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Radix UI](https://www.radix-ui.com) · [Phosphor Icons](https://phosphoricons.com) + [Lucide](https://lucide.dev) · [Framer Motion](https://www.framer.com/motion/) · [React Flow](https://reactflow.dev) for the agent-workflow DAG\n- **Realtime & data** — [Yjs](https://github.com/yjs/yjs) + [y-websocket](https://github.com/yjs/y-websocket) for **CRDT** real-time collaboration · [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) + [node-postgres](https://node-postgres.com) for the dual-driver persistence layer\n- **Media & export** — [FFmpeg](https://ffmpeg.org) via [fluent-ffmpeg](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) (CJK subtitle burn / audio mux) · pro NLE interchange through CMX3600 **EDL** · FCP7 **XML** · **AAF** (a from-scratch MS-CFB Compound File Binary writer, no third-party lib)\n- **Open models & engines** — [XVERSE-Ent](https://github.com/xverse-ai/XVERSE-Ent), an open-source **MoE screenwriting model** (self-hostable via vLLM / SGLang / ModelScope) · [FLUX.1 Kontext](https://blackforestlabs.ai) for image consistency · a provider-pluggable LLM/video chain (DeepSeek · Claude · MiniMax · Veo · Kling · Midjourney) over OpenAI-compatible endpoints\n- **Methods & algorithms** — Robert McKee story structure + Save-the-Cat 3-act beat analysis · **CRDT** (conflict-free replicated data types) for collaborative editing · `cref` / `sref` + 8-dimension character **DNA** for cross-shot identity consistency\n- **Tooling** — [TypeScript](https://www.typescriptlang.org) (strict) · [Vitest](https://vitest.dev) · [Stripe](https://stripe.com) — and every creator whose real-world feedback shaped the pipeline.\n\n---\n\n## ⭐ Star History\n\nIf Wind Comic saved you time, a star helps other creators find it.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ChrisChen667788/wind-comic&type=Date)](https://star-history.com/#ChrisChen667788/wind-comic&Date)\n\n---\n\n<p align=\"center\">\n Built with ❤️ by people who believe AI-generated drama should feel like a show, not a tech demo.<br/>\n <a href=\"https://github.com/ChrisChen667788/wind-comic/stargazers\">⭐ Star us</a> if Wind Comic saved you a week.\n</p>\n"}}}}