drivethru-graphic-artist
Graphic-artist tasks for Bacon & Co decorations — (1) generate product mockups by compositing a decoration (logo/graphic) onto a blank product photo (deterministic; no model-generated pixels; self-reviewed), (2) make a DTF decoration "production-ready" / "drop the art" — take the real thumbnail, size it to the decoration location, render at 300 DPI, upload the DTF production file, set size + colors, and create a print sample, driving the decoration toward the 'done' state via the drivethru_mcp decoration_* tools, and (3) clean up degraded / AI-generated flat art before production — deterministically snap it back to its true inks, rebuild faded/broken/jagged outlines, and re-render crisp at print size (fixes the "looks fine as a thumbnail, falls apart at 13 inches" problem). Use whenever the user wants to see a logo on a garment, place artwork on a blank, remove an image background (knock a solid color out of flat art, or segment a photographic subject), tune a print's size/position, clean up / fix / "drop for production" a low-quality or AI-generated logo (ghosting, haze, jagged or fading outlines, soft edges), OR make a decoration production-ready / drop art / get a DTF decoration to done.
Rank
62
Safety
84
Downloads
1.8k
Updated
Oct 10, 2026
Version
0.18.1
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.8K downloads reported by the source. Last updated 10/10/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 10, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 10, 2026
- Adoption signal
- 1.8K downloadsadoption · observed Oct 10, 2026
- Latest release
- 0.18.1release · observed Sep 24, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17fq291581evd78xzn1930b0n87bfny:drivethru-graphic-artist- Install using `clawhub skill install s17fq291581evd78xzn1930b0n87bfny:drivethru-graphic-artist` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/zmtucker/drivethru-graphic-artist before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-zmtucker-drivethru-graphic-artist/snapshot"
Documentation
CLAWHUB
160,000 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: drivethru-graphic-artist
description: Graphic-artist tasks for Bacon & Co decorations — (1) generate product mockups by compositing a decoration (logo/graphic) onto a blank product photo (deterministic; no model-generated pixels; self-reviewed), (2) make a DTF decoration "production-ready" / "drop the art" — take the real thumbnail, size it to the decoration location, render at 300 DPI, upload the DTF production file, set size + colors, and create a print sample, driving the decoration toward the 'done' state via the drivethru_mcp decoration_* tools, and (3) clean up degraded / AI-generated flat art before production — deterministically snap it back to its true inks, rebuild faded/broken/jagged outlines, and re-render crisp at print size (fixes the "looks fine as a thumbnail, falls apart at 13 inches" problem). Use whenever the user wants to see a logo on a garment, place artwork on a blank, remove an image background (knock a solid color out of flat art, or segment a photographic subject), tune a print's size/position, clean up / fix / "drop for production" a low-quality or AI-generated logo (ghosting, haze, jagged or fading outlines, soft edges), OR make a decoration production-ready / drop art / get a DTF decoration to done.
version: 0.18.1
emoji: 🎨
metadata:
openclaw:
requires:
bins: [python3]
envVars:
MOCKUP_DATA_DIR:
required: false
description: >
Directory for the editable placement-rules catalog and rendered
mockup outputs. Defaults to `~/.drivethru/mockup`. The bundled
starter catalog (assets/placement_rules.json) is used read-only
until the first edit, which seeds an editable copy here.
MOCKUP_VISION_API_KEY:
required: false
description: >
API key for the independent vision review in the web-image routine
(web_mockup_job.py / vision_review.py). Falls back to
OPENROUTER_API_KEY. Without one, mockups are never written.
MOCKUP_VISION_MODEL:
required: false
description: >
Vision model slug for the review (default anthropic/claude-sonnet-5
on OpenRouter). MOCKUP_VISION_BASE_URL overrides the
OpenAI-compatible endpoint (default https://openrouter.ai/api/v1).
install:
uv:
- Pillow>=10.3,<12
- numpy>=1.24,<3
- rembg>=2.0.56,<3
- onnxruntime>=1.18,<2
- scipy>=1.10,<2
- opencv-python-headless>=4.8,<6
- requests>=2.31,<3
---
# Drivethru Graphic Artist — Product Mockups
Take a **blank** product photo plus a **decoration** image and return a
composite **mockup**. Compositing is deterministic image manipulation: Pillow
for transform/compose, [rembg](https://github.com/danielgatis/rembg) (U²-Net
segmentation — *not* generative) for background removal and garment bbox
detection.
**No pixels are ever model-generated.** The compositing pipeline never invokes
a generative model — only fall back to _meta.json
{
"ownerId": "kn715tnf30wegyr6mdbfa17avd87bjr6",
"slug": "drivethru-graphic-artist",
"version": "0.18.1",
"publishedAt": 1790274097564
}references/decoration_spec.md
# Decoration spec — real-world print sizes & placements Ground-truth print dimensions from the **Bacon & Co. Recommended Garment & Accessory Decoration Guide** (`assets/decoration_guide.png` — the canonical placement diagram; open it when you need to see where a location sits). Use this as the reference the [self-review loop](self_review.md) judges against, so "correct" means *industry-standard*, not a guess. ## Why inches map cleanly to our ratios The spec is in inches and split adult/youth; our rules are ratios of the detected garment bbox. Those are two views of the same thing: youth full-front (9″) ÷ adult full-front (13″) ≈ 0.69, and youth garments run ~0.69 the width of adult — so **one ratio reproduces both columns automatically**. That's the whole reason the model is ratio-based; the spec validates it. What the spec pins down that a lone ratio can't is the *proportion between placements* (a left chest is ~¼ the width of a full front) and *height caps* (a hoodie front must clear the pocket). ## Print dimensions (adult / youth), width unless noted | # | Location | Adult | Youth | Frac of full-front width | |---|---|---|---|---| | 1 | Full front | 13″W | 9″W | 1.00 (the anchor) | | 2 | Center chest | 3–5″W | 3″W | ~0.31 | | 3/4 | Right / left chest | 3–4″W | 3–4″W | ~0.27 (pocket-sized) | | 5 | Pocket | 3″W × 3″H | 3″W × 3″H | ~0.23, square | | 6 | Full back | 13″W | 9″W | 1.00 (= full front) | | 7 | Upper back | 10–13″W | 7–9″W | ~0.88 | | 8 | Tag | 3–4″W | 3–4″W | ~0.27, high under collar | | 9 | Lower back | 10–13″W | 7–9″W | ~0.88, low | | 10/11 | Sleeve (short) | 3–4″W | 3″W | ~0.27 | | 12/13 | Sleeve (long) | 3.25″W × **12″H** | 3″W × 9″H | ~0.25, height-dominant | | 14 | Full front (hoodie) | 13″W × **9″H** | 9″W × 6″H | 1.00 width, **9″H cap (pocket)** | | 15/16 | Left / right chest (polo) | 3–4″W | 3″W | ~0.27 | | 23 | Drawstring backpack | 11–12″W | — | large, centered panel | | 24 | Hat front | 2.5″H max (high) / 2″H (low) | — | **height-capped**, width varies | | 25 | Hat back | 1.25″H max | — | small | | 26 | Hat side | 2″W max | — | small | | 27 | Visor front | 1.5″H max (high) / 1″H (low) | — | small | Embroidery floor: lettering ≥ 0.25″H and 2 mm stroke — a mark that renders below that in the mockup is too small to actually sew. ## How this shaped the shipped ratios `assets/placement_rules.json` was reconciled to the proportions above: | Placement | Was | Now | Why | |---|---|---|---| | left/right chest (all cats) | 0.18 | 0.14–0.15 | 3–4″ is ~¼ of a 13″ full front — pocket-sized, not 1/3 | | full_back | 0.55–0.60 | 0.50–0.55 | spec sizes full back = full front (both 13″) | | back_yoke / upper back | 0.40 | 0.44 | spec upper back ~10–13″ ≈ 0.88 of full front | | sleeve | 0.12 | 0.14 | spec sleeve 3–4″ ≈ 0.27 of full front | | hoodie full_front | 0.55 | 0.55 + `max_height_ratio 0.33` | 13″×9″ box — cap height so tall art clears the pocket | Full front, hat, and mug were left as-is (full front already matched; hats ar
references/iterative_feedback.md
# Iterative feedback & rule tuning
Mockups are a conversation. The first compose is a starting point; the user
will react ("bigger", "move it up", "rotate it"). Translate plain-language
feedback into deltas layered on top of the *previous* run's arguments.
## Feedback → flags
| User says | You run (added to the last run's args) |
|---|---|
| "Make it ~10% bigger" | `--width-delta-pct +10` |
| "Make it ~15% smaller" | `--width-delta-pct -15` |
| "Move it up a little" | `--offset-y-pct -5` |
| "Move it down" | `--offset-y-pct +5` |
| "Shift left" | `--offset-x-pct -5` |
| "Shift right" | `--offset-x-pct +5` |
| "Rotate 5° clockwise" | `--rotate-deg 5` |
| "Rotate 5° counter-clockwise" | `--rotate-deg -5` |
Keep a running record of the current flags so each turn composes on top of the
last, not from the original defaults. A delta of `±5` percentage points is a
good "a little" nudge; `±10–15%` is a good "noticeably" nudge for width.
## Promoting a tuned result to a default
When the user is happy and says something like "save that as the new default
for hoodie full-front," bake the *effective* ratios from the last compose
receipt's `applied` block into the catalog:
```bash
python3 scripts/edit_placement_rule.py update hoodie full_front \
--width-ratio 0.58 --y-top-ratio 0.20
```
## Adding a brand-new category or placement
When the user asks for a placement/category that isn't in the catalog yet:
```bash
python3 scripts/edit_placement_rule.py add tote front \
--width-ratio 0.45 --x-center-ratio 0.50 --y-top-ratio 0.30
```
Then re-compose with that `--category`/`--placement`.
## Coordinate model recap
All rule fields are ratios against the **detected garment bounding box**, not
the full image:
- `width_ratio` — decoration width ÷ garment bbox width (0.01–1.5).
- `x_center_ratio` — decoration center X within the bbox (0 = left, 1 = right).
- `y_top_ratio` — decoration top Y within the bbox (0 = top, 1 = bottom).
- `rotation_deg` — clockwise rotation in degrees (−180…180).
Because they're ratios, the same rule yields a visually matching print across
resolutions, crops, and garment sizes (a youth tee and an adult tee line up).references/location_dimensions.json
{
"_meta": {
"source": "Bacon & Co. Recommended Garment & Accessory Decoration Guide (references/decoration_spec_sheet.pdf)",
"units": "inches",
"note": "Max print dimensions per decoration location. Ranges are captured as the UPPER bound in max_width_in / max_height_in; the raw label is preserved. At runtime prefer the authoritative Odoo decoration_location.max_width/max_height for the specific record; use this table as a fallback / cross-check, matched by location name. 'Logo placement and sizing may vary, based on artwork provided.'",
"embroidery_minimum": {"lettering_height_in": 0.25, "stroke_mm": 2}
},
"locations": [
{"num": 1, "location": "Full Front", "adult": {"max_width_in": 13.0, "max_height_in": null, "raw": "13\"W"}, "youth": {"max_width_in": 9.0, "max_height_in": null, "raw": "9\"W"}},
{"num": 2, "location": "Center Chest", "adult": {"max_width_in": 5.0, "max_height_in": null, "raw": "3\"-5\"W"}, "youth": {"max_width_in": 3.0, "max_height_in": null, "raw": "3\"W"}},
{"num": 3, "location": "Right Chest", "adult": {"max_width_in": 4.0, "max_height_in": null, "raw": "3\"-4\"W"}, "youth": {"max_width_in": 4.0, "max_height_in": null, "raw": "3\"-4\"W"}},
{"num": 4, "location": "Left Chest", "adult": {"max_width_in": 4.0, "max_height_in": null, "raw": "3\"-4\"W"}, "youth": {"max_width_in": 4.0, "max_height_in": null, "raw": "3\"-4\"W"}},
{"num": 5, "location": "Pocket", "adult": {"max_width_in": 3.0, "max_height_in": 3.0, "raw": "3\"W x 3\"H"}, "youth": {"max_width_in": 3.0, "max_height_in": 3.0, "raw": "3\"W x 3\"H"}},
{"num": 6, "location": "Full Back", "adult": {"max_width_in": 13.0, "max_height_in": null, "raw": "13\"W"}, "youth": {"max_width_in": 9.0, "max_height_in": null, "raw": "9\"W"}},
{"num": 7, "location": "Upper Back", "adult": {"max_width_in": 13.0, "max_height_in": null, "raw": "10\"-13\"W"}, "youth": {"max_width_in": 9.0, "max_height_in": null, "raw": "7\"-9\"W"}},
{"num": 8, "location": "Tag", "adult": {"max_width_in": 4.0, "max_height_in": null, "raw": "3\"-4\"W"}, "youth": {"max_width_in": 4.0, "max_height_in": null, "raw": "3\"-4\"W"}},
{"num": 9, "location": "Lower Back", "adult": {"max_width_in": 13.0, "max_height_in": null, "raw": "10\"-13\"W"}, "youth": {"max_width_in": 9.0, "max_height_in": null, "raw": "7\"-9\"W"}},
{"num": 10, "location": "Right Sleeve (short)", "adult": {"max_width_in": 4.0, "max_height_in": null, "raw": "3\"-4\"W"}, "youth": {"max_width_in": 3.0, "max_height_in": null, "raw": "3\"W"}},
{"num": 11, "location": "Left Sleeve (short)", "adult": {"max_width_in": 4.0, "max_height_in": null, "raw": "3\"-4\"W"}, "youth": {"max_width_in": 3.0, "max_height_in": null, "raw": "3\"W"}},
{"num": 12, "location": "Right Sleeve (loAionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/zmtucker/skills/drivethru-graphic-artist",
"sourceUrl": "https://clawhub.ai/zmtucker/skills/drivethru-graphic-artist",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T02:08:46.601Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-zmtucker-drivethru-graphic-artist/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-zmtucker-drivethru-graphic-artist/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-10T02:08:46.601Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.8K downloads",
"href": "https://clawhub.ai/zmtucker/drivethru-graphic-artist",
"sourceUrl": "https://clawhub.ai/zmtucker/drivethru-graphic-artist",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T02:08:46.601Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.18.1",
"href": "https://clawhub.ai/zmtucker/drivethru-graphic-artist",
"sourceUrl": "https://clawhub.ai/zmtucker/drivethru-graphic-artist",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-24T18:21:37.564Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-zmtucker-drivethru-graphic-artist/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-zmtucker-drivethru-graphic-artist/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.18.1",
"description": "- Removed the outdated skill-card.md file. - Minor update to SKILL.md contents and version bump to 0.18.1. - No changes to features or core functionality.",
"href": "https://clawhub.ai/zmtucker/drivethru-graphic-artist",
"sourceUrl": "https://clawhub.ai/zmtucker/drivethru-graphic-artist",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-24T18:21:37.564Z",
"isPublic": true
}
]
}Record generated Oct 10, 2026.
