[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HQJYJNHCVBEP78AD6CSR28":3,"skill-same:01M6HQJYJNHCVBEP78AD6CSR28":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":55,"linkOnly":56,"markdownContent":57,"markdownBody":58,"frontMatter":59,"refName":60,"commitSha":61,"skillDirectory":62,"forksCount":63,"repositoryHtmlUrl":64,"repositoryHomepageUrl":65,"ownerHtmlUrl":66,"ownerBlogUrl":67,"ownerDescription":6,"updatedAt":68,"install":69,"resources":82},"01M6HQJYJNHCVBEP78AD6CSR28","craft-brand-kit",null,"Build a brand kit from a logo with ArtCraft apps - trace or take the vector logo, colour\u002Fmono variants, PNG\u002FTIFF 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\".","BlackBeltTechnology\u002Fpi-agent-dashboard","BlackBeltTechnology","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8101592?v=4","01M6HQDX7QAJA0QP4NYRYBMJ8A","BlackBelt Technology","01M6HQDXCC7719N9YDMQVH9JS6",348,"MIT","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fcraft-apps\u002F.pi\u002Fskills\u002Fcraft-brand-kit\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],"brand kit","brand","craft brand kit","kit","craft","acme","variants","request","verified","my","one-page","colour","concepts","apps","PDF","mono","take","only","export","generated","logo","SET","vector","2026-11-10 10:12:30",false,"---\nname: craft-brand-kit\ndescription: Build a brand kit from a logo with ArtCraft apps - trace or take the vector logo, colour\u002Fmono variants, PNG\u002FTIFF 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\".\n---\n\n# craft-brand-kit — logo → vector variants → raster set → brand sheet → PDF package\n\nStarts from a **user-supplied logo** (an `svg` is used as-is; a raster logo is traced with VectorCraft `imageTrace`).\nVectorCraft makes the vector variants, PhotoCraft the raster export set, DesignCraft the one-page sheet, PdfCraft the package.\nRead `vectorcraft`, `photocraft`, `designcraft` and `pdfcraft` first. Resumable-job rules are in the `craft-studio` router,\nsection **Craft jobs**. Passwords and API keys are never written to `job.json`, gate reports or step files.\n\n## Step table\n\n| # | Step | Tool | Input → Output | Gate |\n|---|---|---|---|---|\n| 0 | Preflight + job | agent | request → `job.json` | `check: job` |\n| 1 | Logo to vector | VectorCraft | `logo.svg` or `logo.png` → `01-logo\u002Flogo.svg` | preview `png` + `pi-craft verify --size --alpha` |\n| 2 | Variants | VectorCraft | `logo.svg` → `02-variants\u002Flogo-black.svg`, `logo-white.svg` | preview `png` + `pi-craft verify --size` |\n| 3 | Raster set | PhotoCraft | `logo.svg` → `03-raster\u002Flogo-\u003Cw>.png`, `logo-print.tif` | `pi-craft verify --size --alpha` (png) |\n| 4 | Brand sheet | DesignCraft | logo + name → `04-sheet\u002Fsheet.pdf` | `pi-craft verify --pages --text-contains` |\n| 5 | Package | PdfCraft | sheet → `05-package\u002Fbrand-kit.pdf` | `pi-craft verify --pages --text-contains` |\n\nHand-off formats: `svg` between vector steps (+ `pdf` for print), `png` with alpha for screens, `tiff` for print, `pdf` for\ndelivery. An `svg` is **never** passed to `pi-craft verify` (it has no vector probe): gate its `png` preview\n(`vectorcraft-cli convert x.svg x.png --scale N`, then `--size`). `--alpha` is asserted on png only.\n\n### Step 0 — Preflight and job\n\n**Output:** `craft-jobs\u002F\u003Cslug>\u002Fjob.json` (created or loaded).\n**Gate:** `check: job`.\n\n| Sibling | Package | Check | If missing |\n|---|---|---|---|\n| `anti-slop-brandkit` | `@blackbelt-technology\u002Fanti-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 |\n| `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 |\n\n\"Loaded skill list\" is the available-skills list in your own system prompt. Ask for the logo (`svg` or a raster `png`\u002F`jpg`)\nand the brand name; if there is none and no explicit request for concepts, stop and ask. Set up the job (**Craft jobs** in\n`craft-studio`: slug rule, `job-helper`) and run **Resume**.\n\n```bash check: job\n# run from the directory that contains craft-jobs\u002F (SLUG set as in step 0)\njq -e '.name and .workflow and (.steps | type == \"object\")' \"craft-jobs\u002F$SLUG\u002Fjob.json\"\n```\n\n### Step 1 — Logo to vector\n\n**Output:** `01-logo\u002Flogo.svg` and its preview `01-logo\u002Fpreview.png`.\n**Gate:** `pi-craft verify` on the preview — `--size` = the logo's size (×scale), `--alpha`.\n\nAn `svg` input is copied as-is. A raster logo is traced: open it, select it, `imageTrace.makeAndExpand` (preset `Flat Logo`\nfor flat-colour marks, `Black and White Logo` for one colour; `ignoreWhite` drops a white background), export `svg`.\nLook at the preview before going on — tracing a photo or a gradient logo gives a poor mark.\n\n```bash\npi-craft vectorcraft exec run --in logo.png --cmd select.all \\\n  --cmd imageTrace.makeAndExpand --params '{\"preset\":\"Flat Logo\",\"params\":{\"ignoreWhite\":true}}' --export \"$JOB\u002F01-logo\u002Flogo.svg\"\npi-craft vectorcraft exec convert \"$JOB\u002F01-logo\u002Flogo.svg\" \"$JOB\u002F01-logo\u002Fpreview.png\"\npi-craft verify \"$JOB\u002F01-logo\u002Fpreview.png\" --size 400x200 --alpha\n```\n\n### Step 2 — Variants\n\n**Output:** `02-variants\u002Flogo-black.svg`, `02-variants\u002Flogo-white.svg` (one-colour versions) and their previews.\n**Gate:** `pi-craft verify` on each preview — `--size`, `--alpha`.\n\nRecolour with `paint.setFill` on a selection (`select.all`); write each variant to a **new** name. Derived assets are\nlabelled *concept* in the one-pager until the user approves the brand.\n\n```bash\npi-craft vectorcraft exec run --in \"$JOB\u002F01-logo\u002Flogo.svg\" --cmd select.all --cmd paint.setFill --params '{\"color\":\"#000000\"}' --export \"$JOB\u002F02-variants\u002Flogo-black.svg\"\npi-craft vectorcraft exec convert \"$JOB\u002F02-variants\u002Flogo-black.svg\" \"$JOB\u002F02-variants\u002Flogo-black.png\"\npi-craft verify \"$JOB\u002F02-variants\u002Flogo-black.png\" --size 400x200 --alpha\n```\n\n### Step 3 — Raster export set\n\n**Output:** `03-raster\u002Flogo-1600.png`, `logo-800.png`, `logo-400.png` and `logo-print.tif`.\n**Gate:** `pi-craft verify` — `--size` on every file, `--alpha` on the png files only.\n\nRender one large master from the svg (`--scale 4`), then let PhotoCraft resize it to each size; the tiff is the print copy.\nKeep the aspect ratio exact (`h = w × height \u002F width`).\n\n```bash\npi-craft vectorcraft exec convert \"$JOB\u002F01-logo\u002Flogo.svg\" \"$JOB\u002F03-raster\u002Fmaster.png\" --scale 4\npi-craft photocraft exec run \"$JOB\u002F03-raster\u002Fmaster.png\" --cmd image.imageSize --params '{\"width\":800,\"height\":400}' --out \"$JOB\u002F03-raster\u002Flogo-800.png\"\npi-craft photocraft exec run \"$JOB\u002F03-raster\u002Fmaster.png\" --out \"$JOB\u002F03-raster\u002Flogo-print.tif\"\npi-craft verify \"$JOB\u002F03-raster\u002Flogo-800.png\" --size 800x400 --alpha\npi-craft verify \"$JOB\u002F03-raster\u002Flogo-print.tif\" --size 1600x800\n```\n\n### Step 4 — Brand sheet\n\n**Output:** `04-sheet\u002Fsheet.pdf` (one A4 page) and `04-sheet\u002Fsheet.png`.\n**Gate:** `pi-craft verify` — `--pages 1`, `--text-contains \"\u003Cbrand name>\"`.\n\nDesignCraft `script`: a text frame (`frame.create` `content:\"text\"` then `story.setText`) and a graphic frame\n(`content:\"graphic\"`) the png is placed into with `file.place` (`$N.id` refers to the result of step N, 0-based). Place the\n**png** variant, never the svg. `script … --export x.png` rasterises at 2×, A4 → 1191×1684.\n\n```bash\ncat > \"$JOB\u002F04-sheet\u002Fsheet.script\" \u003C\u003CEOF\nfile.new={\"preset\":\"A4\",\"title\":\"$BRAND brand sheet\"}\nframe.create={\"rect\":[50,50,545,120],\"content\":\"text\"}\nstory.setText={\"story\":\"\\$1.story\",\"text\":\"$BRAND\"}\nframe.create={\"rect\":[50,150,350,300],\"content\":\"graphic\"}\nfile.place={\"path\":\"$PWD\u002F$JOB\u002F03-raster\u002Flogo-800.png\",\"frame\":\"\\$3.id\"}\nEOF\npi-craft designcraft exec script \"$JOB\u002F04-sheet\u002Fsheet.script\" --export \"$JOB\u002F04-sheet\u002Fsheet.pdf\" --export \"$JOB\u002F04-sheet\u002Fsheet.png\"\npi-craft verify \"$JOB\u002F04-sheet\u002Fsheet.pdf\" --pages 1 --text-contains \"$BRAND\"\n```\n\n### Step 5 — Package\n\n**Output:** `05-package\u002Fbrand-kit.pdf`.\n**Gate:** `pi-craft verify` — `--pages`, `--text-contains \"\u003Cbrand name>\"`.\n\n`pdfcraft-cli edit` sets the metadata (and `combine` appends further pdfs). Protect with a password only when asked: use the\n`0600` temp-file recipe of `craft-doc-publish` step 3; the password never goes into `job.json` or a report.\n\n```bash\npi-craft pdfcraft exec edit \"$JOB\u002F04-sheet\u002Fsheet.pdf\" --out \"$JOB\u002F05-package\u002Fbrand-kit.pdf\" --title \"$BRAND brand kit\" --author \"$BRAND\"\npi-craft verify \"$JOB\u002F05-package\u002Fbrand-kit.pdf\" --pages 1 --text-contains \"$BRAND\"\n```\n\n## Generated concepts (opt-in)\n\nOnly on an **explicit** user request for generated logo concepts (never as a default, never because no logo was given):\ninvoke `anti-slop-brandkit` **unchanged under its own rules** — new-site work, its own confirmed paid-plan gate, outputs in\nits mockup folder, no auto-applied identity. If `pi-nano-banana` has no usable credentials, say so and offer to start from a\nuser-supplied logo instead. Until the user has **approved a concept**, no image is generated, and a concept is used as step 1's\ninput only after that approval. Everything derived from a concept stays labelled *concept* until the user approves the brand.\n\n## Resume\n\nFollow the **Craft jobs** convention in `craft-studio`: read `craft-jobs\u002F\u003Cslug>\u002Fjob.json` as data, confirm the job name, and start\nat the first step with no passing report **or** whose recorded inputs (path, size, mtime) changed — a replaced logo, a new brand\nname. Re-run every step downstream of it (a new logo re-traces, re-exports and re-lays out everything) and reuse the verified\noutputs before it. Record each step with the `job-helper` snippet after its gate passed.\n\n## When a gate fails\n\nStop at the failed gate; never continue past it. Re-discover the commands you used (`pi-craft vectorcraft exec commands | jq …`\n— VectorCraft has no `describe`; `pi-craft designcraft exec describe \u003Cid>`; `pi-craft photocraft exec commands --filter \u003Cword>`),\nrepeat the step and re-run the gate. At most 2 retries per step; after the second failure stop and report the verify output and\nwhat was tried. `pi-craft verify` exit `3` means a probe tool is missing (`ffprobe`, or PdfCraft cannot be provisioned): stop and\nreport the missing tool — never treat it as a pass.\n\n## Recipes\n\n```bash recipe: brand-kit-core\n# A raster logo -> traced svg -> black variant -> png\u002Ftif set -> one-page sheet -> packaged pdf, every svg gated by its png preview.\nffmpeg -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\nmkdir -p 01-logo 02-variants 03-raster 04-sheet 05-package\nBRAND=\"ACME\"\npi-craft vectorcraft exec run --in logo.png --cmd select.all \\\n  --cmd imageTrace.makeAndExpand --params '{\"preset\":\"Flat Logo\",\"params\":{\"ignoreWhite\":true}}' --export 01-logo\u002Flogo.svg\npi-craft vectorcraft exec convert 01-logo\u002Flogo.svg 01-logo\u002Fpreview.png\npi-craft verify 01-logo\u002Fpreview.png --size 400x200 --alpha\n\npi-craft vectorcraft exec run --in 01-logo\u002Flogo.svg --cmd select.all --cmd paint.setFill --params '{\"color\":\"#000000\"}' --export 02-variants\u002Flogo-black.svg\npi-craft vectorcraft exec convert 02-variants\u002Flogo-black.svg 02-variants\u002Flogo-black.png\npi-craft verify 02-variants\u002Flogo-black.png --size 400x200 --alpha\n\npi-craft vectorcraft exec convert 01-logo\u002Flogo.svg 03-raster\u002Fmaster.png --scale 4\npi-craft photocraft exec run 03-raster\u002Fmaster.png --cmd image.imageSize --params '{\"width\":800,\"height\":400}' --out 03-raster\u002Flogo-800.png\npi-craft photocraft exec run 03-raster\u002Fmaster.png --out 03-raster\u002Flogo-print.tif\npi-craft verify 03-raster\u002Flogo-800.png --size 800x400 --alpha\npi-craft verify 03-raster\u002Flogo-print.tif --size 1600x800\n\ncat > 04-sheet\u002Fsheet.script \u003C\u003CEOF\nfile.new={\"preset\":\"A4\",\"title\":\"$BRAND brand sheet\"}\nframe.create={\"rect\":[50,50,545,120],\"content\":\"text\"}\nstory.setText={\"story\":\"\\$1.story\",\"text\":\"$BRAND\"}\nframe.create={\"rect\":[50,150,350,300],\"content\":\"graphic\"}\nfile.place={\"path\":\"$PWD\u002F03-raster\u002Flogo-800.png\",\"frame\":\"\\$3.id\"}\nEOF\npi-craft designcraft exec script 04-sheet\u002Fsheet.script --export 04-sheet\u002Fsheet.pdf --export 04-sheet\u002Fsheet.png\npi-craft verify 04-sheet\u002Fsheet.pdf --pages 1 --text-contains \"$BRAND\"\n\npi-craft pdfcraft exec edit 04-sheet\u002Fsheet.pdf --out 05-package\u002Fbrand-kit.pdf --title \"$BRAND brand kit\" --author \"$BRAND\"\npi-craft verify 05-package\u002Fbrand-kit.pdf --pages 1 --text-contains \"$BRAND\"\n```\n","# craft-brand-kit — logo → vector variants → raster set → brand sheet → PDF package\n\nStarts from a **user-supplied logo** (an `svg` is used as-is; a raster logo is traced with VectorCraft `imageTrace`).\nVectorCraft makes the vector variants, PhotoCraft the raster export set, DesignCraft the one-page sheet, PdfCraft the package.\nRead `vectorcraft`, `photocraft`, `designcraft` and `pdfcraft` first. Resumable-job rules are in the `craft-studio` router,\nsection **Craft jobs**. Passwords and API keys are never written to `job.json`, gate reports or step files.\n\n## Step table\n\n| # | Step | Tool | Input → Output | Gate |\n|---|---|---|---|---|\n| 0 | Preflight + job | agent | request → `job.json` | `check: job` |\n| 1 | Logo to vector | VectorCraft | `logo.svg` or `logo.png` → `01-logo\u002Flogo.svg` | preview `png` + `pi-craft verify --size --alpha` |\n| 2 | Variants | VectorCraft | `logo.svg` → `02-variants\u002Flogo-black.svg`, `logo-white.svg` | preview `png` + `pi-craft verify --size` |\n| 3 | Raster set | PhotoCraft | `logo.svg` → `03-raster\u002Flogo-\u003Cw>.png`, `logo-print.tif` | `pi-craft verify --size --alpha` (png) |\n| 4 | Brand sheet | DesignCraft | logo + name → `04-sheet\u002Fsheet.pdf` | `pi-craft verify --pages --text-contains` |\n| 5 | Package | PdfCraft | sheet → `05-package\u002Fbrand-kit.pdf` | `pi-craft verify --pages --text-contains` |\n\nHand-off formats: `svg` between vector steps (+ `pdf` for print), `png` with alpha for screens, `tiff` for print, `pdf` for\ndelivery. An `svg` is **never** passed to `pi-craft verify` (it has no vector probe): gate its `png` preview\n(`vectorcraft-cli convert x.svg x.png --scale N`, then `--size`). `--alpha` is asserted on png only.\n\n### Step 0 — Preflight and job\n\n**Output:** `craft-jobs\u002F\u003Cslug>\u002Fjob.json` (created or loaded).\n**Gate:** `check: job`.\n\n| Sibling | Package | Check | If missing |\n|---|---|---|---|\n| `anti-slop-brandkit` | `@blackbelt-technology\u002Fanti-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 |\n| `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 |\n\n\"Loaded skill list\" is the available-skills list in your own system prompt. Ask for the logo (`svg` or a raster `png`\u002F`jpg`)\nand the brand name; if there is none and no explicit request for concepts, stop and ask. Set up the job (**Craft jobs** in\n`craft-studio`: slug rule, `job-helper`) and run **Resume**.\n\n```bash check: job\n# run from the directory that contains craft-jobs\u002F (SLUG set as in step 0)\njq -e '.name and .workflow and (.steps | type == \"object\")' \"craft-jobs\u002F$SLUG\u002Fjob.json\"\n```\n\n### Step 1 — Logo to vector\n\n**Output:** `01-logo\u002Flogo.svg` and its preview `01-logo\u002Fpreview.png`.\n**Gate:** `pi-craft verify` on the preview — `--size` = the logo's size (×scale), `--alpha`.\n\nAn `svg` input is copied as-is. A raster logo is traced: open it, select it, `imageTrace.makeAndExpand` (preset `Flat Logo`\nfor flat-colour marks, `Black and White Logo` for one colour; `ignoreWhite` drops a white background), export `svg`.\nLook at the preview before going on — tracing a photo or a gradient logo gives a poor mark.\n\n```bash\npi-craft vectorcraft exec run --in logo.png --cmd select.all \\\n  --cmd imageTrace.makeAndExpand --params '{\"preset\":\"Flat Logo\",\"params\":{\"ignoreWhite\":true}}' --export \"$JOB\u002F01-logo\u002Flogo.svg\"\npi-craft vectorcraft exec convert \"$JOB\u002F01-logo\u002Flogo.svg\" \"$JOB\u002F01-logo\u002Fpreview.png\"\npi-craft verify \"$JOB\u002F01-logo\u002Fpreview.png\" --size 400x200 --alpha\n```\n\n### Step 2 — Variants\n\n**Output:** `02-variants\u002Flogo-black.svg`, `02-variants\u002Flogo-white.svg` (one-colour versions) and their previews.\n**Gate:** `pi-craft verify` on each preview — `--size`, `--alpha`.\n\nRecolour with `paint.setFill` on a selection (`select.all`); write each variant to a **new** name. Derived assets are\nlabelled *concept* in the one-pager until the user approves the brand.\n\n```bash\npi-craft vectorcraft exec run --in \"$JOB\u002F01-logo\u002Flogo.svg\" --cmd select.all --cmd paint.setFill --params '{\"color\":\"#000000\"}' --export \"$JOB\u002F02-variants\u002Flogo-black.svg\"\npi-craft vectorcraft exec convert \"$JOB\u002F02-variants\u002Flogo-black.svg\" \"$JOB\u002F02-variants\u002Flogo-black.png\"\npi-craft verify \"$JOB\u002F02-variants\u002Flogo-black.png\" --size 400x200 --alpha\n```\n\n### Step 3 — Raster export set\n\n**Output:** `03-raster\u002Flogo-1600.png`, `logo-800.png`, `logo-400.png` and `logo-print.tif`.\n**Gate:** `pi-craft verify` — `--size` on every file, `--alpha` on the png files only.\n\nRender one large master from the svg (`--scale 4`), then let PhotoCraft resize it to each size; the tiff is the print copy.\nKeep the aspect ratio exact (`h = w × height \u002F width`).\n\n```bash\npi-craft vectorcraft exec convert \"$JOB\u002F01-logo\u002Flogo.svg\" \"$JOB\u002F03-raster\u002Fmaster.png\" --scale 4\npi-craft photocraft exec run \"$JOB\u002F03-raster\u002Fmaster.png\" --cmd image.imageSize --params '{\"width\":800,\"height\":400}' --out \"$JOB\u002F03-raster\u002Flogo-800.png\"\npi-craft photocraft exec run \"$JOB\u002F03-raster\u002Fmaster.png\" --out \"$JOB\u002F03-raster\u002Flogo-print.tif\"\npi-craft verify \"$JOB\u002F03-raster\u002Flogo-800.png\" --size 800x400 --alpha\npi-craft verify \"$JOB\u002F03-raster\u002Flogo-print.tif\" --size 1600x800\n```\n\n### Step 4 — Brand sheet\n\n**Output:** `04-sheet\u002Fsheet.pdf` (one A4 page) and `04-sheet\u002Fsheet.png`.\n**Gate:** `pi-craft verify` — `--pages 1`, `--text-contains \"\u003Cbrand name>\"`.\n\nDesignCraft `script`: a text frame (`frame.create` `content:\"text\"` then `story.setText`) and a graphic frame\n(`content:\"graphic\"`) the png is placed into with `file.place` (`$N.id` refers to the result of step N, 0-based). Place the\n**png** variant, never the svg. `script … --export x.png` rasterises at 2×, A4 → 1191×1684.\n\n```bash\ncat > \"$JOB\u002F04-sheet\u002Fsheet.script\" \u003C\u003CEOF\nfile.new={\"preset\":\"A4\",\"title\":\"$BRAND brand sheet\"}\nframe.create={\"rect\":[50,50,545,120],\"content\":\"text\"}\nstory.setText={\"story\":\"\\$1.story\",\"text\":\"$BRAND\"}\nframe.create={\"rect\":[50,150,350,300],\"content\":\"graphic\"}\nfile.place={\"path\":\"$PWD\u002F$JOB\u002F03-raster\u002Flogo-800.png\",\"frame\":\"\\$3.id\"}\nEOF\npi-craft designcraft exec script \"$JOB\u002F04-sheet\u002Fsheet.script\" --export \"$JOB\u002F04-sheet\u002Fsheet.pdf\" --export \"$JOB\u002F04-sheet\u002Fsheet.png\"\npi-craft verify \"$JOB\u002F04-sheet\u002Fsheet.pdf\" --pages 1 --text-contains \"$BRAND\"\n```\n\n### Step 5 — Package\n\n**Output:** `05-package\u002Fbrand-kit.pdf`.\n**Gate:** `pi-craft verify` — `--pages`, `--text-contains \"\u003Cbrand name>\"`.\n\n`pdfcraft-cli edit` sets the metadata (and `combine` appends further pdfs). Protect with a password only when asked: use the\n`0600` temp-file recipe of `craft-doc-publish` step 3; the password never goes into `job.json` or a report.\n\n```bash\npi-craft pdfcraft exec edit \"$JOB\u002F04-sheet\u002Fsheet.pdf\" --out \"$JOB\u002F05-package\u002Fbrand-kit.pdf\" --title \"$BRAND brand kit\" --author \"$BRAND\"\npi-craft verify \"$JOB\u002F05-package\u002Fbrand-kit.pdf\" --pages 1 --text-contains \"$BRAND\"\n```\n\n## Generated concepts (opt-in)\n\nOnly on an **explicit** user request for generated logo concepts (never as a default, never because no logo was given):\ninvoke `anti-slop-brandkit` **unchanged under its own rules** — new-site work, its own confirmed paid-plan gate, outputs in\nits mockup folder, no auto-applied identity. If `pi-nano-banana` has no usable credentials, say so and offer to start from a\nuser-supplied logo instead. Until the user has **approved a concept**, no image is generated, and a concept is used as step 1's\ninput only after that approval. Everything derived from a concept stays labelled *concept* until the user approves the brand.\n\n## Resume\n\nFollow the **Craft jobs** convention in `craft-studio`: read `craft-jobs\u002F\u003Cslug>\u002Fjob.json` as data, confirm the job name, and start\nat the first step with no passing report **or** whose recorded inputs (path, size, mtime) changed — a replaced logo, a new brand\nname. Re-run every step downstream of it (a new logo re-traces, re-exports and re-lays out everything) and reuse the verified\noutputs before it. Record each step with the `job-helper` snippet after its gate passed.\n\n## When a gate fails\n\nStop at the failed gate; never continue past it. Re-discover the commands you used (`pi-craft vectorcraft exec commands | jq …`\n— VectorCraft has no `describe`; `pi-craft designcraft exec describe \u003Cid>`; `pi-craft photocraft exec commands --filter \u003Cword>`),\nrepeat the step and re-run the gate. At most 2 retries per step; after the second failure stop and report the verify output and\nwhat was tried. `pi-craft verify` exit `3` means a probe tool is missing (`ffprobe`, or PdfCraft cannot be provisioned): stop and\nreport the missing tool — never treat it as a pass.\n\n## Recipes\n\n```bash recipe: brand-kit-core\n# A raster logo -> traced svg -> black variant -> png\u002Ftif set -> one-page sheet -> packaged pdf, every svg gated by its png preview.\nffmpeg -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\nmkdir -p 01-logo 02-variants 03-raster 04-sheet 05-package\nBRAND=\"ACME\"\npi-craft vectorcraft exec run --in logo.png --cmd select.all \\\n  --cmd imageTrace.makeAndExpand --params '{\"preset\":\"Flat Logo\",\"params\":{\"ignoreWhite\":true}}' --export 01-logo\u002Flogo.svg\npi-craft vectorcraft exec convert 01-logo\u002Flogo.svg 01-logo\u002Fpreview.png\npi-craft verify 01-logo\u002Fpreview.png --size 400x200 --alpha\n\npi-craft vectorcraft exec run --in 01-logo\u002Flogo.svg --cmd select.all --cmd paint.setFill --params '{\"color\":\"#000000\"}' --export 02-variants\u002Flogo-black.svg\npi-craft vectorcraft exec convert 02-variants\u002Flogo-black.svg 02-variants\u002Flogo-black.png\npi-craft verify 02-variants\u002Flogo-black.png --size 400x200 --alpha\n\npi-craft vectorcraft exec convert 01-logo\u002Flogo.svg 03-raster\u002Fmaster.png --scale 4\npi-craft photocraft exec run 03-raster\u002Fmaster.png --cmd image.imageSize --params '{\"width\":800,\"height\":400}' --out 03-raster\u002Flogo-800.png\npi-craft photocraft exec run 03-raster\u002Fmaster.png --out 03-raster\u002Flogo-print.tif\npi-craft verify 03-raster\u002Flogo-800.png --size 800x400 --alpha\npi-craft verify 03-raster\u002Flogo-print.tif --size 1600x800\n\ncat > 04-sheet\u002Fsheet.script \u003C\u003CEOF\nfile.new={\"preset\":\"A4\",\"title\":\"$BRAND brand sheet\"}\nframe.create={\"rect\":[50,50,545,120],\"content\":\"text\"}\nstory.setText={\"story\":\"\\$1.story\",\"text\":\"$BRAND\"}\nframe.create={\"rect\":[50,150,350,300],\"content\":\"graphic\"}\nfile.place={\"path\":\"$PWD\u002F03-raster\u002Flogo-800.png\",\"frame\":\"\\$3.id\"}\nEOF\npi-craft designcraft exec script 04-sheet\u002Fsheet.script --export 04-sheet\u002Fsheet.pdf --export 04-sheet\u002Fsheet.png\npi-craft verify 04-sheet\u002Fsheet.pdf --pages 1 --text-contains \"$BRAND\"\n\npi-craft pdfcraft exec edit 04-sheet\u002Fsheet.pdf --out 05-package\u002Fbrand-kit.pdf --title \"$BRAND brand kit\" --author \"$BRAND\"\npi-craft verify 05-package\u002Fbrand-kit.pdf --pages 1 --text-contains \"$BRAND\"\n```\n",{"name":5,"description":7},"develop","fb9a5af356f540de4839ef851ebbe14bcce64c0f","packages\u002Fcraft-apps\u002F.pi\u002Fskills\u002Fcraft-brand-kit",55,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard","https:\u002F\u002Fpi-dashboard.dev\u002F","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology","https:\u002F\u002Fwww.blackbelt.hu","2026-11-12 23:37:37",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill craft-brand-kit",{"tool":75,"command":76},"bunx","bunx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill craft-brand-kit",{"tool":78,"command":79},"pnpm","pnpm dlx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill craft-brand-kit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fcraft-apps\u002F.pi\u002Fskills\u002Fcraft-brand-kit\u002FSKILL.md",true,[],[84,115,144,166,189,213],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":55},"01M6HQYQ5B82AM5T9Y299S9CFY","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\u002Fmodels\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fyoutube-srt\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114],"youtube","srt","youtube srt","update","search","subtitles","dlp","Video","Media","open","catalog","use","update docs","yt-dlp","local","mine","via","ai models","last","for","media download",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":125,"publishedAt":55},"01M6HQYJBKSXR55T5RSYNJQG4D","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 \"\u002Ftranscribe\", \"transcribe my meetings\", \"transcribe videos in ~\u002FMovies\", or any request to convert audio\u002Fvideo to text.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fvideo-transcription\u002FSKILL.md",[121,124],{"categoryNo":122,"categoryName":123,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},[101,126,127,128,99,129,130,131,132,133,134,105,135,136,137,138,139,140,141,95,41,142,39,143],"transcription","video transcription","transcribe","api","Audio","convert","mp4","text","meetings","files","default","mp3","triggers","with","videos","assemblyai","srt subtitles","when",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":55},"01M6HQYECMVDC5TDHHW22VC5RX","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.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fspeaker-id\u002FSKILL.md",[],[151,152,153,154,129,155,156,49,157,158,159,108,138,160,161,162,163,95,164,165],"id","speaker id","cli","transcript","voice","pi","three","drift","repair","name","CPU","meeting","anonymous","split","person",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":175,"publishedAt":55},"01M6HQYAZWDXE9QJEG592E5PXK","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.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fveo-showreel-production-kit\u002FSKILL.md",[172],{"categoryNo":173,"categoryName":174,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[176,177,35,178,179,180,181,101,182,183,184,185,139,186,187,188],"Production","veo","veo showreel production kit","package","Reproducible","timeline","prompt","voiceover","storyboard","anchor","consistency","veo 3","2026",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":197,"publishedAt":55},"01M6HQY6TJ0X1ADDKYPMVJY6NV","veo-generator","Render a scripted video project into mp4 clips with the Google Veo 3.1 API. Reads a project's shot package (shots\u002F*.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 \u003Cproject>\", \"generate the videos from the shot scripts\", \"make the clips with Veo\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fveo-generator\u002FSKILL.md",[195,196],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":173,"categoryName":174,"taxonomyType":21,"taxonomyTypeDesc":22},[177,198,199,200,201,179,129,101,132,182,105,202,49,203,204,205,206,207,185,208,209,210,211,139,212,113,187],"generator","veo generator","google","generate","clip","sketch","camera","world","seed","project","cut","scripts","make","render","google veo",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":217,"categories":218,"keywords":219,"publishedAt":55},"01M6HQY1K2NZJ3B2YHSJJPPVAF","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\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fhyperframes-showreel\u002FSKILL.md",[],[220,221,222,101,223,224,51,105,225,50,226,49,227,228,229,230,231,211,139,232],"hyperframes","hyperframes showreel","qa","Composition","edit","assemble","sampling","build","delivery","as","fx","screen","script"]