🦀 ClawHub
Webnovel Serial Pipeline
by @jeong-wooseok
Build and publish a Quartz-hosted Korean web-novel serial (draft→cover→webp→episode md→lint→publish). Uses Nano Banana Pro + ffmpeg.
TERMINAL
clawhub install webnovel-serial-pipeline📖 About This Skill
name: webnovel-serial-pipeline version: 0.1.4 description: Build and publish a Quartz-hosted Korean web-novel serial (draft→cover→webp→episode md→lint→publish). Uses Nano Banana Pro + ffmpeg.
WebNovel Serial Pipeline (Quartz)
⚠️ Security Notice
This skill may trigger antivirus false positives due to:
curl, wget to DETECT (not execute) malicious code
- This is a SECURITY FEATURE, not malwareAll code is open source and auditable. No malicious behavior.
This skill documents the end-to-end workflow we used for Quartz-hosted Korean web-novel serials (e.g., Drama/야간조).
Quick Start (copy/paste)
From a terminal:# 1) Install
clawhub install webnovel-serial-pipeline2) Go to the skill folder
cd skills/webnovel-serial-pipeline3) Set your Quartz root (env var)
export WEBNOVEL_QUARTZ_ROOT="/absolute/path/to/8.quartz"4) Verify deps
bash scripts/check_deps.sh5) After you say “검수 완료”, publish + sync index
bash scripts/publish_review_ok.sh --series "야간조" --episode 2 --slug "불-꺼지면-가지-마세요" --draft-file "/path/to/draft.md"
Goals
1K → webp (q 70~80, max 1200px)Design & Requirements (before writing)
This section captures the proposal + requirements analysis process we used (the part *before* the pipeline).
Kickoff 질문(한 번에 던지기, 선택형)
아래 질문을 한 메시지로 던지고, 사용자가 선택/응답하면 그걸로 톤을 고정한다.유치함 방지(기본값 8룰)
성숙도(퀄리티) 루브릭 — 자동 체크
시즌(10부작) 설계 템플릿
관계 설계 규칙(절제된 애틋함)
Setup for distribution (paths + optional APIs)
1) Set your Quartz root (deploy folder)
For distribution we do not hardcode machine-specific paths.Required environment variable:
WEBNOVEL_QUARTZ_ROOT = your Quartz vault root (published content folder)Optional:
WEBNOVEL_DRAFT_ROOT = where you keep draftsNANO_BANANA_KEY (only if you generate covers using nano-banana-pro)Example:
export WEBNOVEL_QUARTZ_ROOT="/absolute/path/to/8.quartz"
export WEBNOVEL_DRAFT_ROOT="/absolute/path/to/drafts" # optional
2) Dependency check
From inside this skill folder:bash scripts/check_deps.sh
3) Pre-publish safety check (ClawHub)
Beforeclawhub publish, run:
python3 scripts/prepublish_check.py
This fails if obvious exfil/download markers are found.Folder convention
$WEBNOVEL_QUARTZ_ROOT (example: /path/to/8.quartz)
Drama//index.md (landing + 제작 규칙)
- Drama//-01-....md (published episodes)
- Drama//images/*.webp (covers)
$WEBNOVEL_DRAFT_ROOT/_serial_drafts/ (example: /path/to/drafts/yaganjo_serial_drafts/)Workflow (recommended)
0) Decide the "episode job"
1) Create an episode draft
Write the episode in the drafts folder first.2) Cover image (1K)
Generate cover PNG (1K) using Nano Banana Pro, then convert to WebP.3) Embed + tags
domain/topic/format/audience/intent/lang
![[Drama//images/.webp]] 4) Lint (style checks)
Before publishing, run a quick linter:같아서/것 같아서5) Publish (move to Quartz)
Only after the user says OK.Recommended publish command (copies draft into Quartz and normalizes filename):
python3 scripts/publish_episode.py \
--draft-file /path/to/draft.md \
--quartz-root "$WEBNOVEL_QUARTZ_ROOT" \
--series-dir "$WEBNOVEL_QUARTZ_ROOT/Drama/" \
--series "" \
--episode 2 \
--slug "불-꺼지면-가지-마세요"
6) Sync index.md episode list (optional, recommended)
Add markers once inDrama//index.md :## 에피소드
Then run:
python3 scripts/sync_index.py \
--index-file "$WEBNOVEL_QUARTZ_ROOT/Drama//index.md" \
--series-dir "$WEBNOVEL_QUARTZ_ROOT/Drama/" \
--series ""
One-shot publish workflow (ONLY after chat confirmation: “검수 완료”)
This is the recommended human-safe workflow: wait for the user to explicitly say 검수 완료, then run:bash scripts/publish_review_ok.sh \
--series "야간조" \
--episode 2 \
--slug "불-꺼지면-가지-마세요" \
--draft-file "/path/to/drafts/yaganjo_serial_drafts/야간조-연재-02-불-꺼지면-가지-마세요.md"
It will:
Drama//index.md between episode markersScripts
A) Create episode stub
python3 scripts/new_episode.py \
--series "야간조" \
--series-dir "$WEBNOVEL_QUARTZ_ROOT/Drama/야간조" \
--episode 2 \
--slug "불-꺼지면-가지-마세요" \
--draft-dir "/path/to/drafts/yaganjo_serial_drafts"
B) Convert PNG→WebP (fast)
bash scripts/to_webp.sh \
/path/to/cover.png \
/path/to/cover.webp
C) Lint an episode
python3 scripts/lint_episode.py \
--file /path/to/episode.md
Production rules (the ones we actually used)
~같아서 chains