If you're running AI generation at enterprise scale and need to recreate the exact same output six months or three years later, this is your lockfile. It pins model versions, prompt templates, brand tokens, and seeds to a git-committed manifest so that legal holds, annual campaigns, and regulatory audits don't turn into archaeology. Picsart built this for multi-team deployments where 20+ people need identical output and model drift is a compliance risk, not just an inconvenience. The workflow is straightforward: designers use aliases like "flux" instead of raw version strings, you run a regression corpus before bumping, and everything traces back to a tagged registry version. Not for exploration or drafts, but if reproducibility is a requirement and not a nice-to-have, this is the right shape.
npx -y skills add PicsArt/gen-ai-skills --skill enterprise-pinned-registry --agent claude-codeInstalls into .claude/skills of the current project.
A lockfile concept for AI generation. Model versions, prompts, brand tokens, and seeds are pinned to a manifest that regenerates the same campaign identically six months, a year, or three years later. Built for enterprises that need reproducibility for legal holds, brand-campaign continuity, regulatory defense, and year-over-year comparability.
Do not use for: one-off exploration, draft/ideation phases, consumer projects.
Before authoring the registry:
brand-registry repo, or a central governance repo?Five steps. The registry is the contract; everything generates against it.
registry.json — model aliases, prompt templates, brand tokens, default params. Each alias pins to an explicit model@version.gen-ai config set registry <path> points every call on this machine at the registry. Teams commit the registry to git and sync via clone/pull.flux (alias), never flux-2-pro@2.1.3 (raw). Alias resolution is the registry's job.brand-registry-v2026.2).The registry itself is the manifest. Commit it. Tag it. Diff it on every bump.
{
"registry_version": "2026.2.0",
"locked_at": "2026-04-01T00:00:00Z",
"locked_by": "brand-governance@company.com",
"previous_version": "2026.1.0",
"regression_run_id": "REG-2026Q2-APPROVED",
"models": {
"flux": { "id": "flux-2-pro@2.1.3", "commercial_use": true, "notes": "Hero, editorial" },
"kontext": { "id": "flux-kontext-pro@1.4.0", "commercial_use": true, "notes": "Product edit-mode" },
"upscale": { "id": "topaz-upscale-image@2.0.0", "commercial_use": true, "notes": "Print prep" },
"kling": { "id": "kling-v3-pro@3.0.1", "commercial_use": true, "notes": "I2V broadcast" },
"portrait": { "id": "gemini-3-pro-image@1.2.0", "commercial_use": true, "notes": "Portrait, verify license" }
},
"prompt_templates": {
"hero_launch": {
"text": "Editorial hero, {subject}, {environment}, brand palette, natural light",
"fingerprint": "sha256:7b4f2a...c8e1"
}
},
"brand_tokens": {
"palette": { "primary": "#FF006E", "ink": "#0D0A1F", "accent": "#FFBE0B" },
"aspect_ratios_allowed": ["16:9", "9:16", "1:1", "3:2"],
"seed_default": 42
},
"audit_id": "REGISTRY-2026.2"
}
Every generated asset's results.json entry should carry registry_version so reproduction is one command away.
The registry pins them; it doesn't choose them. For picking, see the per-workflow skills. Typical enterprise registry contents:
| Alias | Pins to | Role |
|---|---|---|
flux | flux-2-pro@x.y | Primary photoreal hero |
kontext | flux-kontext-pro@x.y | Edit-mode, product-accuracy preserve |
portrait | gemini-3-pro-image@x.y | Faces, commercial-safe (verify license) |
upscale | topaz-upscale-image@x.y | Print / wire prep |
remove-bg | picsart-remove-bg@x.y | Transparent PNG derivatives |
change-bg | picsart-change-bg@x.y | Catalog background replace |
kling | kling-v3-pro@x.y | Image-to-video for broadcast |
Confirm commercial-use + regional availability at bump time with gen-ai models info <id>. Provider terms change; pin is not a license.
flux-2-pro@2.1.3 in a prompt — only flux.--seed 42 reruns the same output deterministically.2026.2.0 = year-quarter-patch). Patch for typo fixes; minor for new aliases; major for model swaps.Run gen-ai whoami to confirm authentication, then re-run the failed command with --debug.
# Point the CLI at the registry
gen-ai config set registry.path ./brand-registry/registry.json
# Pin a model alias
gen-ai config set registry.flux flux-2-pro@2.1.3
gen-ai config set registry.kontext flux-kontext-pro@1.4.0
gen-ai config set registry.kling kling-v3-pro@3.0.1
gen-ai config set registry.upscale topaz-upscale-image@2.0.0
# Verify a given alias resolves to the pinned version
gen-ai config get registry.flux
# → flux-2-pro@2.1.3
# Generate using the alias (reproducible)
gen-ai generate --model flux --prompt-file prompts/hero-launch.txt \
--seed 42
# Batch resolves all aliases against the registry
gen-ai batch run campaign.json
Every manifest references aliases, never raw model IDs. The registry is the one place that maps alias → version.
Registry operations are cheap. The value is in what they prevent.
| Activity | Cost | Time |
|---|---|---|
| Author initial registry | 0 | 1 engineer-day |
| Quarterly regression corpus (20 prompts) | ~200 credits | ~1 h generation + ~2 h review |
| Version bump + tag | 0 | ~30 min |
| Reproduce a 1-year-old campaign | Same credits as original | Same wall time |
| Provider-deprecation migration | ~500 credits | 1–2 engineer-days |
Cost savings scale with team size: a 20-person design team bumping incidentally costs far more in drift than one quarterly reviewed bump.
sickn33/antigravity-awesome-skills
moizibnyousaf/ai-agent-skills
github/awesome-copilot