# History Comics Content

> Generate historical comic content for the history-comics workspace targeting Chinese children aged 4-10. Use when the user asks to create, populate, or scaffold a new comic entry (e.g. a chengyu/典故/history story) under `content/<country>/<period>/<slug>/`. Covers the full pipeline: meta.json → story.md (Chinese) → story.en.md (English translation) → prompt.md (image generation prompts). Image generation itself is owned by `history-comics-produce` + `topview-generate`. Applies the user's writing preferences: full classical original plus a separate line-by-line modern translation, a scene-based story for ages 4–10, and event analysis grounded in specific story moments rather than generic morals.

- Skill: `nealst/history-comics-content` (Agent Skill)
- Install (CLI): `npx skillmds@latest add nealst/history-comics-content`
- Raw SKILL.md: https://api.skillmd.com/api/skills/nealst/history-comics-content/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: nealst (https://skillmd.com/u/nealst)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/nealst/history-comics-content

---


# History Comics — Content Authoring Skill

This skill captures the end-to-end workflow for authoring one comic entry in
the `history-comics` repository. Every entry lives at:

```
content/<country>/<period>/<slug>/
├── meta.json      # bilingual metadata + tags + order
├── story.md       # Chinese narrative: 历史典故 + 事件分析
├── story.en.md    # English translation of story.md
├── prompt.md      # image generation prompts for GPT image tools
├── images/        # created by history-comics-produce (optional)
└── comic.png      # website cover; created by history-comics-produce
```

## When to use

Invoke this skill whenever the user asks to:

- Add a new historical story / chengyu / 典故 entry.
- Fill in an empty `story.md`, `story.en.md`, `meta.json`, or `prompt.md`
  scaffold under `content/`.
- Regenerate any of the four files above based on the others.

If the user also asks to **出图 / generate images / produce the comic / run
the full pipeline**, finish this skill first, then continue with
`history-comics-produce`. Do not invent a third image API.

Do **not** use this skill for general code changes in `web/` or `scripts/`.

## Global preferences (read carefully — these are non-negotiable)

- **Audience**: Chinese children aged **4–10**, plus international children
  reading the English version to learn Chinese culture. Language must be
  understandable by a 4-year-old when read aloud, yet substantive enough for
  a 10-year-old.
- **Voice**: Neutral third-person narrator. **Never** use childish framing
  prefixes such as “宝贝”, “爸爸给你讲”, “小朋友们”. **Never** add honorifics
  like “叔叔 / 爷爷 / 奶奶” to historical figures — refer to them by name or
  role (e.g. 晏子、齐景公、丞相).
- **Tone**: Warm but grown-up. Explain philosophy directly, don’t talk down.
- **Length**: Prefer completeness over brevity. Keep the **full** classical
  text and a **full line-by-line 今译**. The child-facing **故事讲述** must
  also cover every plot beat, but as dramatized scenes — not as a second
  copy of the translation.
- **Bilingual by design**: everything the reader sees — narration, dialogue,
  even on-image speech balloons — is delivered in both Chinese and English so
  that Chinese kids pick up English while foreign kids pick up Chinese
  culture.
- **No emojis** in generated content unless the user asks.

---

## Step 1 — `meta.json`

Location: `content/<country>/<period>/<slug>/meta.json`

Before authoring, check the sibling `_meta.json` files to understand the
period/country context, and existing entries in the period to pick a correct
`order` value.

Schema (all fields required unless noted):

```json
{
  "id": "kebab-case-slug",
  "title": "中文标题",
  "titleEn": "English Title",
  "description": "一句话中文简介，说明故事梗概或核心冲突。",
  "descriptionEn": "One-sentence English summary of the story.",
  "order": 1,
  "tags": ["朝代", "国家/人物", "主题"],
  "tagsEn": ["Dynasty", "State/Person", "Theme"],
  "createdAt": "YYYY-MM-DD"
}
```

Notes:
- The example is valid JSON and must remain valid JSON. Explain fields outside
  the code block; never add comments or trailing commas to `meta.json`.
- `id` uses lowercase kebab-case pinyin (e.g. `er-tao-sha-san-shi`). The
  folder name itself may be Chinese if a sibling entry already uses Chinese,
  but the `id` field is always pinyin kebab-case.
