Ink-Wash Restyle — Travel Sketch in Chinese Ink Wash Style (v16 Fixed)
Restyle any photo into a hand-drawn ink-wash travel sketch:
- Black-and-white ink foundation: Five-layer ink + large areas of negative space (ink-wash priority)
- Restrained color accents (≈20%): Only dab traditional Chinese painting colors on the visual center, without overpowering the ink aesthetic
- Travel journal label: Overlay "scene description · location" text + fixed vermillion seal, resembling a travel notebook
Preserve: subject category, spatial relationships, character identity (gender / age / key appearance). Replace: realistic texture → ink brush strokes, photographic lighting → ink rhythm and negative space, realistic color → local traditional Chinese painting colors.
When to Trigger
The user uploads or references a photo and expresses intent like "ink wash / Chinese painting / freehand / shuimo / travel journal / hand-drawn journal / sumi-e," etc. This skill only handles ink-wash styles, not other styles.
Input Contract
- Required: 1 photo (local path, URL, or uploaded image)
- Optional: Location (e.g., "street in Chengdu") — used for the travel label; if omitted, write only the scene description or "Traveler's Notes"
Core Style Rules (6 Ironclad Laws)
🎨 1. Ink-Wash Priority Law
Black-and-white ink is the protagonist; color is an accent. Too much color or colors that are too vivid will ruin the ink-wash feel (lesson from demo-016). So:
- Color proportion 20%: Only dab color on the visual center, controlling it to about 20% of the frame
- Black/white + direct color: Black-and-white tones + a single direct color point (no color mixing, no gradients, no large-area washes)
- Restraint: Better less color than too much; color should be sparing, like traditional literati painting "treasuring color like gold"
- Ink-wash priority: Five-layer ink, negative space, and brush strokes must dominate over color presence
🎨 2. Five-Layer Ink + Negative Space Law
- Five layers of ink must be distinct: burnt / dark / heavy / light / clear — no uniform gray
- Negative space ≥ 50%: Blank area in the frame must be ≥ 50%
- 🚨 Subject Size Law (most important): People / subjects must maintain normal proportional size (close to the original figure's proportion), forbidden to shrink the subject just to create negative space. Negative space is "empty background and edges," not "small subjects." The figure must be large, complete, and confidently occupy the main area of the frame
- Treasure ink like gold: Only one concentrated dark-ink area across the whole image (on the subject), and that dense area must be small
- Sparse vs. dense contrast: Subject full, background ethereal — emptiness supports solidity; emptiness in the background, not in the subject
🚨 3. Character Identity Lock (Lesson from Gender Drift)
- Absolutely forbidden generic terms:
a person/a figure/someone/a lone traveler/a small figure - Must explicitly write: Gender + age range + hair color & style + clothing + accessories + pose and direction
- Go for freehand style: smooth flowing lines for clothing, facial area left blank or with a few suggestive strokes
- Forbidden verbs:
drip/melt/flow(they turn figures into dripping liquids)
✍️ 4. Three Elements of Freehand (Xieyi)
- Idea arrives before brush: Objects are only seven-tenths drawn; forms fade out before completion
- Calligraphic brushwork: Pressing & lifting, pauses & transitions, flying white strokes, dry brush
- Ink spontaneity: Wet ink bleeding, broken ink, splashed ink
- Simplify by deletion: Delete background clutter (shelves, vehicles, signs, baskets, extra people); the subject itself must remain complete, full, and normal-sized — only delete the environment, not the subject
🎨 5. Color Accent Auto-Ratio (20%)
- What is the visual center: The largest / brightest / most forward / most distinctive subject
- Which color to use: Natural hue of the subject → traditional Chinese painting colors (vermillion / carmine / indigo / mineral green / gamboge / ochre)
- Ratio 20%: Only dab the visual center, covering about 20% of the frame
- Remaining 100% black-and-white ink
📝 6. Travel Label Law (v16 Final Form)
Every output image must have a travel label overlaid. Format = traditional Chinese painting "inscription" approach: ink text + vermillion seal placed directly on the image, without any "card / background plate / border" (card-like formatting was judged by users to lose ink-wash beauty).
- Label content: Scene description + location (e.g., "Summer Melon Stand · Chengdu Street"); if location omitted, write only the scene description
- Overlay method: Forbidden to let the image-to-image model generate text directly (always garbled); must use
scripts/tag.py(v6 material version) after generation to overlay - Template style (uniform appearance, does not change with image):
- Position: vertical text in upper right (v17 revision) — classic Chinese painting inscription position
- Body text: Songti (宋体, horizontal thin / vertical thick), deep ink color (#1E1E1E) opaque, each character in a vertical column from top to bottom
- Beige glow halo: Each character has 4px beige (#F5F0E6) semi-transparent glow (alpha 175), so text is legible even against dark ink backgrounds
- Vermillion seal = AI-generated real seal material: Vermillion-red seal script, white-characters vertical layout, knife marks, ink pad mottling, irregular edges. Generated once by AI image-to-image model +
scripts/seal-bake.pyto cut out transparent background, fixed material stored asassets/seal-la.png, pasted onto every image (PIL font rendering cannot replicate real seal texture; must use AI-generated material). All images use the same seal material, no changes allowed. The seal is placed directly below the text column (horizontal center alignment) - Overall form: Ink text + vermillion seal blend into the image, not breaking the ink strokes
- Label order: Image-to-image model output → add label (tag.py v7) → create before-after comparison (using final labeled image, below)
Workflow
Step 1 — Parse Input
Verify the image is accessible; ask / record location (if user didn't provide, omit).
Step 2 — Image Understanding (including color scheme + label decision)
Read the image, extract (required):
- Character identity: Gender + age range + hair color & style + clothing + accessories + pose and direction (write into prompt, no generic terms)
- Subject: Main object / scene
- 🎨 Visual center determination
{focus}: What catches the eye most? - 🎨 Color scheme
{color_scheme}: Natural hue of visual center → traditional Chinese painting color - 📝 Label text
{tag_text}: Scene description (3–8 characters) + location (optional), e.g., "Smile Under the Melon Trellis · Old Market" - Composition / light / atmosphere
Step 3 — Build Prompt
Read the styles/ink-wash.md template, fill in variables.
Step 4 — Call Host Platform's Image-to-Image Capability
mode : image-to-image (host platform img2img, follow original image)
input_image : original image
prompt : full prompt (including LOCKED APPEARANCE + restrained COLOR ACCENT 20% + Five-Layer Ink + Negative Space ≥50% + Subject Size Law + XIEYI)
fidelity : medium
aspect : follow original image
⚠️ Must explicitly pass output_dir to <workspace>/outputs/photo-restyle/<YYYYMMDD-HHMM>/, forbidden to rely on default directory.
Step 5 — Deliver (first add label, then create comparison)
scripts/tag.pyoverlays the travel label on the ink-wash output →<original-filename>-inkwash-tagged.pngscripts/compare.pycreates a before-after vertical comparison: top = original image / bottom = final labeled image (default width 1600, ensures label is clear) →compare-<original-filename>-inkwash.png- Primary output = before-after composite (labeled final below); tagged single image and plain ink-wash single image are attachments only
- Annotate style name "Ink-Wash Travel Sketch"
Hard Constraints (Cannot be Bypassed)
- ❌ Forbidden pure black-and-white output — color must appear (≈20%)
- ❌ Forbidden color > 20% (color overwhelming = wrong output)
- ❌ Forbidden color in background / edges (only on visual center)
- ❌ Forbidden high-saturation modern colors / purple / fluorescent / gradient rainbow — only traditional Chinese painting colors, direct dabs
- ❌ Forbidden to let image-to-image model generate label text (always garbled) — must use
scripts/tag.pyto overlay - ❌ If a person is present, forbidden generic terms; must lock gender / age / key appearance
- ❌ Forbidden to shrink subject to create negative space — subject must maintain normal size
- ✅ Output annotated with style name "Ink-Wash Travel Sketch"
- ✅ Primary output must be before-after composite (original above / labeled below); tagged single and plain ink-wash single are attachments only
- ✅ Output to visible directory (e.g.,
<workspace>/outputs/photo-restyle/), not in platform hidden directories
Error Handling
| Situation | Response |
|---|---|
| No image obtained | Prompt user to upload a photo first |
| Output pure black-and-white / color too faint | Check COLOR ACCENT block, emphasize "color REQUIRED on {focus}, ≈20%" |
| Color overflow / proportion too high | Emphasize "color only on {focus}, about 20% of the frame, keep it restrained" or reduce {color_scheme} description |
| Color too vivid / modern-looking | Write only traditional Chinese color names, emphasize semi-transparent direct dabs |
| Character gender / age drift | Complete LOCKED APPEARANCE and re-run |
| Subject shrunk / negative space eats subject | Emphasize SUBJECT SCALE: figure big, emptiness in background only |
| Label garbled / missing | Re-overlay with scripts/tag.py, forbidden to re-run image-to-image |
| Comparison composite fails / label unclear in composite | Check scripts/compare.py (default width 1600) or deliver two separate images |
Output Location
<workspace>/outputs/photo-restyle/<YYYYMMDD-HHMM>/
├── <original-filename>-inkwash.png # Attachment: ink-wash image (no label)
├── <original-filename>-inkwash-tagged.png # Attachment: final labeled image
└── compare-<original-filename>-inkwash.png # Primary output: before-after composite (original above / labeled below)
Skill Directory Structure
<platform skills directory>/ink-wash-restyle/ (e.g., for WorkBuddy: ~/.workbuddy/skills/ink-wash-restyle/)
├── SKILL.md # This file (rules entry point)
├── styles/ink-wash.md # Ink-wash prompt template (includes LOCKED APPEARANCE / COLOR ACCENT / SUBJECT SCALE / XIEYI / negative words)
├── scripts/
│ ├── tag.py # Label overlay (v7: Songti ink text + halo + paste seal material)
│ ├── compare.py # Before-after composite (default width 1600)
│ ├── seal-bake.py # Seal cut-out tool (AI-generated material → transparent background)
│ └── prototype_seal.py # Seal style comparison debugging tool (historical)
├── assets/
│ └── seal-la.png # Fixed vermillion seal material (transparent background, AI-generated)
└── examples/README.md # Example description
Version History
- v1–v5: Pure black-and-white ink-wash route
- v6 (rolled back): Fixed facial carmine
- v7: Default before-after composite
- v8: Black-and-white base + color accents (visual center, auto-ratio 15–35%)
- v9: Color compressed to ≤15% + travel label law
- v9.1: Primary output must be before-after composite
- v10: Label "cream card background plate" (later rejected)
- v11: Color 20%; fixed seal; label "rice paper slip" style (later rejected)
- v12: Label de-card (pure inscription route) + 55% negative space
- v13: Added Subject Size Law (negative space ≠ shrink subject), negative space back to 50%
- v14: Vertical seal + Songti (font approach, later rejected)
- v15: compare default width 1600 (label still clear after scaling)
- v16 (current fixed version): Seal changed to AI-generated real seal carving material (
assets/seal-la.png), tag.py v6 material paste mode; all rules converged to this document - v17: User requested "keep everything else, move label and inscription to upper right vertical" → tag.py v7: position from lower left to upper right, body text vertical (top→bottom), seal placed directly below text column (horizontal center)
- v17 brushwork fix (styles/ink-wash.md update): Restored "Red Tile Village / Golden Autumn Crab Feast" ink-wash freehand brushstrokes — ① Added back v19 CLEANLINESS block (clean & crisp, distinct strokes, no smudging) ② XIEYI three elements contextualized: Background (distant mountains / sky / large color blocks) use wet-on-wet ink wash (ink seeps into rice paper), foreground (plant leaves / roof tiles / details) use flying white dry brush. Verified: demo-058 Lanzarote, demo-059 White Village Ochre Tower both stable hit Red Tile Village style