novel-art

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

novel-art

novel-art

给 AI 短剧出美术设定集:场景 + 叙事道具。前提刻在骨子里:这是 AI 生成,不是实拍——没有堪景搭景置景采买,环境和道具都是要被生成几十次还得长一样的资产,所以交付物全部围绕一致性:
交付解决什么
一致性锚点(每景 3–5 个)观众靠它认场景,QC 靠它核对生成镜头有没有漂
光照时段变体AI 换时段是重新生成不是重新打灯,每个状态落成完整提示词
空景出图提示词环境和角色是两层资产,参考图里混进人,一致性全毁
变体机制(variantOf)生成新景便宜,但变体复用母场景资产更一致
道具状态变体皮箱的合上与打开是两张参考图——道具有状态弧,场景没有
道具尺度参照AI 经常把手持道具画成家具尺寸,提示词必须带尺度短语
道具白底无手道具图要被贴进各种镜头,必须可抠;拿着道具的手是最常见污染
{baseDir}
= 本文件所在目录。脚本
{baseDir}/scripts/novel-art.mjs
,零依赖,
node
直接跑。
边界(不做的事):不做分镜、不写剧本、不管角色(
novel-characters
的活)、不排大纲(
novel-outline
的活)。道具只收叙事道具(有特写、跨集、承载剧情的,通常 3–8 件)——场景陈设归场景锚点,一次性手部道具镜头级提示词解决,都不单独建资产。