- Keep `tags` to 3–4 items covering: dynasty/period, state or key person,
  and the theme (e.g. 计谋、迁都、变法).
- `tagsEn` must be a 1:1 translation of `tags` in the same order.

---

## Step 2 — `story.md` (Chinese)

**Fixed template — do not add or remove sections.**

```markdown
# <中文标题>

## 历史典故

**出处：**
《书名·篇名》

**原文：**
<经典文言原文，务必完整，不要节选。保留原书标点或按通行版本断句。>

**今译：**
<逐句对应原文的现代汉语翻译，覆盖每一句，不跳句、不改写成故事。这是对照
层，不是给孩子朗读的正文。生僻名词用一两个词夹注，如「鼋（巨大的大鳖）」。>

**故事讲述：**
<给 4–10 岁听的叙事。按场景写，不按文言句子写。覆盖原文每一个情节，但把
谏词、政论收成孩子听得懂的对话、动作和停顿。主要人物必须可区分，并至少
有一个让人意外的瞬间。>

## 事件分析

**1. <只适用于本故事的主题>（副标题：一句话点出具体情节）**
<先引用故事讲述里的一句台词或一个动作，再解释道理。3–5 句。禁止写成换一
个典故也能用的万能标题。>

**2. <核心哲理二>（副标题）**
<同上>

**3. <核心哲理三>（副标题）**
<同上>
```

Authoring rules for `story.md`:

0. **故事骨架（只在内部规划，不要写进 `story.md`）**。动笔前先写清这五句：
   - 欲望：每个人物想要什么（面子、安全、秩序、桃子、活命……）。
   - 障碍：什么卡住了他们。
   - 计谋或转折：局面怎么被一只手撬开。
   - 选择：每个主要人物做了哪个不可逆的决定。
   - 结局：为什么这个结局在他们的逻辑里几乎不可避免。
   三位（或更多）同类人物必须各有不同的欲望、本事或声音，不能写成同一个
   「骄傲武将」复制三次。

1. **原文**：使用权威版本的完整原文。如果传世文本较长（如整篇《尚书·盘庚》），
   截取该典故完整叙事段落，但**在段内不可跳句**。若为“节选”须在括号注明。

2. **今译**：
   - 这是对照翻译，不是故事。逐句覆盖原文，包括对话、动作、心理。
   - 可以加“说”“于是”等衔接词，但不要增写原文没有的场面。
   - 化解生僻名词：`鼋` → “巨大的大鳖”；`骖` → “拉车的马”。

3. **故事讲述**（网站上孩子真正读到的正文）：
   - 按场景写，每场有地点、一个具体动作、一件看得见的器物、一种情绪。
   - 覆盖原文每一个情节；政治谏词、长篇自我介绍改写成短对话和动作，不要
     整段搬进故事。
   - 允许补充时代、身份、天气、器物、停顿等气氛，但不要虚构原文没有的情节、
     人物或结局。
   - 对话可以长过画面气泡的 12 字限制。那条限制只约束 `prompt.md`。
   - 必须让主要人物可区分：不同的功劳、口气、身体习惯或怕的东西。
   - 至少写一个意外瞬间或不可逆选择（计谋生效、认输、反悔、沉默）。
   - 篇幅以能让 7 岁孩子复述情节为准，通常 4–8 个短场景，每场 4–8 句。宁
     可写厚，也不要收成梗概。

4. **事件分析**：
   - 默认三条（可 2–4 条），每条用 `**数字. 主题（副标题）**` 起始。
   - 标题必须钉在本故事上。反例：「智慧胜过蛮力」「骄傲会惹祸」——换典故
     也能用。正例：「两个桃子把“勇敢”定义成了必须抢到」。
   - 每条先引用故事讲述里的一句台词或一个动作，再讲可迁移的道理。
   - 每条给一个贴着情节的反事实（如「如果他们把桃子切开」），不要空讲道理。
   - 避免说教口气；不要出现“小朋友”“宝贝”“爸爸”“妈妈”等第二人称呼唤。
   - 可以温和地对历史人物的选择提出反思（如“这真的是勇敢吗？”）。

---

## Step 3 — `story.en.md` (English)

Translate `story.md` into English, preserving structure 1:1:

