Loading...
Loading...
Per-client asset templates scoped by workspace.
npx skill4agent add picsart/gen-ai-skills agency-multi-brand-packagency-pitch-mockupsacme-fintechzest-retailnova-travelbrand-system.jsonclient:<slug>gen-ai historybrand-system.jsonbrand.mdagency-brand-scoping1. VERIFY BRANDS → every client in scope has clients/<slug>/brand.md + brand-system.json
2. SCAFFOLD → build per-client manifest fragments, merge into one master manifest
3. ESTIMATE → gen-ai batch run <manifest.json> --dry-run + estimate; break into smaller batches if > $20
4. RUN → `gen-ai batch run <manifest.json>` with client names in job IDs and a resume-ready output dir
5. VERIFY → per-client output folders populated; cross-check any NULLs in results.json
6. AUDIT → export per-client spend + asset list for billing
7. DELIVER → folder per client, approved files uploaded or linked in the retainer channelout/<slug>/...brand.mdidresults.jsongen-ai batch resume <output-dir>gen-ai batch resume <output-dir>{
"batch_kind": "multi-brand-pack",
"week": "2026-04-22",
"defaults": { "model": "recraftv4", "aspectRatio": "1:1" },
"clients": [
{ "slug": "acme-fintech", "templates": ["hero", "social-1", "og"] },
{ "slug": "zest-retail", "templates": ["hero", "social-1", "og"] }
]
}jobs[]out/retainer-<date>/manifest.json| Sub-task | Model | Notes |
|---|---|---|
| Per-client hero (default) | | Design-forward, respects brand palette |
| Per-client hero (photo-led brands) | | Override at the job level for photo-heavy clients |
| Social tiles (1:1, 9:16) | | Same brand rules, cheaper |
| OG / readable-headline slides | | Only reliable text rendering |
| Background replacement on product shots | | For ecomm retainers |
| Video cuts per brand | | Per-client concurrency 2 |
out/<slug>/drive:retainer-<date>/<slug>/results.jsonclients[]templates[]results.jsonclients/<slug>/prompts/gen-ai-batch.mdrulesruleshero.webpgen-ai batch resume <output-dir>gen-ai whoami--debugCLIENTS=("acme-fintech" "zest-retail" "nova-travel")
WEEK=$(date +%Y-%m-%d)
# Sanity check: every client has a brand file
for c in "${CLIENTS[@]}"; do
test -f "clients/$c/brand.md" || { echo "Missing brand.md for $c"; exit 1; }
donecat > /tmp/multi-brand-$WEEK.json <<'EOF'
{
"defaults": { "model": "recraftv4", "aspectRatio": "1:1" },
"jobs": [
{ "id": "acme-fintech/hero", "prompt": "acme-fintech Q2 hero — editorial, restrained", "aspectRatio": "16:9" },
{ "id": "acme-fintech/og", "prompt": "acme-fintech OG — headline: Q2 launch", "aspectRatio": "1200x630", "model": "ideogram-v3" },
{ "id": "zest-retail/hero", "prompt": "zest-retail Q2 hero — playful, bold color", "aspectRatio": "16:9" },
{ "id": "nova-travel/hero", "prompt": "nova-travel Q2 hero — cinematic wide", "aspectRatio": "16:9", "model": "flux-2-pro" }
]
}
EOF
gen-ai batch run /tmp/multi-brand-$WEEK.json --dry-run
gen-ai batch run /tmp/multi-brand-$WEEK.json -c 4 -o "out/retainer-$WEEK"/idout/retainer-<date>/<client-slug>/<asset>.webpresults.json# Per-client completion breakdown from results.json
node -e '
const r = require("./out/retainer-2026-04-22/results.json");
const by = {};
for (const j of r.jobs) {
const c = j.id.split("/")[0];
by[c] ||= { completed: 0, failed: 0 };
by[c][j.status] = (by[c][j.status] || 0) + 1;
}
console.table(by);
'retainer-$WEEK/<client-slug>/gen-ai pricing| Phase | Typical spend | Typical time |
|---|---|---|
| Scoping (per new client, one-time) | ~$1 | 30 min |
| Production (weekly retainer, 8 clients × 4 assets) | $15-30 | 20-40 min batch + review |
| Flagship-model upgrade pass (2-3 hero upgrades) | $5-10 | 10-15 min |
results.jsonworkflows/agency-brand-scoping/workflows/agency-pitch-mockups/workflows/agency-client-handoff/gen-ai-batch.mdgen-ai batch resume <output-dir>