# Story Cover

小说封面生成与提示词设计。根据书名、作者名和题材构建封面提示词；用户只要提示词时不生图，要求封面图时调用 GPT-Image-2，Codex CLI 优先使用内置...

- Repository: https://github.com/zenstory-ai/oh-story-claudecode (8225 stars)
- Category: Media
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -g -a claude-code -y`
Codex: `npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -g -a codex -y`
Cursor: `npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -g -a cursor -y`
Gemini CLI: `npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add zenstory-ai/oh-story-claudecode`

## Description

小说封面生成与提示词设计。根据书名、作者名和题材构建封面提示词；用户只要提示词时不生图，要求封面图时调用 GPT-Image-2，Codex CLI 优先使用内置 ImageGen。触发方式：/story-cover、/封面、「帮我做个封面」「生成封面图」「封面提示词」「封面设计」。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# story-cover：小说封面生成

根据书名和题材生成包含书名、笔名的完整封面，让读者一眼看出题材和氛围。

**仅提示词模式**：用户只要提示词，或 `story-publish` 选了仅提示词时，只做 Step 1-3，交付完整提示词，不需要生图工具、API Key 或输出目录；要封面图才继续 Step 4-6。由 `story-publish` 调用时，它传来的已确认书名、简介、笔名、平台和题材不再重问；结束时返回完整提示词原文，生图成功再附图片路径和质量检查结果，失败就说明原因。

---

## 生成通路

- **Codex 内置（优先）**：当前 Codex CLI 会话可调用 `$imagegen` / `image_gen` 时，直接调用工具生成并保存，无需 `OPENAI_API_KEY` 或 `GPT_IMAGE_API_KEY`，不运行 `curl`。
- **API 回退**：仅在会话没有内置工具或用户明确指定 API 时使用，需要 `GPT_IMAGE_API_KEY`；环境变量和命令在 [references/api-fallback.md](references/api-fallback.md)，走这条通路时再读。工具缺失不等于 Codex 订阅不支持生图；内置调用失败时先报告错误，不静默切换到可能收费的 API。

## 生成流程

### Step 1：收集信息

先找当前书：项目根 `.active-book` 指向项目内现有目录时就是当前书；否则从项目根往下最多 4 层找（跳过 `.` 开头的目录、`node_modules`、`拆文库/`、`对标/`），含 `追踪/`、`正文/`、`设定/` 子目录或 `正文.md`、`设定.md` 文件的是书目录，找到多本时请作者选择。有 `正文/` 或 `设定/` 子目录的是长篇，有 `正文.md` 或 `设定.md` 的是短篇。找到后读：

- 长篇：`设定/题材定位.md`「基本信息」的书名、题材类型、目标平台、核心梗；
- 短篇：`设定.md`「基本信息」的标题、目标平台、目标情绪，以及「一句话梗概」「题材招式」。

已有或调用方传入的已确认字段不再问；笔名没有明确提供时才问。没有书目录或缺项时，用宿主可用的提问方式一次问齐缺少的书名、笔名、目标平台。

> **书名和笔名是封面必需信息**：缺任一时先请作者补全，不得编造或留空。

选填：参考图 `REF_IMAGE`（本地路径或 URL）、风格偏好；参考图的用法见 Step 4。

**保存位置**：有书目录时存到 `{书目录}/封面/`，不用问；没有书目录时用 `./covers/{书名}/封面/`。下文 `BOOK_DIR` 指 `封面/` 的上一层。

**按目标平台定比例和上传尺寸**：番茄上传 600×800，比例 **3:4**，出图比例不符时平台再次裁剪可能切掉书名或笔名；其他平台按竖版 2:3 交付，作者给出平台上传像素时按该尺寸导出。各平台的画风关键词见 [references/cover-styles.md](references/cover-styles.md)「平台风格」。

### Step 2：题材判定

在 [references/cover-styles.md](references/cover-styles.md) 的「风格库」里选一个题材：

仅提示词模式没有题材依据时先问作者，不用下面第 2 条的「都市」兜底。

1. 有「题材类型」（长篇）或梗概、题材招式（短篇）时，按内容选风格库中最接近的一节。
2. 没有，或对不上风格库任何一节（如年代、种田、无限流、电竞）时，用书名（必要时简介）对照「题材推断规则」：只命中一个题材就用它；命中多个按该表下方的优先级取一；都没命中先用「都市」。
3. 第 2 条推断出的题材，在 Step 4 给作者看方案时一并说出来，作者可以改。

### Step 3：构建提示词

提示词 = **文字层** + **风格层** + **画面层**。设计指令用英文，书名和笔名保留作者提供的原文。所选题材的字体、标签、色彩、人物、背景、光效都在「风格库」同一节里查。

**文字层**：GPT-Image-2 可直接渲染中文。书名在上方居中，用该题材的书名字体；笔名在下方居中，用该题材的笔名字体。笔名要和书名风格呼应、清晰可读而不抢焦点：

- 大小用 `small`；位置 `at bottom center`，与画面底部留出间距；
- 必须带一种装饰：线条、边框、小图标或光效；
- 颜色与背景形成对比但不刺眼。

The rest: https://github.com/zenstory-ai/oh-story-claudecode/blob/HEAD/skills/story-cover/SKILL.md