```markdown
# <English Title>

## The Story

**Source:** <Book·Chapter, italicized book name in English + pinyin>

**Original Text (Classical Chinese):**
<Keep the classical Chinese original verbatim — do NOT translate this block.
Readers who want the source expect to see it.>

**Line-by-line Translation:**
<Modern English that tracks the Chinese 今译 sentence by sentence. This is
the gloss, not the story children hear.>

**Retelling for Young Readers:**
<Scene-by-scene narrative matching the Chinese 故事讲述. Natural modern
English for ages 4–10. Cover every plot beat; do not re-translate the
classical speeches paragraph by paragraph.>

## What We Learn

**1. <Theme One> (short subtitle)**
<Explanation.>

**2. <Theme Two> (short subtitle)**
<Explanation.>

**3. <Theme Three> (short subtitle)**
<Explanation.>
```

English translation rules:
- Translate names using Hanyu Pinyin without tone marks (e.g. Yan Zi, Duke
  Jing of Qi, Gongsun Jie).
- On first mention of a book title use the format
  `*Book of Documents* (Shangshu)` — italic English name, pinyin in parens.
- Keep the classical Chinese “Original Text” block untranslated.
- `Line-by-line Translation` mirrors 今译; `Retelling for Young Readers`
  mirrors 故事讲述. Do not collapse the two English blocks into one.
- The “What We Learn” section must mirror the number and order of the Chinese
  `事件分析` points; do not reorder or merge. Keep the story-specific titles
  and the quoted line or action.
- Match the ages-4-to-10 register — clear, concrete, no idioms that require
  Western cultural context.

---

## Step 4 — `prompt.md` (image generation)

Purpose: prompts for GPT-based image generation tools (GPT-Image / DALL·E)
that will illustrate this comic. Comics **do** need readable speech balloons,
captions, and title cards. All reader-facing text is **bilingual**: Chinese
on top, English below.

**Default production path — complete single-pass prompt.** Every panel's
English Prompt must be self-contained and directly usable in an image model.
It must retain the complete style, period palette, scene, camera, lighting,
character descriptors, actions, prop constraints, bilingual text, typography,
name labels, aspect ratio, and negative prompt. Do not shorten or replace
these details with references to another section. Ask the image model to
render the literal bilingual text, Chinese above English.

Because image models may garble text, an optional `文字覆盖规格` may also be
provided for post-production. This is a fallback, not a replacement: adding
it must never remove literal text or other detail from the directly usable
English Prompt. Generate empty balloons with no glyphs only when the user
explicitly requests a text-free or post-production workflow.

The rest of this section is deliberately mechanical so that even a weaker
model can produce a consistent `prompt.md` from any `story.md`. Follow the
sub-steps 4.1 → 4.5 **in order**.

### 4.1 — Pick the visual style (unified brand + deterministic variation)