Create art bibles for AI short dramas: scenarios + narrative props. Core premise carved in stone: this is for AI generation, not live-action shooting — no location scouting, set building, set dressing, or prop purchasing. Both environments and props are assets that need to look identical even after being generated dozens of times, so all deliverables revolve around consistency:
DeliverableWhat it solves
Consistency anchors (3–5 per scenario)Viewers use them to recognize scenarios; QC uses them to check if generated shots have drifted
Lighting time period variantsFor AI, changing time periods means re-generating rather than re-lighting; each state is documented as a complete prompt
Empty scene generation promptsEnvironments and characters are two separate asset layers; if people appear in reference images, consistency is completely ruined
Variant mechanism (variantOf)Generating new scenarios is cheap, but variants that reuse parent scenario assets are more consistent
Prop state variantsA suitcase closed and open are two reference images — props have state arcs, scenarios do not
Prop scale referencesAI often draws handheld props as furniture-sized; prompts must include scale phrases
White-background hand-free propsProp images need to be composited into various shots, so they must be mattable; hands holding props are the most common contamination
{baseDir}
= the directory where this file is located. The script
{baseDir}/scripts/novel-art.mjs
has zero dependencies and runs directly with
node
.
Boundaries (what this does not do): No storyboarding, no scriptwriting, no character management (that's
novel-characters
' job), no outline arrangement (that's
novel-outline
' job). Only narrative props are included (props with close-ups, appearing across episodes, carrying plot weight, usually 3–8 pieces) — scenario set dressing falls under scenario anchors, and one-time hand props are solved with shot-level prompts, no separate assets are created for them.

Step 0 — 定输入

Step 0 — Define Inputs

三种输入,优先级从高到低:
  1. outline.json(novel-outline 的产出)——最优,场景清单、出现集、承载爽点、复用方案都是现成的
  2. 小说原文——自己归纳场景清单(主舞台优先,参考 novel-outline 的主场景上限思路:别贪多)
  3. 用户手写的场景清单
有 cast.json(novel-characters 的产出)也带上——校验「提示词不含角色名」要用。
Three types of inputs, in descending priority order:
  1. outline.json (output of novel-outline) — the best option, with ready-made scenario list, appearing episodes, carried payoff moments, and reuse plans
  2. Original novel text — you need to summarize the scenario list yourself (prioritize main stages, refer to novel-outline's main scenario limit logic: don't try to include too many)
  3. User-written scenario list
If you have cast.json (output of novel-characters), include it too — it's used to verify that "prompts do not contain character names".

Step 1 — seed 骨架(有 outline.json 才有这步)

Step 1 — Seed Skeleton (this step only applies if you have outline.json)

bash
node {baseDir}/scripts/novel-art.mjs seed <outline.json> > <workdir>/art.json
确定性搬运:场景 id/名称/主场景标记/出现集/承载爽点,带复用方案的场景会有
seedNote
提示做成变体。这些事实不要让模型重新想一遍。
没有 outline.json 就自己按
references/schema.md
建清单。
bash
node {baseDir}/scripts/novel-art.mjs seed <outline.json> > <workdir>/art.json
Deterministic migration: scenario ID/name/main scenario flag/appearing episodes/carried payoff moments. Scenarios with reuse plans will have a
seedNote
prompting to make them variants. Don't make the model re-derive these facts.
If there is no outline.json, create the list yourself according to
references/schema.md
.

Step 2 — 逐场景填设定 + 提取叙事道具

Step 2 — Fill in settings per scenario + extract narrative props

每个场景一份,能并发就并发。每份任务拿到:
  • {baseDir}/references/scene-pass.md
    和
    {baseDir}/references/schema.md
    (读它们,照着做)
  • 该场景的骨架 + 原文/大纲里关于这个空间的全部信息
  • 同批其他场景的名字(空间气质要区分开,别都写成同一种破旧)
核心要求都在 scene-pass.md 里,最重的三条:锚点要可画可认可核对(「补丁船篷」是锚点,「陈旧的氛围」是形容词);光照状态从分集反推,不写用不上的全家桶;能做变体就别开新景。
叙事道具优先吃大纲:
outline.json
从 1.1.0 起带
props
,
seed
会把道具表连同「承载什么」「托起哪几个爽点」「哪几集出现」一起搬过来,这一层只填设计字段(尺度、锚点、状态变体、白底提示词)。大纲没有 props 就从原文提取,那时这步是模型的活:只收有特写、跨集出现、承载剧情的,通常 3–8 件,跟主角数量一个量级。每件按
references/prop-pass.md
填:戏剧功能、锚点、状态变体、尺度、白底无手提示词。皮箱这种「跟人走的道具」就该在这——塞进场景锚点和角色画像都不对。
One task per scenario, run concurrently if possible. Each task receives:
  • {baseDir}/references/scene-pass.md
    and
    {baseDir}/references/schema.md
    (read them and follow the instructions)
  • The skeleton of the scenario + all information about this space from the original text/outline
  • Names of other scenarios in the same batch (the spatial vibe should be distinct, don't make them all the same kind of shabby)
Core requirements are all in scene-pass.md, the three most important ones: anchors must be drawable, recognizable, and verifiable ("patched boat awning" is an anchor, "old atmosphere" is an adjective); lighting states are derived backward from episode divisions, don't write a full set of unused states; make variants instead of creating new scenarios whenever possible.
Narrative props are prioritized from the outline:
outline.json
has included
props
since version 1.1.0, and
seed
will migrate the prop list along with "what it carries", "which payoff moments it supports", and "which episodes it appears in". At this stage, only design fields need to be filled (scale, anchors, state variants, white-background prompts). If the outline has no props, extract them from the original text — in that case, this step is the model's job: only include props that have close-ups, appear across episodes, and carry plot weight, usually 3–8 pieces, on the same order as the number of main characters. Fill in each prop according to
references/prop-pass.md
: dramatic function, anchors, state variants, scale, white-background hand-free prompts. "Portable props" like suitcases belong here — it's wrong to put them in scenario anchors or character profiles.

Step 3 — 校验 ⛔ 不能跳

Step 3 — Validation ⛔ Cannot be skipped

bash
node {baseDir}/scripts/novel-art.mjs validate <art.json> --cast <cast.json>
10 道质量门全是代码。场景 + 共用 6 道:锚点 3–5、光照状态 ≥1、无人、提示词全英文、不含角色名(给了 --cast 才查)、变体引用完整。道具专属 4 道:状态 ≥1、尺度短语写进提示词、反向词禁手、设定图纯白背景。
有违规逐条修,改完重跑,直到通过。
bash
node {baseDir}/scripts/novel-art.mjs validate <art.json> --cast <cast.json>
All 10 quality gates are implemented in code. 6 shared gates for scenarios + general: 3–5 anchors, ≥1 lighting state, no people, prompts entirely in English, no character names (only checked if --cast is provided), complete variant references. 4 prop-specific gates: ≥1 state, scale phrases included in prompts, hands banned in negative prompts, pure white background for reference images.
Fix violations one by one, re-run after modifications, until all pass.

Step 4 — 输出与汇报

Step 4 — Output and Reporting

bash
cd <输出目录>
node {baseDir}/scripts/novel-art.mjs render <剧名>-art.json --md   > <剧名>-art.md
node {baseDir}/scripts/novel-art.mjs render <剧名>-art.json --html > art-report.html
报告界面默认中文;用户要英文界面就加
--lang en
(或在 art.json 顶层写
"lang": "en"
,
--lang
优先)。
render
默认去 art.json 同级的
images/<slug>-sheet.png
找图(场景和道具都找),图在别处就用
--images <目录>
指过去——本 skill 不产生这些文件,下游出完图重跑一次 render 就能嵌进报告。报告含:KPI 带、场景清单、场景设定卡、道具清单、道具设定卡(锚点核对表 / 状态变体 / 提示词包全带复制按钮)、质量门面板、导出 JSON(下载的就是 art.json 原样)。
汇报一句话说清:几个场景(主场景/变体各几)、几件道具、锚点总数、报告路径;没过的门明说。
不要说「已出图」——这一步不存在了,交付的是提示词。
最终落地:
<输出目录>/
├── <剧名>-art.json
├── <剧名>-art.md
├── art-report.html                ← 双击就能开
└── images/                        ← 本 skill 不写这个目录
    └── <slug>-sheet.png           ← 下游出完图放这儿,render 会捡起来

bash
cd <输出目录>
node {baseDir}/scripts/novel-art.mjs render <剧名>-art.json --md   > <剧名>-art.md
node {baseDir}/scripts/novel-art.mjs render <剧名>-art.json --html > art-report.html
The report interface defaults to Chinese; if the user wants an English interface, add
--lang en
(or write
"lang": "en"
at the top level of art.json,
--lang
takes precedence).
render
looks for images (both scenarios and props) in
images/<slug>-sheet.png
in the same directory as art.json by default; if images are elsewhere, use
--images <directory>
to specify the path — this skill does not generate these files. After downstream image generation is complete, re-run render to embed them into the report. The report includes: KPI bar, scenario list, scenario setting cards, prop list, prop setting cards (with copy buttons for anchor checklists / state variants / prompt packages), quality gate panel, and exportable JSON (the downloaded file is exactly art.json).
Summarize the report in one sentence: number of scenarios (how many main / how many variants), number of props, total number of anchors, report path; clearly state any gates that failed.
Don't say "images have been generated" — that doesn't happen at this step; the deliverable is prompts.
Final deliverables:
<输出目录>/
├── <剧名>-art.json
├── <剧名>-art.md
├── art-report.html                ← 双击就能开
└── images/                        ← 本 skill 不写这个目录
    └── <slug>-sheet.png           ← 下游出完图放这儿,render 会捡起来

三个 skill 的接力

Three-skill Workflow

novel-outline    → outline.json (什么:结构与分集)
novel-characters → cast.json    (谁:角色资产)
novel-art        → art.json     (哪里 + 手里拿的:美术资产)
seed 吃 outline.json 的场景与道具两块(大纲没有
props
时道具留空,模型从原文提取),
--cast
吃 cast.json。三份 JSON 各自的报告都带导出按钮,改完都能喂回各自的 render/validate。
novel-outline    → outline.json (什么:结构与分集)
novel-characters → cast.json    (谁:角色资产)
novel-art        → art.json     (哪里 + 手里拿的:美术资产)
seed consumes both the scenario and prop sections of outline.json (if the outline has no
props
, the prop list is left empty and the model extracts them from the original text), and
--cast
consumes cast.json. The reports for all three JSON files each have an export button, and after modifications, they can be fed back to their respective render/validate commands.

边界

Boundaries

  • 报告界面内置中英(
    --lang
    ,默认中文、或跟 art.json 的
    lang
    字段);出图提示词永远英文
  • 本 skill 不出图。
    image.sheet
    是给下游的版面指令,版面规格见
    references/sheet.md
  • 场景数量不设硬上限——上限在 novel-outline 的主场景门那里管;这里管的是每个资产的质量
  • 道具只收叙事道具,3–8 件为宜——每多一件就多一份跨集一致性维护
  • The report interface has built-in Chinese and English support (
    --lang
    , defaults to Chinese, or follows the
    lang
    field of art.json); image generation prompts are always in English
  • This skill does not generate images.
    image.sheet
    is a layout instruction for downstream use; layout specifications can be found in
    references/sheet.md
  • There is no hard limit on the number of scenarios — the limit is managed by novel-outline's main scenario gate; what is managed here is the quality of each asset
  • Only narrative props are included, 3–8 pieces is recommended — each additional piece adds more cross-episode consistency maintenance work

自测

Self-test

bash
node {baseDir}/scripts/selftest.mjs
151 项断言,不调模型、不花额度。10 道质量门每一道都有击穿用例。改完脚本先跑这个。
bash
node {baseDir}/scripts/selftest.mjs
151 assertions, no model calls, no quota consumption. Each of the 10 quality gates has failure test cases. Run this first after modifying the script.

自带样例

Built-in Example

{baseDir}/examples/渡口-art.json
:《渡口》三场景 + 两件叙事道具(旧皮箱、县衙旧砚)的完整设定,全部质量门通过(含对着 novel-characters 样例 cast 的角色名检查)。当质量基准,也是自测夹具。
{baseDir}/examples/渡口-art.json
: Complete settings for 3 scenarios + 2 narrative props (old suitcase, old yamen inkstone) from Ferry Crossing, all quality gates passed (including character name check against the novel-characters sample cast). It serves as a quality benchmark and a self-test fixture.