novel-art
給 AI 短劇出美術設定集:場景 + 敘事道具。前提刻在骨子裡:這是 AI 生成,不是實拍——沒有堪景搭景置景採買,環境和道具都是要被生成幾十次還得長一樣的資產,所以交付物全部圍繞一致性:
| 交付 | 解決什麼 |
|---|---|
| 一致性錨點(每景 3–5 個) | 觀眾靠它認場景,QC 靠它核對生成鏡頭有沒有漂 |
| 光照時段變體 | AI 換時段是重新生成不是重新打燈,每個狀態落成完整提示詞 |
| 空景出圖提示詞 | 環境和角色是兩層資產,參考圖裡混進人,一致性全毀 |
| 變體機制(variantOf) | 生成新景便宜,但變體複用母場景資產更一致 |
| 道具狀態變體 | 皮箱的合上與打開是兩張參考圖——道具有狀態弧,場景沒有 |
| 道具尺度參照 | AI 經常把手持道具畫成家具尺寸,提示詞必須帶尺度短語 |
| 道具白底無手 | 道具圖要被貼進各種鏡頭,必須可摳;拿著道具的手是最常見污染 |
{baseDir} = 本文件所在目錄。腳本 {baseDir}/scripts/novel-art.mjs,零依賴,node 直接跑。
邊界(不做的事):不做分鏡、不寫劇本、不管角色(novel-characters 的活)、不排大綱(novel-outline 的活)。道具只收敘事道具(有特寫、跨集、承載劇情的,通常 3–8 件)——場景陳設歸場景錨點,一次性手部道具鏡頭級提示詞解決,都不單獨建資產。
Step 0 — 定輸入
三種輸入,優先級從高到低:
- outline.json(novel-outline 的產出)——最優,場景清單、出現集、承載爽點、複用方案都是現成的
- 小說原文——自己歸納場景清單(主舞台優先,參考 novel-outline 的主場景上限思路:別貪多)
- 用戶手寫的場景清單
有 cast.json(novel-characters 的產出)也帶上——校驗「提示詞不含角色名」要用。
Step 1 — seed 骨架(有 outline.json 才有這步)
node {baseDir}/scripts/novel-art.mjs seed <outline.json> > <workdir>/art.json
確定性搬運:場景 id/名稱/主場景標記/出現集/承載爽點,帶複用方案的場景會有 seedNote 提示做成變體。這些事實不要讓模型重新想一遍。
沒有 outline.json 就自己按 references/schema.md 建清單。
Step 2 — 逐場景填設定 + 提取敘事道具
每個場景一份,能並發就並發。每份任務拿到:
{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 填:戲劇功能、錨點、狀態變體、尺度、白底無手提示詞。皮箱這種「跟人走的道具」就該在這——塞進場景錨點和角色畫像都不對。
Step 3 — 校驗 ⛔ 不能跳
node {baseDir}/scripts/novel-art.mjs validate <art.json> --cast <cast.json>
10 道質量門全是程式碼。場景 + 共用 6 道:錨點 3–5、光照狀態 ≥1、無人、提示詞全英文、不含角色名(給了 --cast 才查)、變體引用完整。道具專屬 4 道:狀態 ≥1、尺度短語寫進提示詞、反向詞禁手、設定圖純白背景。
有違規逐條修,改完重跑,直到通過。
Step 4 — 輸出與彙報
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 會撿起來
三個 skill 的接力
novel-outline → outline.json (什麼:結構與分集)
novel-characters → cast.json (誰:角色資產)
novel-art → art.json (哪裡 + 手裡拿的:美術資產)
seed 吃 outline.json 的場景與道具兩塊(大綱沒有 props 時道具留空,模型從原文提取),--cast 吃 cast.json。三份 JSON 各自的報告都帶匯出按鈕,改完都能餵回各自的 render/validate。
邊界
- 報告介面內建中英(
--lang,預設中文、或跟 art.json 的lang欄位);出圖提示詞永遠英文 - 本 skill 不出圖。
image.sheet是給下游的版面指令,版面規格見references/sheet.md - 場景數量不設硬上限——上限在 novel-outline 的主場景門那裡管;這裡管的是每個資產的品質
- 道具只收敘事道具,3–8 件為宜——每多一件就多一份跨集一致性維護
自測
node {baseDir}/scripts/selftest.mjs
151 項斷言,不調模型、不花額度。10 道質量門每一道都有擊穿用例。改完腳本先跑這個。
自帶範例
{baseDir}/examples/渡口-art.json:《渡口》三場景 + 兩件敘事道具(舊皮箱、縣衙舊硯)的完整設定,全部質量門通過(含對著 novel-characters 範例 cast 的角色名檢查)。當品質基準,也是自測夾具。