The *core art style* (children's manhua, ink-wash, chibi) is unified across the entire project so the comic series feels like a cohesive brand. However, the specific **palette, costumes, and motifs** are strictly derived from the historical period. Read the parent `content/<country>/<period>/_meta.json` to get the period `id`, then look up the row in the table below. Do NOT invent a new style framework per story.

| Period `id`             | Palette (dominant → accent)       | Costume / props hint                                | Motif / background            |
| ----------------------- | --------------------------------- | --------------------------------------------------- | ----------------------------- |
| `shang-zhou`            | bronze + ochre + terracotta       | 青铜时代宽袖交领袍、玉璜、饕餮纹                    | 甲骨纹路、青铜器、黄土城墙    |
| `chunqiu`               | indigo + jade green + cream       | 深衣、玉带钩、发冠、竹简                            | 春秋战车、诸侯宫殿、竹林      |
| `zhanguo`               | crimson + charcoal + gold         | 战国深衣、皮甲、长剑                                | 城郭、烽火台、战鼓            |
| `qin`                   | black + iron gray + red           | 秦式玄衣、束发冠、兵马俑装束                        | 长城、驰道、秦砖              |
| `xi-han` / `dong-han`   | vermilion + jade + gold           | 汉服曲裾直裾、进贤冠、玉佩                          | 未央宫、丝绸之路、汉阙        |
| `wang-mang`             | muted olive + copper              | 新朝仿古礼服                                        | 复古礼制场景                  |
| `san-guo`               | crimson + steel blue + gold       | 三国铠甲、羽扇纶巾、战袍                            | 战场、军帐、山川               |
| `wei-jin-nanbeichao`    | pale celadon + ink black          | 魏晋褒衣博带、麈尾、竹林                            | 隐士山林、清谈之所            |
| `sui` / `tang`          | vermilion + gold + peony pink     | 唐圆领袍、襦裙、幞头                                | 长安坊市、宫阙、丝路          |
| `wudai-shiguo`          | slate blue + copper               | 五代风格圆领袍                                      | 藩镇割据场景                  |
| `song`                  | ink black + pale jade + white     | 宋直裰、幞头、点茶器具                              | 汴京市井、山水画意            |
| `yuan`                  | steppe brown + turquoise + gold   | 元蒙古袍、笠帽、皮靴                                | 草原、驿站、大都               |
| `ming`                  | crimson + royal blue + gold       | 明补子官服、方巾、云肩                              | 紫禁城、青花瓷、明式家具      |
| `qing`                  | imperial yellow + navy + coral    | 清马褂、旗装、翎羽顶戴                              | 紫禁城、江南园林               |
| `modern`                | muted red + sepia + off-white     | 长衫、中山装、旗袍                                  | 民国街景、洋楼、老照片调       |

Universal style anchors, applied to **every** panel regardless of period:

- Base style: `children's picture-book manhua illustration, soft Chinese
  ink-wash accents, chibi (Q-version) proportions, rounded friendly shapes,
  ages 4–10`.
- Line: `clean confident linework, ink outlines, no photorealism`.
- Typography / UI overlay: `Use a consistent, unified typography system across all panels. Speech balloons should use black text on a clean white background. For Chinese characters, use a bold, friendly rounded font (like Source Han Rounded); for English, use a clean comic font (like Comic Neue). Floating name tags should have a consistent semi-transparent dark background with white text.`
- Lighting: `soft even lighting, warm mood`.
- Safety: `no gore, no blood, no scary faces, no modern objects`.

### 4.2 — Decide the panel count (deterministic formula)

Do **not** guess. Compute the count from `story.md` **故事讲述** (not 今译).

**Step A — count story beats.** A *beat* is any of:

1. Change of **location** (they walk to another place).
2. Change of **time** (later that day / next morning / years pass).
3. A **new speaker** starts talking, OR someone answers with a decision that
   changes the situation.
4. A **turning point** (someone acts, discovers something, dies, wins).
5. A visible **emotional shift** in a main character.

Read the vernacular version and identify atomic beats using the five rules.
Then group atomic beats into **core visual beats**: a speaker or emotional
change belongs to the same core beat when it occurs in the same place, time,
and causal action. Give it its own core beat only when a separate image is
needed to understand the cause and effect. Let `C` = number of core visual
beats.

**Step B — apply the count formula.**

```
panels = clamp(C + 2, min = 4, max = 8)
```

The `+2` accounts for the required **opening establishing panel** (see 4.3)
and **closing "moral" panel** (see 4.3). `clamp` keeps the total between 4
and 8 — shorter than 4 loses narrative, longer than 8 exhausts the young
reader’s attention.

**Step C — compression check.** There are at most six middle panels. If
`C > 6`, merge in this order: (1) dialogue and its immediate reaction,
(2) emotion shifts caused by the same visible action, then (3) repeated
location or time transitions. Never merge away an irreversible action,
the cause of the climax, or the result needed for the closing panel. Record
every merge as `core beat X = atomic beats A + B` in `分镜规划`.

Record both the atomic beat list, core-beat grouping, and count at the top of
`prompt.md` in the "分镜规划" block (see template below) so downstream
reviewers can trace every compression decision.

### 4.3 — Required panel roles

Every `prompt.md` must contain these three role-typed panels; the middle
panels fill in the beats.

| # | Role                    | Purpose                                                                          |
| - | ----------------------- | -------------------------------------------------------------------------------- |
| 1 | **Establishing shot**   | Wide shot introducing time, place, main characters. Caption states 时代/地点.    |
| 2..N-1 | **Beat panels**    | One per core visual beat, in chronological order. Each has ≥ 1 dialogue or narration. |
| N | **Moral / closing shot**| Calm, iconic closing image echoing the first `事件分析` point. Caption states 寓意. |

### 4.4 — Cross-panel continuity & Self-Contained Prompts

Weak models tend to redraw characters differently every panel. To prevent this while saving the user from copying text twice, you must generate a **Self-Contained Mega-Prompt** for each panel.

During your internal planning, define the global "Series Bible" (Style anchors, Period palette, Character ID & english descriptors, Speech balloon specs, Negative prompts, Aspect Ratio). **Do NOT output a standalone `## Series Bible` section spanning multiple lines that the user has to manually copy.** Instead, list your planned variables concisely in the `分镜规划` section, and then **inject all global rules and character designs directly into EVERY panel's copyable `English Prompt` block**.

When planning character descriptors for the mega-prompt, specify for **each named character**:

- `id`: short English handle (e.g. `yanzi`, `duke_jing`, `gongsun_jie`).
- 外貌：身高体型（矮胖/瘦长/魁梧）、脸型、发型/发冠、胡须。使用有可靠文化共识
  的标志性形象（例如关羽的红脸、绿袍、长髯）；其他人物按时代、身份和剧情设计
  清晰、可复用、彼此易区分的视觉特征，不把设计选择写成史实。
- 只有当人物身份、性别、时代服饰，或剧情中关键器物存在会影响内容正确性的史实
  争议时，才使用 `AskQuestion` 请用户选择；“没有公认肖像”本身不是暂停理由。
- 服饰：颜色（明确 hex 或色名）、纹样、配饰。
- 标志物：随身道具（如晏子的竹简、古冶子的宝剑）。
- 情绪基调：默认表情（例如晏子=从容微笑；勇士=剑眉怒目）。

Continuity & Comic Dynamism rules to apply in every panel:

1. **Character ID reuse & Color Coding.** Every panel prompt refers to characters by the
   same `id` and repeats their short costume descriptor. **Crucial:** Assign a strict, unique signature color to each character (e.g., Yanzi is ONLY indigo, Gongsun is ONLY russet). Do not let colors overlap between characters.
2. **Palette lock.** Use the same period palette (from 4.1) across all
   panels. Do not switch to a different dominant color unless the beat is
   explicitly night / battle / dream.
3. **Camera & Posing variety (Crucial for Comics).** Vary the camera to keep
   visual interest (`wide → medium → close-up → over-the-shoulder`). More
   importantly, **force dynamic poses and expressive body language**. Do not
   generate stiff characters standing straight. Use action verbs ("leaning in
   aggressively", "slumping in defeat", "pointing an accusing finger").
4. **Visualizing Past Feats (Show, Don't Tell).** When characters boast about past deeds (e.g., killing a tiger, leading an army), do not just rely on the text balloon. Instruct the image prompt to draw **"stylized faint wash-ink silhouettes in the background"** that represent the abstract action/memory visually.
5. **Emotional Depth & Philosophy.** Make the philosophical themes from
“事件分析” visible through clear body language and consequence. For stories
with death, self-harm, execution, torture, or severe injury, show the
aftermath symbolically (lowered or abandoned object, distant silhouette,
empty space, mourning posture, or a cutaway) rather than the act, a weapon
touching a body, or distressing close-ups.
6. **Time-of-day tag.** Every panel prompt ends with a time-of-day tag
   (`morning light` / `noon` / `dusk` / `torch-lit night`). Consecutive
   panels stay within the same tag unless a "time change" beat justifies
   otherwise.
7. **Environment carry-over.** If two panels share a location, reuse the
   same 2–3 background elements literally (e.g. "same jade pillars and
   bronze cauldron as previous panel").
8. **Count-sensitive prop ledger.** Before drafting prompts, identify every
prop whose exact count, identity, or ownership matters to the plot (for
example: the two peaches, one seal, three arrows, or a specific sword).
Record its state panel by panel in `分镜规划`: total count, container or
location, and which character holds it. The state must change only when a
visible story action changes it.
9. **Exact-count constraint in the actual prompt.** A planning note alone
does not constrain an image model. In every panel where a count-sensitive
prop is visible, repeat its complete current state in both the Chinese
description and the copyable English Prompt. State the exact total, each
character's allocation or location, and forbid extras in the tray,
background, decorations, and silhouettes. For example: `Exactly two peaches
exist in the entire image: Gongsun Jie holds exactly one peach and Tian
Kaijiang holds exactly one peach. No tray, no extra peaches, and no peach
decorations anywhere in the scene.`
10. **Prop continuity.** If a prop (the 桃子, the 剑) appears in panel N, it
must be drawn again in panel N+1 while it is still narratively present. For
count-sensitive props, carry forward the ledger state rather than asking the
model to infer it.

### 4.5 — Template

```markdown
# <中文标题> - 漫画生成提示词

## 分镜规划（追溯用，不进画面）

- 从故事讲述识别出的原子 beats（共 B 条）：
  1. <atomic beat 1: 位置/时间/说话人/转折/情绪 的哪一类>
  2. <atomic beat 2 ...>
- 核心视觉 beats（共 C 条；注明合并关系）：
  1. <core beat 1 = atomic beat 1 + 2，或 atomic beat 1>
- 计算：panels = clamp(C + 2, 4, 8) = <N>
- 分配：panel 1 = 建立镜头；panel N = 收尾寓意镜头；其余按序对应 beats。
- 全局设定记录（内部参考，供排版时直接合并进各分镜Prompt）：
  - 定调：children's picture-book manhua illustration, soft Chinese ink-wash accents, chibi proportions, clean ink linework, ages 4–10. Aspect Ratio: 16:9. Negative: no gore, no realistic weapon wounds, no scary faces, no modern objects, no gibberish letters.
  - 色板：<从 4.1 表格里查到的调色板>
  - 登场角色（包含中文名与英语描述）：
    - yanzi (晏子): short plump elder Yan Zi, white beard, signature indigo hanfu robe, jade belt hook, holding bamboo scrolls
    - ...
  - 计数道具状态表（仅列出数量或归属影响剧情的道具）：
    - 桃子：panel 3 = 木盘内恰好 2 个；panel 4 = 公孙接手中恰好 1 个、田开疆手中恰好 1 个、画面总数恰好 2 个；panel 6 = 地上恰好 2 个。

## 分镜列表

### 分镜 1 — 建立镜头：<场景中文名>
**Beat 类型：** establishing
**镜头：** wide shot
**时间光线：** morning light
**中文描述：** <发生的事、镜头焦点、人物、环境。>

**对白 / 旁白（将在画面中出现，双语）：**
- 旁白：
  - 中文：<≤ 12 字，交代时代/地点>
  - English: <≤ 12 words>

**English Prompt (Copy below):**
```text
[Global Style] children's picture-book manhua illustration, soft Chinese ink-wash accents, chibi proportions, clean ink linework, ages 4–10. Period palette: <从全局设定复制的色板>. Aspect Ratio: 16:9. Negative: no gore, no realistic weapon wounds, no scary faces, no modern objects, no gibberish letters.

[Scene Selection] A wide establishing shot of <scene>, morning light. <如果与上一镜同地点，必须复用相同背景词；如有计数道具，写出总数、位置、归属，以及禁止额外道具的限制。>

[Characters Present]
- [<中文名>] <只列出登场角色的完整英语描述> doing <动态姿势与神态>.

[Text & Composition] Include a rectangular caption box at the top with two lines of text: Chinese "<中文旁白>" on top (Source Han Rounded, larger) and English "<English narration>" below in smaller font (Comic Neue). Add literal bilingual name labels only where needed, specifying every label as "<中文名> / <English name>". IT IS CRITICAL that both Chinese characters and English words are rendered EXACTLY as provided. All glyphs must be legible and correct — no gibberish.
```

---

### 分镜 2 — <场景中文名>
**Beat 类型：** <location-change / new-speaker / turning-point / emotion-shift>
**镜头：** <medium / close-up / over-the-shoulder / wide>
**时间光线：** <same as previous unless beat says otherwise>
**中文描述：** …

**对白 / 旁白（双语）：**
- 说话人 `<character id>`：
  - 中文：<≤ 12 字>
  - English: <≤ 12 words>

**English Prompt (Copy below):**
```text
[Global Style] children's picture-book manhua illustration, soft Chinese ink-wash accents, chibi proportions... <与第一镜完全一致的全局设定文字>.

[Scene Selection] <camera shot> of <scene>, <time of day>. <如有计数道具，写出该镜的总数、位置、归属，以及 “no extra … anywhere in the image” 的禁止项。>

[Characters Present]
- [<中文名>] <只列出当前分镜对应角色的完整英语描述> doing <极具张力的身体语言>.

[Text & Composition] Include a rounded speech balloon from <character id> containing two lines of text: Chinese "<中文台词>" on top (Source Han Rounded) and English "<English line>" below in smaller font (Comic Neue). Add literal bilingual name labels only where needed, specifying every label as "<中文名> / <English name>". IT IS CRITICAL that both Chinese characters and English words are rendered EXACTLY as provided. All glyphs must be legible and correct — no gibberish.
```

---

### 分镜 N — 收尾寓意镜头：<场景中文名>
（同上，但 Beat 类型 = closing，镜头通常回到 wide，caption 用来点出寓意。）
```

### 4.6 — Authoring rules (summary)
- Each scene has a Chinese planning note, bilingual `对白 / 旁白`, and a
  complete, directly usable English Prompt. An optional bilingual
  `文字覆盖规格` may duplicate the text for post-production, but must never
  replace or simplify the English Prompt.
- Keep on-image text short (rule of thumb: ≤ 12 Chinese characters / 12
  English words per balloon). This limit applies only to `prompt.md` balloons
  and captions, never to 故事讲述.
- **Name Tags.** When labels are needed to distinguish simultaneously present
  characters, spell out each exact literal label in the English Prompt, for
  example `"晏子 / Yan Zi"`. Do not merely ask for “Chinese and English
  names” and expect the model to infer spelling.
- **Visual Storytelling > Dialogue.** Represent abstract history feats via background silhouettes, and translate philosophical shifts into intense character body language (slumping, crying).
- **Age-appropriate difficult events.** Do not include gore, blood, weapon
  contact with a body, self-harm acts, executions, torture, corpses, or
  frightening close-ups. For dark events, use a cutaway or symbolic aftermath
  (e.g. `刎颈` → lowered sword, empty space, and sorrowful posture).
- Respect period costume: 春秋战国 = 深衣、玉带钩; 商周 = 青铜时代衣饰; etc.
- For every count-sensitive prop, include its ledger state as a separate,
  explicit English sentence. State the exact total, each character's
  allocation or location, and forbid extras in the tray, background,
  decorations, and silhouettes.

---

## Full workflow (default order)

When the user asks to “generate the entry” for a given story, walk the
pipeline in order and confirm nothing was skipped:

0. **Human-in-the-Loop Principle**: Use `AskQuestion` when a material
   uncertainty changes historical correctness: the period, identity, gender,
   key costume, key artifact, or choice among genuinely conflicting canonical
   texts. For ordinary visual design where no historical fact is claimed,
   apply the character-design rules without interrupting the workflow.

1. **Resolve directory & read context**: Use your world knowledge to determine
   the correct historical `<period>` (e.g., Jing Ke -> `zhanguo`). If ambiguous,
   ask the user. `list_dir` on `content/<country>/<period>/` to see what
   already exists; read the parent `_meta.json` files for context.
2. **meta.json** — create or verify. Auto-calculate `order` by finding the
   maximum `order` among existing sibling entries and adding 1. Do not ask the
   user unless there is a conflict.
3. **story.md** — apply Step 2 template. First lock the internal story spine
   (desire / obstacle / turn / choice / ending) and distinct character voices.
   Treat a classical passage as exact only after verifying it against a
   provided source, an existing project source, or a reliable accessible
   edition. Record the book and chapter in `出处`. Write **今译** as a gloss
   and **故事讲述** as the child-facing scenes. If verification is
   unavailable, do not reconstruct an “exact” original from memory: ask the
   user for a source or permission to use a clearly labeled modern retelling.
   If multiple authoritative versions materially differ, use `AskQuestion` to
   let the user choose. Fill in-place if the file exists.
4. **story.en.md** — translate from the finalized `story.md`, following
   Step 3.
5. **prompt.md** — derive scenes from `story.md`, following Step 4:
   1. **4.1** — look up period → palette + costume + motif (no free choice).
   2. **4.2** — identify atomic beats from **故事讲述**, group them into core
      visual beats `C`, compute `panels = clamp(C + 2, 4, 8)`, and log all
      merges in `分镜规划`. Prefer beats that change a desire, a choice, or
      the state of a count-sensitive prop. If dialogue exceeds the on-image
      12-character limit, use additional bubbles in the same core beat;
      split into a new panel only when that still fits the 4–8 panel cap.
   3. **4.3** — reserve panel 1 (establishing) and panel N (closing/moral);
      allocate the middle panels to core visual beats in chronological order.
   4. **4.4** — record a concise global-setting reference in `分镜规划`
      (characters, palette, typography, negatives); do not create a separate
      copyable Series Bible. Repeat the complete required design and literal
      text constraints inside every self-contained English Prompt.
   5. **4.5** — write each panel using the template, repeating the
      character English descriptors and period palette **verbatim** in
      every English prompt.

6. **Images (only when asked)** — do not generate pixels in this skill.
   Hand off to `history-comics-produce`, which drives `topview-generate`
   and writes `images/0N.png`, `images/manifest.json`, and `comic.png`.

After each file is written, briefly report what was created/updated with a
markdown link, and move on. Do not ask for confirmation between steps unless
the user's intent is ambiguous.

## Final validation checklist

Before handing off a generated or regenerated entry, verify:

- `meta.json` parses as JSON; its `id`, titles, tags, and dates are complete.
- The Chinese original has a verified source; `story.md` has both 今译 and
  故事讲述; `story.en.md` keeps the original-text block and mirrors 今译,
  故事讲述, and every `事件分析` item in the same order.
- A 7-year-old could retell the plot from 故事讲述 alone. Main characters
  are distinguishable. There is at least one surprise or irreversible choice.
- Each 事件分析 title is story-specific and quotes a line or action from
  故事讲述.
- The beat plan logs atomic beats, core-beat merges, and a panel count between
  4 and 8; each core beat has a chronological panel.
- Every panel has literal Chinese and English dialogue or narration inside its
  complete English Prompt; any optional overlay specification matches it
  exactly.
- Character descriptions, palette, time, environment, and count-sensitive
  prop states are continuous across adjacent panels.
- No panel violates the age-appropriate difficult-events rule.
- Existing entries are not assumed to meet this specification. Apply the
  current format to newly created or explicitly regenerated `prompt.md`
  files; migrate legacy prompts only when the user requests it.

## Anti-patterns (do not do these)

- ❌ Adding "宝贝" / "爸爸" / "小朋友" prefixes to analysis paragraphs.
- ❌ Calling historical figures 叔叔 / 爷爷 / 奶奶.
- ❌ Truncating 原文 to a short excerpt when the full passage is short
  enough to include.
- ❌ Calling a passage “exact” or “canonical” when it has not been verified
  against a source.
- ❌ Using 故事讲述 as a second sentence-by-sentence translation of the
  classical text.
- ❌ Summarizing 今译 or 故事讲述 so that whole plot beats disappear.
- ❌ Writing three interchangeable heroes (same boast, same pose, same fear).
- ❌ Event-analysis titles that would fit any other chengyu, or analysis
  that never quotes a line or action from 故事讲述.
- ❌ Merging or reordering the philosophy points between Chinese and English
  versions.
- ❌ Replacing a complete English Prompt with a shortened art-only prompt or
  references to global settings elsewhere in the file.
- ❌ Asking for generic bilingual labels without providing their exact literal
  Chinese and English text.
- ❌ Using emojis in `story.md` / `story.en.md` / `prompt.md` output.
- ❌ Inventing a fresh visual style per story — the style is fixed by the
  period lookup table in 4.1.
- ❌ Guessing the panel count — always derive it from 故事讲述 via the
  beat-counting formula in 4.2 and log the beats in the 分镜规划 block.
- ❌ Introducing a new physical descriptor for a character mid-story — every
  panel prompt must copy the character’s English descriptor from the Series
  Bible verbatim.
- ❌ Presenting a convenient visual design choice as a confirmed historical
  fact.
- ❌ Switching palette, costume, or hair between panels without an in-story
  reason (day/night, disguise, time skip).
- ❌ Skipping the establishing (panel 1) or closing/moral (panel N) panel.
- ❌ Depicting self-harm, execution, weapon-to-body contact, or a corpse to
  communicate a tragic event to this age group.

