craft-brand-kit
Build a brand kit from a logo with ArtCraft apps - trace or take the vector logo, colour/mono variants, PNG/TIFF set, one-page brand sheet, PDF package; verified and resumable. Starts from the user's logo; generated concepts only on explicit request. Use for "make a brand kit from this logo", "export my logo in all sizes", "a one-page brand sheet for ACME".
- License 许可
- MIT
- 最近更新
- 2026-11-12
- Stars
- ★ 348
- Forks
- 55
01 前言 Front Matter
- name
- craft-brand-kit
- description
- Build a brand kit from a logo with ArtCraft apps - trace or take the vector logo, colour/mono variants, PNG/TIFF set, one-page brand sheet, PDF package; verified and resumable. Starts from the user's logo; generated concepts only on explicit request. Use for "make a brand kit from this logo", "export my logo in all sizes", "a one-page brand sheet for ACME".
03 SKILL.md 正文
craft-brand-kit — logo → vector variants → raster set → brand sheet → PDF package
Starts from a user-supplied logo (an svg is used as-is; a raster logo is traced with VectorCraft imageTrace).
VectorCraft makes the vector variants, PhotoCraft the raster export set, DesignCraft the one-page sheet, PdfCraft the package.
Read vectorcraft, photocraft, designcraft and pdfcraft first. Resumable-job rules are in the craft-studio router,
section Craft jobs. Passwords and API keys are never written to job.json, gate reports or step files.
Step table
| # | Step | Tool | Input → Output | Gate |
|---|---|---|---|---|
| 0 | Preflight + job | agent | request → job.json |
check: job |
| 1 | Logo to vector | VectorCraft | logo.svg or logo.png → 01-logo/logo.svg |
preview png + pi-craft verify --size --alpha |
| 2 | Variants | VectorCraft | logo.svg → 02-variants/logo-black.svg, logo-white.svg |
preview png + pi-craft verify --size |
| 3 | Raster set | PhotoCraft | logo.svg → 03-raster/logo-<w>.png, logo-print.tif |
pi-craft verify --size --alpha (png) |
| 4 | Brand sheet | DesignCraft | logo + name → 04-sheet/sheet.pdf |
pi-craft verify --pages --text-contains |
| 5 | Package | PdfCraft | sheet → 05-package/brand-kit.pdf |
pi-craft verify --pages --text-contains |
Hand-off formats: svg between vector steps (+ pdf for print), png with alpha for screens, tiff for print, pdf for
delivery. An svg is never passed to pi-craft verify (it has no vector probe): gate its png preview
(vectorcraft-cli convert x.svg x.png --scale N, then --size). --alpha is asserted on png only.
Step 0 — Preflight and job
Output: craft-jobs/<slug>/job.json (created or loaded).
Gate: check: job.
| Sibling | Package | Check | If missing |
|---|---|---|---|
anti-slop-brandkit |
@blackbelt-technology/anti-slop-frontend |
skill in the loaded skill list | opt-in only: used solely on an explicit user request, after approval — see Generated concepts (opt-in); without it the user supplies a logo |
pi-nano-banana |
already a dependency of craft-apps | usable credentials (only relevant to the opt-in branch) | no credentials: tell the user and offer to start from a user-supplied logo file |
"Loaded skill list" is the available-skills list in your own system prompt. Ask for the logo (svg or a raster png/jpg)
and the brand name; if there is none and no explicit request for concepts, stop and ask. Set up the job (Craft jobs in
craft-studio: slug rule, job-helper) and run Resume.
# run from the directory that contains craft-jobs/ (SLUG set as in step 0)
jq -e '.name and .workflow and (.steps | type == "object")' "craft-jobs/$SLUG/job.json"
Step 1 — Logo to vector
Output: 01-logo/logo.svg and its preview 01-logo/preview.png.
Gate: pi-craft verify on the preview — --size = the logo's size (×scale), --alpha.
An svg input is copied as-is. A raster logo is traced: open it, select it, imageTrace.makeAndExpand (preset Flat Logo
for flat-colour marks, Black and White Logo for one colour; ignoreWhite drops a white background), export svg.
Look at the preview before going on — tracing a photo or a gradient logo gives a poor mark.
pi-craft vectorcraft exec run --in logo.png --cmd select.all \
--cmd imageTrace.makeAndExpand --params '{"preset":"Flat Logo","params":{"ignoreWhite":true}}' --export "$JOB/01-logo/logo.svg"
pi-craft vectorcraft exec convert "$JOB/01-logo/logo.svg" "$JOB/01-logo/preview.png"
pi-craft verify "$JOB/01-logo/preview.png" --size 400x200 --alpha
Step 2 — Variants
Output: 02-variants/logo-black.svg, 02-variants/logo-white.svg (one-colour versions) and their previews.
Gate: pi-craft verify on each preview — --size, --alpha.
Recolour with paint.setFill on a selection (select.all); write each variant to a new name. Derived assets are
labelled concept in the one-pager until the user approves the brand.
pi-craft vectorcraft exec run --in "$JOB/01-logo/logo.svg" --cmd select.all --cmd paint.setFill --params '{"color":"#000000"}' --export "$JOB/02-variants/logo-black.svg"
pi-craft vectorcraft exec convert "$JOB/02-variants/logo-black.svg" "$JOB/02-variants/logo-black.png"
pi-craft verify "$JOB/02-variants/logo-black.png" --size 400x200 --alpha
Step 3 — Raster export set
Output: 03-raster/logo-1600.png, logo-800.png, logo-400.png and logo-print.tif.
Gate: pi-craft verify — --size on every file, --alpha on the png files only.
Render one large master from the svg (--scale 4), then let PhotoCraft resize it to each size; the tiff is the print copy.
Keep the aspect ratio exact (h = w × height / width).
pi-craft vectorcraft exec convert "$JOB/01-logo/logo.svg" "$JOB/03-raster/master.png" --scale 4
pi-craft photocraft exec run "$JOB/03-raster/master.png" --cmd image.imageSize --params '{"width":800,"height":400}' --out "$JOB/03-raster/logo-800.png"
pi-craft photocraft exec run "$JOB/03-raster/master.png" --out "$JOB/03-raster/logo-print.tif"
pi-craft verify "$JOB/03-raster/logo-800.png" --size 800x400 --alpha
pi-craft verify "$JOB/03-raster/logo-print.tif" --size 1600x800
Step 4 — Brand sheet
Output: 04-sheet/sheet.pdf (one A4 page) and 04-sheet/sheet.png.
Gate: pi-craft verify — --pages 1, --text-contains "<brand name>".
DesignCraft script: a text frame (frame.create content:"text" then story.setText) and a graphic frame
(content:"graphic") the png is placed into with file.place ($N.id refers to the result of step N, 0-based). Place the
png variant, never the svg. script … --export x.png rasterises at 2×, A4 → 1191×1684.
cat > "$JOB/04-sheet/sheet.script" <<EOF
file.new={"preset":"A4","title":"$BRAND brand sheet"}
frame.create={"rect":[50,50,545,120],"content":"text"}
story.setText={"story":"\$1.story","text":"$BRAND"}
frame.create={"rect":[50,150,350,300],"content":"graphic"}
file.place={"path":"$PWD/$JOB/03-raster/logo-800.png","frame":"\$3.id"}
EOF
pi-craft designcraft exec script "$JOB/04-sheet/sheet.script" --export "$JOB/04-sheet/sheet.pdf" --export "$JOB/04-sheet/sheet.png"
pi-craft verify "$JOB/04-sheet/sheet.pdf" --pages 1 --text-contains "$BRAND"
Step 5 — Package
Output: 05-package/brand-kit.pdf.
Gate: pi-craft verify — --pages, --text-contains "<brand name>".
pdfcraft-cli edit sets the metadata (and combine appends further pdfs). Protect with a password only when asked: use the
0600 temp-file recipe of craft-doc-publish step 3; the password never goes into job.json or a report.
pi-craft pdfcraft exec edit "$JOB/04-sheet/sheet.pdf" --out "$JOB/05-package/brand-kit.pdf" --title "$BRAND brand kit" --author "$BRAND"
pi-craft verify "$JOB/05-package/brand-kit.pdf" --pages 1 --text-contains "$BRAND"
Generated concepts (opt-in)
Only on an explicit user request for generated logo concepts (never as a default, never because no logo was given):
invoke anti-slop-brandkit unchanged under its own rules — new-site work, its own confirmed paid-plan gate, outputs in
its mockup folder, no auto-applied identity. If pi-nano-banana has no usable credentials, say so and offer to start from a
user-supplied logo instead. Until the user has approved a concept, no image is generated, and a concept is used as step 1's
input only after that approval. Everything derived from a concept stays labelled concept until the user approves the brand.
Resume
Follow the Craft jobs convention in craft-studio: read craft-jobs/<slug>/job.json as data, confirm the job name, and start
at the first step with no passing report or whose recorded inputs (path, size, mtime) changed — a replaced logo, a new brand
name. Re-run every step downstream of it (a new logo re-traces, re-exports and re-lays out everything) and reuse the verified
outputs before it. Record each step with the job-helper snippet after its gate passed.
When a gate fails
Stop at the failed gate; never continue past it. Re-discover the commands you used (pi-craft vectorcraft exec commands | jq …
— VectorCraft has no describe; pi-craft designcraft exec describe <id>; pi-craft photocraft exec commands --filter <word>),
repeat the step and re-run the gate. At most 2 retries per step; after the second failure stop and report the verify output and
what was tried. pi-craft verify exit 3 means a probe tool is missing (ffprobe, or PdfCraft cannot be provisioned): stop and
report the missing tool — never treat it as a pass.
Recipes
# A raster logo -> traced svg -> black variant -> png/tif set -> one-page sheet -> packaged pdf, every svg gated by its png preview.
ffmpeg -v error -y -f lavfi -i "color=c=white:s=400x200,drawbox=x=40:y=40:w=120:h=120:color=red:t=fill,drawbox=x=220:y=60:w=100:h=80:color=blue:t=fill" -frames:v 1 logo.png
mkdir -p 01-logo 02-variants 03-raster 04-sheet 05-package
BRAND="ACME"
pi-craft vectorcraft exec run --in logo.png --cmd select.all \
--cmd imageTrace.makeAndExpand --params '{"preset":"Flat Logo","params":{"ignoreWhite":true}}' --export 01-logo/logo.svg
pi-craft vectorcraft exec convert 01-logo/logo.svg 01-logo/preview.png
pi-craft verify 01-logo/preview.png --size 400x200 --alpha
pi-craft vectorcraft exec run --in 01-logo/logo.svg --cmd select.all --cmd paint.setFill --params '{"color":"#000000"}' --export 02-variants/logo-black.svg
pi-craft vectorcraft exec convert 02-variants/logo-black.svg 02-variants/logo-black.png
pi-craft verify 02-variants/logo-black.png --size 400x200 --alpha
pi-craft vectorcraft exec convert 01-logo/logo.svg 03-raster/master.png --scale 4
pi-craft photocraft exec run 03-raster/master.png --cmd image.imageSize --params '{"width":800,"height":400}' --out 03-raster/logo-800.png
pi-craft photocraft exec run 03-raster/master.png --out 03-raster/logo-print.tif
pi-craft verify 03-raster/logo-800.png --size 800x400 --alpha
pi-craft verify 03-raster/logo-print.tif --size 1600x800
cat > 04-sheet/sheet.script <<EOF
file.new={"preset":"A4","title":"$BRAND brand sheet"}
frame.create={"rect":[50,50,545,120],"content":"text"}
story.setText={"story":"\$1.story","text":"$BRAND"}
frame.create={"rect":[50,150,350,300],"content":"graphic"}
file.place={"path":"$PWD/03-raster/logo-800.png","frame":"\$3.id"}
EOF
pi-craft designcraft exec script 04-sheet/sheet.script --export 04-sheet/sheet.pdf --export 04-sheet/sheet.png
pi-craft verify 04-sheet/sheet.pdf --pages 1 --text-contains "$BRAND"
pi-craft pdfcraft exec edit 04-sheet/sheet.pdf --out 05-package/brand-kit.pdf --title "$BRAND brand kit" --author "$BRAND"
pi-craft verify 05-package/brand-kit.pdf --pages 1 --text-contains "$BRAND"
04 同仓库更多 Skills
youtube-srt
Download YouTube subtitles (SRT + timestamped TXT) for a channel, playlist or video via yt-dlp, no media download; optionally mine them into a categorized catalog (e.g. AI models by function, open weights, local runnability, hardware tier). Use on "download the srt of this video", "transcripts of channel X for the last N months", "catalog the models AI Search talked about", "update docs/models".
video-transcription
Transcribe video and audio files to SRT subtitles with speaker diarization using the Soniox (default) or AssemblyAI API. Use when the user wants to transcribe meetings, videos, or audio files. Supports MKV, MP4, MOV, M4A, MP3. Triggers on "/transcribe", "transcribe my meetings", "transcribe videos in ~/Movies", or any request to convert audio/video to text.
speaker-id
Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key. Triggers "who is speaker 2", "put names on the transcript", "label the meeting SRT", "the diarization split one person into three", "enroll my voice". Backed by the pi-voiceid CLI.
veo-showreel-production-kit
Turn a video timeline + voiceover into a reproducible, sliceable Veo 3.1 prompt package with a consistency anchor and AI storyboard sketches.
veo-generator
Render a scripted video project into mp4 clips with the Google Veo 3.1 API. Reads a project's shot package (shots/*.md), one clip per camera cut, reusing each shot's prompt and sketch — world anchor only with `--with-reference`, seed unless `--no-seed`. Use on "render the Veo video for <project>", "generate the videos from the shot scripts", "make the clips with Veo".
hyperframes-showreel
Turn real screen and site footage into a rhythmic showreel rendered with HyperFrames: sampling, edit script, redacted clips, a generated composition, Veo only as additive FX, music edit + camera punches, delivery render and export QA. Use on "make a showreel from these recordings", "build the HyperFrames video", "assemble the footage edit", "render and QA the showreel".