Zy Cinematic Realism
popopo-99/zy-cinematic-realism
Develop supplied scripts, short stories, or synopses into scene understanding, director-facing art concepts, and motivated narrative keyframes; compile scene ideas, visual references, or existing…
Generates a finished web novel cover with title and author name from a book title, inferring genre style and sizing the image for the target platform.
SKILL.md written in Chinese; this summary is our English description.
$ npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install zenstory-ai/oh-story-claudecode story-cover --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/zenstory-ai/oh-story-claudecode.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/story-cover .claude/skills/story-cover && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "story-cover" agent skill from https://github.com/zenstory-ai/oh-story-claudecode/tree/main/skills/story-cover into .claude/skills/story-cover/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-cover", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/zenstory-ai/oh-story-claudecode/tree/main/skills/story-coverType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install zenstory-ai/oh-story-claudecode story-cover --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zenstory-ai/oh-story-claudecode.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/story-cover .agents/skills/story-cover && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "story-cover" agent skill from https://github.com/zenstory-ai/oh-story-claudecode/tree/main/skills/story-cover into .agents/skills/story-cover/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-cover", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install zenstory-ai/oh-story-claudecode story-cover --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zenstory-ai/oh-story-claudecode.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/story-cover .cursor/skills/story-cover && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "story-cover" agent skill from https://github.com/zenstory-ai/oh-story-claudecode/tree/main/skills/story-cover into .cursor/skills/story-cover/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-cover", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/zenstory-ai/oh-story-claudecode.git --path skills/story-cover--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install zenstory-ai/oh-story-claudecode story-cover --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zenstory-ai/oh-story-claudecode.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/story-cover .gemini/skills/story-cover && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "story-cover" agent skill from https://github.com/zenstory-ai/oh-story-claudecode/tree/main/skills/story-cover into .gemini/skills/story-cover/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-cover", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install zenstory-ai/oh-story-claudecode story-coverInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/zenstory-ai/oh-story-claudecode.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/story-cover .github/skills/story-cover && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "story-cover" agent skill from https://github.com/zenstory-ai/oh-story-claudecode/tree/main/skills/story-cover into .github/skills/story-cover/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-cover", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install zenstory-ai/oh-story-claudecode story-cover --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zenstory-ai/oh-story-claudecode.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/story-cover .opencode/skills/story-cover && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "story-cover" agent skill from https://github.com/zenstory-ai/oh-story-claudecode/tree/main/skills/story-cover into .opencode/skills/story-cover/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-cover", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
story-coverGenerates a finished web novel cover with title and author name from a book title, inferring genre style and sizing the image for the target platform.
A book title and a pen name are the starting point, and the skill is written in Chinese. The agent collects the title, pen name, target platform and an output folder, works out the genre from keywords in the title using a rules table in references/cover-styles.md, then asks GPT-Image-2 for a complete cover with the title and author name rendered on it. A missing title or pen name is asked for, never invented.
Image generation uses the built-in image tool of a Codex CLI session when one is available, which needs no separate API key. An API fallback is used only when no built-in tool exists or you ask for it, and it needs GPT_IMAGE_API_KEY; the base URL, model, size, upload size, output folder and reference image are set through environment variables. A failed built-in call is reported rather than silently switching to a possibly paid API.
Prompts are written in English from three layers: text, style and scene. Genre priority runs from xianxia and Western fantasy through ancient and modern romance, urban, suspense and sci-fi to history, supernatural and light novel, with urban as the default when nothing matches. The Tomato Novel upload size is 600 by 800 at 3:4, other platforms default to 2:3, and an export step centers, crops and resizes to the platform's upload size because many proxies ignore the requested size.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2cf7be6. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
jqcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.openai.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GPT_IMAGE_API_KEYOPENAI_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Web Novel Cover Generator loads about 2.9k tokens when it runs, and up to ~5.1k if it reads all its reference files. Until then it costs about 40 tokens; SKILL.md has 568 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from zenstory-ai/oh-story-claudecode at commit 2cf7be6, republished under its MIT licence (© zenstory-ai). 568 words, ~2,862 tokens.
.claude/skills/story-cover/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.你是小说封面设计师。根据书名和题材,调用 GPT-Image-2 一次性生成包含书名和作者名的完整封面。
核心原则:封面是读者的第一印象,一眼传达题材和氛围。
$imagegen / image_gen 时,直接生成并落盘;计入 Codex 通用用量,无需 OPENAI_API_KEY 或 GPT_IMAGE_API_KEY,也不运行 curl。story-cover 自行调用工具,不让用户另开命令。GPT_IMAGE_API_KEY。工具缺失不等于 Codex 订阅不支持生图;内置调用失败时先报告错误,不静默切换到可能收费的 API。| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
GPT_IMAGE_API_KEY | API 回退必填 | — | OpenAI 或兼容代理的 API Key;Codex 内置通路不用 |
GPT_IMAGE_BASE_URL | https://api.openai.com/v1 | 兼容代理时改这个 | |
GPT_IMAGE_MODEL | gpt-image-2 | 仅在测试新模型时覆盖 | |
GPT_IMAGE_SIZE | 1024x1536 | API 回退的目标比例提示(番茄 3:4→768x1024,默认 2:3→1024x1536)。官方 gpt-image-2 认任意 16 倍数尺寸(比例≤3:1),但很多中转代理会忽略 size、按预设返回约 2:3(已实测)——平台尺寸不靠它,由「导出平台上传尺寸」步骤兜底 | |
UPLOAD_SIZE | — | 平台固定上传像素(番茄 600x800);设置后由「导出平台上传尺寸」步骤居中裁剪+缩放出上传版(不变形、不依赖出图尺寸) | |
BOOK_DIR | ✅ | — | 输出目录,建议 ./covers/<书名> |
REF_IMAGE | — | 参考图本地路径或 URL;内置通路先把图片载入会话,API 回退走 images/edits 图生图 |
必填:书名、作者名(笔名)、目标平台、输出目录 BOOK_DIR(建议 ./covers/<书名>;API 回退用环境变量,内置通路直接使用当前任务值)。问作者时说「封面存在哪?默认 ./covers/<书名>」,不把变量名当问题抛给作者
选填:参考图 REF_IMAGE(本地路径或 URL,设置后切换到图生图)、风格偏好、尺寸
书名和笔名是封面必需信息:缺任一必须先用 AskUserQuestion 问用户补全,不得编造或留空。
按目标平台定封面尺寸:番茄上传 600×800 是 3:4(不是 2:3),出图比例不对、平台二次裁剪就会切掉书名/笔名。
| 平台 | 上传尺寸 | 比例 | 生成 GPT_IMAGE_SIZE(尽量) |
|---|---|---|---|
| 番茄小说 | 600×800 | 3:4 | 768x1024 |
| 其他平台(默认竖版) | 按平台规格 | 2:3 | 1024x1536 |
内置通路把目标比例写进提示词;API 回退再 export GPT_IMAGE_SIZE(很多代理会忽略、返回约 2:3)。平台有固定上传像素时设置 UPLOAD_SIZE(番茄 600x800)。平台尺寸最终由「导出平台上传尺寸」步骤居中裁剪+缩放保证,不依赖实际出图尺寸。 平台与题材风格见 references/cover-styles.md。
扫描书名(必要时简介)中的关键词,对照 references/cover-styles.md 的「题材推断规则」表选定题材。
都市提示词 = 文字层 + 风格层 + 画面层,全部用英文编写。
在提示词中直接包含中文书名和作者名,GPT-Image-2 可直接渲染。重点描述字体风格:
Title text '书名' at top center in [书名字体风格].
Author name '作者名' at bottom center in [作者名字体风格].| 题材 | 描述关键词 |
|---|---|
| 玄幻/仙侠 | bold golden brush calligraphy with metallic glow and sharp strokes |
| 都市 | modern bold sans-serif with metallic silver finish |
| 古言/宫斗 | elegant golden traditional Kai script with ornate decoration |
| 现言/甜宠 | soft rounded handwritten style in white with pink glow |
| 悬疑/推理 | distorted bold cracked letters in blood red |
| 科幻/末世 | neon glowing futuristic font in electric blue |
| 西幻 | metallic embossed fantasy lettering with glow effect |
| 历史/军事 | heavy stone-carved seal script in deep red |
| 灵异/恐怖 | eerie dripping handwritten font in sickly green |
| 轻小说 | colorful cartoon outlined bubbly font |
作者名虽小,但是封面专业感的关键。必须指定:字体 + 颜色 + 装饰元素,让作者名与书名风格呼应但不抢焦点。
| 题材 | 作者名风格提示词 |
|---|---|
| 玄幻/仙侠 | small refined white serif text with faint golden glow, flanked by delicate cloud-scroll ornaments on both sides, resting on a thin horizontal gold line |
| 都市 | small clean white modern text with subtle drop shadow, positioned above a thin silver horizontal divider line |
| 古言/宫斗 | small elegant dark red traditional text inside a thin golden rectangular border frame with corner decorations |
| 现言/甜宠 | small soft pink-white handwritten text with a tiny heart motif on the left side, light sparkle effect |
| 悬疑/推理 | small pale grey text with slight blur effect, almost hidden in the shadows, a thin cracked line underneath |
| 科幻/末世 | small crisp white monospace text with subtle cyan scanline overlay, flanked by small geometric brackets |
| 西幻 | small bronze medieval script text with aged parchment texture, enclosed in a small decorative shield or banner shape |
| 历史/军事 | small dignified white Song typeface text above a double horizontal line in dark red |
| 灵异/恐怖 | small faded grey-green text slightly tilted, with a thin dripping ink line above |
| 轻小说 | small playful rounded white text with pastel color outline, tiny star decorations on both sides |
作者名通用规则:
small(不能太大抢书名焦点,也不能太小看不清)at bottom center,与画面底部保持适当间距平台风格的描述关键词统一来自 references/cover-styles.md 的「平台风格」节,按目标平台直接取对应关键词串使用,不在本文件维护副本以免与参考文件漂移。
从 references/cover-styles.md 读取题材对应的风格标签、色彩、人物、背景描述。
构图变体(首次输出 2-3 个方案):
| 方案 | 构图 | 适合题材 |
|---|---|---|
| A | 人物特写 + 场景 | 全题材通用 |
| B | 全身像 + 动态姿势 | 玄幻、都市、西幻 |
| C | 纯场景/氛围图 | 悬疑、科幻、历史 |
Chinese web novel cover design, [平台风格].
Title text '{书名}' at top center in [书名字体风格].
Author name '{作者名}' at bottom center in [作者名字体风格 — 从上表选择].
[题材风格标签]. [人物描述]. [背景描述].
[色彩指令]. [光效指令].
Professional book cover, high detail digital painting, portrait [平台比例:番茄=3:4,默认=2:3] ratio, keep title and author name inside the central safe area away from edges (inner ~85%), no watermarkdramatic golden light from above)digital painting style 而非 photo,避免真人照片感image_gen。比例和安全区写进提示词,不传 GPT_IMAGE_MODEL、GPT_IMAGE_SIZE、response_format 等 API 参数。REF_IMAGE 时,本地文件先用图片查看工具载入会话;URL 先下载再载入。说明它是编辑目标还是风格参考,并列出必须保持的内容。BOOK_DIR/封面/,再把工具返回的图片复制为 封面_vN.png,N 自增且不覆盖旧版;保留 $CODEX_HOME/generated_images/ 原文件,同时保存同名 .prompt.txt,有参考图再保存 .ref.txt。确认图片可读,并把原图绝对路径交给 Step 5。gpt-image-2 始终返回 base64,请求体不要带 response_format(旧 DALL-E 参数,gpt-image 系列不支持)。$PROMPT 为「构建提示词」步骤拼出的完整提示词。
两种调用方式二选一:未设置 REF_IMAGE → 走「文生图」;设置了 → 走「图生图」。
set -euo pipefail
: "${GPT_IMAGE_API_KEY:?请设置 export GPT_IMAGE_API_KEY=你的key}"
: "${PROMPT:?请先 export PROMPT=构建提示词步骤拼好的完整提示词}"
BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}"
MODEL="${GPT_IMAGE_MODEL:-gpt-image-2}"
SIZE="${GPT_IMAGE_SIZE:-1024x1536}"
BOOK_DIR="${BOOK_DIR:?请先 export BOOK_DIR=./covers/<书名>}"
mkdir -p "$BOOK_DIR/封面"
# 自增版本号,避免覆盖之前生成的封面
i=1
while [ -f "$BOOK_DIR/封面/封面_v${i}.png" ]; do i=$((i+1)); done
OUT="$BOOK_DIR/封面/封面_v${i}.png"
RESP=$(mktemp)
trap 'rm -f "$RESP"' EXIT
# 用 jq 拼 JSON 体,避免 PROMPT 里的引号/换行/中文把 shell 字符串撑破
BODY=$(jq -n \
--arg m "$MODEL" \
--arg p "$PROMPT" \
--arg s "$SIZE" \
'{model:$m, prompt:$p, size:$s}')
curl -fsS --max-time 180 --retry 2 --retry-delay 5 \
"$BASE_URL/images/generations" \
-H "Authorization: Bearer $GPT_IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d "$BODY" > "$RESP"
# API 出错时早退,避免把 error JSON 当成 base64 写成损坏 PNG
if jq -e '.error' "$RESP" >/dev/null 2>&1; then
echo "API error:" >&2
jq '.error' "$RESP" >&2
exit 1
fi
# `// empty` 让缺失字段输出空串而非 "null",配合下面的 -s 检查避免写出 3 字节假 PNG
jq -er '.data[0].b64_json // empty' "$RESP" | base64 --decode > "$OUT"
[ -s "$OUT" ] || { echo "empty or malformed output: $OUT" >&2; head -c 300 "$RESP" >&2; exit 1; }
# 落地提示词副本,方便迭代时基于上一次微调
printf '%s\n' "$PROMPT" > "${OUT%.png}.prompt.txt"
file "$OUT"
ls -lt "$BOOK_DIR/封面/"/v1/images/edits 走 multipart/form-data,不能 用 Content-Type: application/json。文本字段用 --form-string(避免 @ 被误判为文件引用),图片字段用 -F image=@path。
set -euo pipefail
: "${GPT_IMAGE_API_KEY:?请设置 export GPT_IMAGE_API_KEY=你的key}"
: "${PROMPT:?请先 export PROMPT=构建提示词步骤拼好的完整提示词}"
BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}"
MODEL="${GPT_IMAGE_MODEL:-gpt-image-2}"
SIZE="${GPT_IMAGE_SIZE:-1024x1536}"
BOOK_DIR="${BOOK_DIR:?请先 export BOOK_DIR=./covers/<书名>}"
REF_IMAGE="${REF_IMAGE:?请先 export REF_IMAGE=本地路径或 URL}"
mkdir -p "$BOOK_DIR/封面"
# 自增版本号
i=1
while [ -f "$BOOK_DIR/封面/封面_v${i}.png" ]; do i=$((i+1)); done
OUT="$BOOK_DIR/封面/封面_v${i}.png"
RESP=$(mktemp)
REF_TMP=""
trap '[ -n "$REF_TMP" ] && rm -f "$REF_TMP"; rm -f "$RESP"' EXIT
# URL 先下载到临时文件,本地路径直接用。用裸 mktemp 以保证 macOS/Linux 行为一致。
case "$REF_IMAGE" in
http://*|https://*)
REF_TMP=$(mktemp)
curl -fsSL --max-time 60 -o "$REF_TMP" "$REF_IMAGE"
REF_LOCAL="$REF_TMP"
;;
*)
[ -f "$REF_IMAGE" ] || { echo "参考图不存在: $REF_IMAGE" >&2; exit 1; }
REF_LOCAL="$REF_IMAGE"
;;
esac
curl -fsS --max-time 240 --retry 2 --retry-delay 5 \
"$BASE_URL/images/edits" \
-H "Authorization: Bearer $GPT_IMAGE_API_KEY" \
--form-string "model=$MODEL" \
--form-string "size=$SIZE" \
--form-string "prompt=$PROMPT" \
-F "image=@$REF_LOCAL" > "$RESP"
if jq -e '.error' "$RESP" >/dev/null 2>&1; then
echo "API error:" >&2
jq '.error' "$RESP" >&2
exit 1
fi
# `// empty` 让缺失字段输出空串而非 "null",配合 -s 检查避免写出 3 字节假 PNG
jq -er '.data[0].b64_json // empty' "$RESP" | base64 --decode > "$OUT"
[ -s "$OUT" ] || { echo "empty or malformed output: $OUT" >&2; head -c 300 "$RESP" >&2; exit 1; }
printf '%s\n' "$PROMPT" > "${OUT%.png}.prompt.txt"
printf '%s\n' "$REF_IMAGE" > "${OUT%.png}.ref.txt"
file "$OUT"
ls -lt "$BOOK_DIR/封面/"平台有固定上传像素(番茄 600×800)时,把原图居中裁剪+缩放成上传尺寸——不论出图是 2:3 还是 3:4 都裁成平台精确像素,不变形,避免平台再裁切掉书名/笔名。原图保留、另存 _上传 版;SRC 和 TARGET 直接使用前序步骤的任务值,不依赖跨 shell 的临时变量:
SRC='<Step 4 生成的原图绝对路径>'
TARGET='<Step 1 确定的平台上传尺寸;无则留空>'
[ -f "$SRC" ] || { echo "封面原图不存在: $SRC" >&2; exit 1; }
if [ -n "$TARGET" ] && [ -f "$SRC" ]; then
UP="${SRC%.png}_上传.png"; W="${TARGET%x*}"; H="${TARGET#*x}"
if command -v magick >/dev/null 2>&1; then M=magick
elif command -v convert >/dev/null 2>&1; then M=convert; else M=""; fi
if [ -n "$M" ]; then
"$M" "$SRC" -resize "${W}x${H}^" -gravity center -extent "${W}x${H}" "$UP" # 缩放填满后居中裁
elif command -v sips >/dev/null 2>&1; then
cp "$SRC" "$UP"
sw=$(sips -g pixelWidth "$UP" | awk '/pixelWidth/{print $NF}')
sh=$(sips -g pixelHeight "$UP" | awk '/pixelHeight/{print $NF}')
if [ $((sw*H)) -ge $((sh*W)) ]; then sips --resampleHeight "$H" "$UP" >/dev/null
else sips --resampleWidth "$W" "$UP" >/dev/null; fi
sips -c "$H" "$W" "$UP" >/dev/null # sips -c 是 高 宽,居中裁
else
echo "无 magick/convert/sips,跳过;手动把 $SRC 居中裁剪+缩放到 $TARGET 再上传" >&2
fi
[ -f "$UP" ] && file "$UP"
fi书名/笔名已在提示词里留中心安全区,居中裁剪不会切到。
| 检查项 | 标准 |
|---|---|
| 文字渲染 | 书名清晰可辨,字体风格匹配题材 |
| 题材匹配 | 视觉风格与书名题材一致 |
| 构图合理 | 主体突出,文字不遮挡核心画面 |
| 平台适配 | 符合目标平台的封面风格调性 |
| 平台尺寸 | 比例与平台一致;缩放到上传尺寸后书名、笔名完整可见、未被裁切 |
不满意时调整方向:更换构图、调整色调、换字体风格、换平台风格。
交付时这样告诉作者;命令、环境变量和接口报错不贴给作者,失败时用一句话说原因和办法(如「生图接口没配好,需要先设置 API Key」):
<!-- author-report -->
封面做好了:`{封面图路径}`{;{平台}上传版({上传尺寸}):`{上传版路径}`}
这版的思路:{构图 + 色调 + 书名字体,一句话}
想调的话可以说:{2-3 个具体方向,如「换成人物特写」「书名改成毛笔字」}| 文件 | 何时加载 |
|---|---|
| references/cover-styles.md | 题材→视觉风格映射、平台风格详情、提示词模板 |
© zenstory-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/story-cover of zenstory-ai/oh-story-claudecode.
Open the folder on GitHubat commit 2cf7be6
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders. This page covers the copy in zenstory-ai/oh-story-claudecode, which our catalogue first saw on October 7, 2026.
Web Novel Cover Generator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Web Novel Cover Generator this skillzenstory-ai/oh-story-claudecode | 7.4k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Zy Cinematic Realismpopopo-99/zy-cinematic-realism | 570 | — | ~4.6k | Automated safety check: Pass | CC-BY-NC-4.0 | |
| Character Refseternityspring/shuohao-skills | 4.3k | — | ~1.7k | Automated safety check: Warn | Apache-2.0 | |
| Novel Artsuihe1/short-drama-production | 181 | — | ~1.3k | Automated safety check: Notes | Apache-2.0 | |
| AI Image Generation and Editingzhayujie/CowAgent | 47k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Nano Banana Pro Prompts Recommend SkillYouMind-OpenLab/nano-banana-pro-prompts-recommend-skill | 1.9k | 1 repos | ~4.1k | Automated safety check: Pass | None |
popopo-99/zy-cinematic-realism
Develop supplied scripts, short stories, or synopses into scene understanding, director-facing art concepts, and motivated narrative keyframes; compile scene ideas, visual references, or existing…
eternityspring/shuohao-skills
给任何故事里的角色真出参考图(小说改编、自己原创的故事、单独设计一个角色都行,不需要小说原文): 一段话描述角色,拆成分层字段、补全后确认, 先出一张正面全身锚点,其余视图(大头照、90° 侧面、背面、细节、45° 大头照)都只参考这张锚点, 按需分档出图。每张图带标识、可单独重出,重出后自动标出哪些图过期。
suihe1/short-drama-production
为 AI 短剧设计场景和叙事道具母本、光照与状态变体,产出 art.json、Markdown、评审报告和可选设定图。用于美术设定、场景与道具一致性;不代替导演调度或成片人流设计。
zhayujie/CowAgent
Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.
YouMind-OpenLab/nano-banana-pro-prompts-recommend-skill
Recommend suitable prompts from 10,000+ Nano Banana Pro image generation prompts based on user needs.
wuyoscar/GPT-Image2-Skill
Generates and edits images with GPT Image 2 or 2.5 through a packaged CLI and a prompt gallery, after settling which model fits the request.
zenstory-ai/oh-story-claudecode
Drives a Chrome window over the DevTools Protocol with the agent-browser CLI, so the agent can reuse your logged-in sessions, read pages and pull tokens.
zenstory-ai/oh-story-claudecode
Reviews Chinese web-novel text with several reviewer agents in parallel, falling back to a single-agent pass, and reports structure, character, prose and setting problems with fixes.
zenstory-ai/oh-story-claudecode
Scans popular short web-fiction rankings on Chinese platforms such as Dianzhong and Heiyan to surface trending emotional hooks, themes and topic candidates with an expiry warning.
zenstory-ai/oh-story-claudecode
Routes a Chinese web-novel writing request to the matching tool in a 13-skill toolbox, covers author habit memory, and can launch a local dashboard for browsing a project.
zenstory-ai/oh-story-claudecode
Rewrites AI-sounding Chinese web novel text so it reads naturally, changing as little as possible and keeping plot, names and numbers intact.
zenstory-ai/oh-story-claudecode
Reverse-imports an existing novel, half-finished or complete, into the standard project structure so story-long-write or story-short-write can continue it.
Works with
Categories
Generates a finished web novel cover with title and author name from a book title, inferring genre style and sizing the image for the target platform. A book title and a pen name are the starting point, and the skill is written in Chinese.md, then asks GPT-Image-2 for a complete cover with the title and author name rendered on it.
Web Novel Cover Generator fits situations like: making a cover image for a web novel that needs the title and pen name on it; preparing a cover at the upload size a platform such as Tomato Novel requires; redoing a cover from a reference image or a different style preference.
Run `npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a claude-code`. Or copy the skill folder (skills/story-cover in zenstory-ai/oh-story-claudecode) into .claude/skills/story-cover in your project. Claude Code loads it when a task matches its description.
Run `npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a codex`. Or copy the skill folder (skills/story-cover in zenstory-ai/oh-story-claudecode) into .agents/skills/story-cover in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add zenstory-ai/oh-story-claudecode --skill story-cover -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/story-cover, .gemini/skills/story-cover, .github/skills/story-cover and .opencode/skills/story-cover in your project.
Going by SKILL.md and its folder, Web Novel Cover Generator needs the command-line tools its instructions call (jq and curl) and credentials named GPT_IMAGE_API_KEY and OPENAI_API_KEY. Our summary lists: A Codex CLI session with built-in image generation, or a GPT_IMAGE_API_KEY for the API fallback.
SKILL.md names 1 domain. In commands or code: api.openai.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Web Novel Cover Generator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Web Novel Cover Generator: Zy Cinematic Realism (popopo-99/zy-cinematic-realism, 570 stars), Character Refs (eternityspring/shuohao-skills, 4.3k stars), Novel Art (suihe1/short-drama-production, 181 stars) and AI Image Generation and Editing (zhayujie/CowAgent, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
zenstory-ai (a GitHub organization) maintains it in zenstory-ai/oh-story-claudecode, which has 7,424 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 10, 2026.
Source: zenstory-ai/oh-story-claudecode on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.