Agent skill
digipop-coloring-book-creation
**DEPRECATED** — Use `creating-coloring-books` instead. This skill uses an outdated workflow (Pixabay sourcing, local potrace). The replacement skill uses Google Images → screenshot → fal.ai Qwen + Recraft. Do not use this skill for new coloring book work.
Install this agent skill to your Project
npx add-skill https://github.com/delorenj/skills/tree/main/digipop-coloring-book-creation
SKILL.md
DigiPop Coloring Book Creation Pipeline
6-phase pipeline that transforms curated source illustrations into print-ready coloring book pages. We do NOT generate art from scratch — we find great existing illustrations and convert them.
Pipeline Overview
Phase 1: Research → find 20+ candidate illustrations
Phase 2: Vectorize → raster → SVG via fal.ai
Phase 3: Line Art → extract clean outlines
Phase 4: Cleanup → pure black/white, print-ready
Phase 5: QA → independent agent inspection
Phase 6: Upload → gallery for human review
── PAUSE ── → Carrie approves / rejects
Phase 1: Research (Art Search Agent)
Goal: Find 20+ illustrations that would make excellent coloring pages.
Model requirement: Use a strong visual model (Gemini 3 Pro or GLM-4-6v) for image evaluation — the agent must SEE the candidates to score them.
Source Strategy
Search broadly across free/open illustration sources. Be creative:
- Stock illustration sites (Unsplash, Pexels, Pixabay — illustration filters)
- Open clipart repositories (OpenClipart, SVG Repo, Wikimedia Commons)
- Creative Commons illustration archives
- Public domain art collections
- DeviantArt (CC-licensed), Behance (reference only)
- Pinterest (reference/discovery only — do not scrape)
- Theme-specific fan art communities (with licensing check)
Future: Source list may be locked to proven reliable sites after iteration.
Candidate Scoring
Rate each image 1-10 on these axes:
| Axis | Weight | What to look for |
|---|---|---|
| Coloring compatibility | 3x | Clear outlines, distinct regions, no tiny details that disappear at print |
| Stylistic flair | 2x | Interesting composition, dynamic poses, visual appeal |
| Subject clarity | 2x | Single clear subject or well-separated scene elements |
| Line clarity | 2x | Clean edges, vector-like quality, minimal texture/noise |
| Print readiness | 1x | Will it look good at 8.5x11? Landscape or portrait? |
CandidateScore = (compat * 3 + flair * 2 + clarity * 2 + lines * 2 + print * 1) / 10
Threshold: Accept candidates scoring ≥ 6.0. Target 20+ candidates so ~10 survive through QA.
Output
Save to {bundle_dir}/research/:
candidates.json— array of{url, source, license, scores, total_score, notes}thumbnails/— downloaded preview of each candidateresearch-report.md— summary with top picks and rationale
Phase 2: Vectorization (Tracing Agent)
Goal: Convert accepted raster candidates to clean SVG.
fal.ai Vectorization Endpoints (pick best per image)
| Endpoint | Best for | Notes |
|---|---|---|
fal-ai/recraft/vectorize |
Illustrations with solid colors | Recraft's vectorizer, good color separation |
fal-ai/star-vector |
Complex illustrations | AI vectorization preserving visual detail |
fal-ai/image2svg |
Clean graphics, logos | Precise control over detail levels |
Process
- Download full-res source image
- Run through vectorization endpoint
- Save SVG output to
{bundle_dir}/vectorized/ - Save
{filename}.meta.jsonwith: source_url, endpoint_used, parameters, timestamp - Visual diff check: does the SVG faithfully represent the source?
Selection Heuristic
- Source is already SVG/vector → skip this phase, use directly
- Source has clean solid colors →
recraft/vectorize - Source is complex illustration →
star-vector - Source is simple graphic →
image2svg
Phase 3: Line Art Extraction
Goal: Extract clean black outlines from vectorized illustrations.
Primary Tool: fal.ai Line Art Preprocessor
Endpoint: fal-ai/image-preprocessors/lineart
This extracts line art from any image — feed it the vectorized SVG rendered as PNG, or the original raster if vectorization wasn't needed.
Alternative: Local Processing
If fal.ai lineart doesn't produce clean enough output, fall back to local processing with Python/Pillow:
# Edge detection + threshold approach
from PIL import Image, ImageFilter
img = Image.open(path).convert('L')
edges = img.filter(ImageFilter.FIND_EDGES)
bw = edges.point(lambda x: 0 if x > threshold else 255)
Output Spec
- Pure black lines on white background
- Target stroke weight: visible at 8.5x11 print (minimum ~2px at 300dpi)
- No gray, no gradients, no fills
- Save as PNG (3300x2550 for landscape, 2550x3300 for portrait)
- Save to
{bundle_dir}/lineart/
Phase 4: Cleanup
Goal: Production-ready coloring pages. Should look amazing/perfect.
Cleanup Steps
- Binarize: Strict black/white threshold (no gray pixels)
- Stroke normalization: Ensure consistent line weight across the page
- Artifact removal: Remove stray dots, broken lines, noise
- Border cleanup: Clean margins, no edge artifacts
- Resolution normalize: Scale to exactly 3300x2550 (landscape) or 2550x3300 (portrait) at 300dpi
- Format: Save as PNG + companion SVG if available
QA Metrics (automated pre-check before Phase 5)
| Metric | Pass Criteria |
|---|---|
| Black pixel ratio | 2% – 15% of total pixels |
| Gray pixels | Exactly 0 |
| Min connected component | No isolated dots < 5px |
| Stroke continuity | No broken lines (gaps < 3px) |
| Margin clearance | ≥ 50px clear border on all sides |
Save to {bundle_dir}/cleaned/
Phase 5: QA (Independent Agent)
Goal: Every page independently inspected by a visual model agent.
Critical: The QA agent must be a SEPARATE agent/session from the one that produced the art. Fresh eyes, no confirmation bias.
QA Checklist (visual inspection via Gemini/GLM)
- Is this a good coloring page? Would a person enjoy coloring this?
- Line quality: Are lines clean, consistent, unbroken?
- Complexity balance: Not too sparse (boring), not too dense (frustrating)?
- Subject recognizability: Can you tell what the image depicts?
- Colorable regions: Are there clear, bounded regions to color in?
- Print artifacts: Any visual glitches, moiré, or rendering errors?
- Age appropriateness: Suitable for target audience?
Scoring
Each criterion scored 1-5. Page passes if:
- No criterion scores below 3
- Average score ≥ 3.5
- "Is this a good coloring page?" scores ≥ 4
Output
{bundle_dir}/qa/qa-report.json— per-page scores and notes{bundle_dir}/qa/qa-summary.md— human-readable summary- Pages that fail are moved to
{bundle_dir}/qa/rejected/with rejection reason
Phase 6: Upload to Gallery
Goal: Upload passing pages to Piwigo for Carrie's review.
Upload Target
- Gallery:
https://media.delo.sh - Album: "Dumply's Daily Dump" (ID: 1) or create sub-album per bundle
- API: Piwigo
pwg.images.addSimpleviaws.php
Upload Requirements
- Use
User-Agent: Dumply/1.0andReferer: https://media.delo.sh/ - Authenticate via
pwg.session.login(creds from env:PIWIGO_USER,PIWIGO_PASSWORD) - Upload helper:
~/workspace-dumpling/bin/piwigo-upload - Or direct API calls per references/piwigo-api.md
Post-Upload
- Set album description with bundle name, page count, theme
- Notify Cack via
sessions_sendthat bundle is ready for Carrie review - Pipeline pauses here — contingent on human-in-the-loop approval from Carrie
Directory Structure
Each bundle lives under ~/workspace-dumpling/assets/{bundle-name}/:
{bundle-name}/
├── research/
│ ├── candidates.json
│ ├── thumbnails/
│ └── research-report.md
├── vectorized/
│ ├── {page}.svg
│ └── {page}.meta.json
├── lineart/
│ └── {page}.png
├── cleaned/
│ ├── {page}.png
│ └── {page}.meta.json
├── qa/
│ ├── qa-report.json
│ ├── qa-summary.md
│ └── rejected/
└── bundle-manifest.json
bundle-manifest.json
{
"name": "K-pop Demon Hunters",
"theme": "K-pop fantasy coloring",
"page_count": 10,
"target_format": "8.5x11 PDF bundle",
"created": "2026-02-21T15:00:00-05:00",
"status": "pending_review",
"phases_completed": ["research", "vectorize", "lineart", "cleanup", "qa", "upload"],
"gallery_url": "https://media.delo.sh/index.php?/category/1",
"plane_ticket": "DIGI-1"
}
Plane Integration
Every bundle MUST have a Plane ticket in the DIGI project (workspace: lasertoast). Create the ticket before starting Phase 1. Update status as phases complete.
Agent Delegation Guide
| Phase | Recommended Agent/Model | Why |
|---|---|---|
| Research | Sub-agent with Gemini 3 Pro or GLM-4-6v | Needs strong vision for image scoring |
| Vectorize | Dumply (self) | API calls to fal.ai, straightforward |
| Line Art | Dumply (self) | fal.ai API + optional local Pillow |
| Cleanup | Dumply (self) | Local Python image processing |
| QA | Spawn independent sub-agent | Fresh eyes, no confirmation bias |
| Upload | Dumply (self) | Piwigo API via helper script |
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
openclaw-upgrade
Upgrade OpenClaw installations to the latest version. Handles global npm installs, local development setups, release channels (stable/beta/dev), configuration preservation, and platform-specific requirements. Use when updating OpenClaw, switching release channels, or troubleshooting update issues.
vercel-composition-patterns
React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.
security-monitor
Real-time security monitoring for Clawdbot. Detects intrusions, unusual API calls, credential usage patterns, and alerts on breaches.
event-driven-architecture
Kafka, RabbitMQ, SQS/SNS, event sourcing, CQRS, saga patterns, dead letter queues, and idempotency. Use when designing asynchronous systems, implementing message-driven workflows, or building event streaming pipelines.
shadcn-ui
Expert guidance for integrating and building applications with shadcn/ui components, including component discovery, installation, customization, and best practices.
just-fucking-cancel
Find and cancel unwanted subscriptions by analyzing bank transactions. Detects recurring charges, calculates annual waste, and helps you cancel with direct URLs and browser automation. Use when: 'cancel subscriptions', 'audit subscriptions', 'find recurring charges', 'what am I paying for', 'save money', 'subscription cleanup', 'stop wasting money'. Supports CSV import (Apple Card, Chase, Amex, Citi, Bank of America, Capital One, Mint, Copilot) OR Plaid API for automatic transaction pull. Outputs interactive HTML audit with one-click cancel workflow. Pairs with Plaid integration for real-time transaction access without CSV exports.
Didn't find tool you were looking for?