scenario-chatgpt-pet-create
Use when creating a ChatGPT pet or Codex pet with Scenario: hatching an animated companion from a text idea, a character, mascot or brand cue, or reference photos and art; making the 1536x2288 v2 pet sprite sheet with nine animation states and sixteen look directions, the 1536x1872 v1 sheet ChatGPT…
Install / Use
npx skills add scenario-labs/skills --skill scenario-chatgpt-pet-createInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
AI & Machine LearningSupported Platforms
Tags
Our assessment of scenario-chatgpt-pet-create
scenario-chatgpt-pet-create scores 84/100 on our quality scale, 569th of 854 AI & Machine Learning skills we index.
Its SKILL.md is 14 KB long, split into 5 sections and no code examples: a thorough specification that gives an agent plenty to work with.
With 1,048 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 8 days ago, so scenario-chatgpt-pet-create is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
scenario-chatgpt-pet-create compared with similar skills
All 4 of these similar skills score higher than scenario-chatgpt-pet-create; compare them before choosing.
Frequently asked questions
- How do I install scenario-chatgpt-pet-create?
- Run
npx skills add scenario-labs/skills --skill scenario-chatgpt-pet-create. The install tabs above show the steps for each supported agent. - Which AI agents does scenario-chatgpt-pet-create work with?
- It is written for OpenAI Codex, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is scenario-chatgpt-pet-create safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is scenario-chatgpt-pet-create still maintained?
- The repository was last updated 8 days ago, so scenario-chatgpt-pet-create is actively maintained.
Skill content
View source on GitHubname: scenario-chatgpt-pet-create description: "Use when creating a ChatGPT pet or Codex pet with Scenario: hatching an animated companion from a text idea, a character, mascot or brand cue, or reference photos and art; making the 1536x2288 v2 pet sprite sheet with nine animation states and sixteen look directions, the 1536x1872 v1 sheet ChatGPT web uploads, a pixel-perfect pixel-art pet, an animated GIF of the pet, or a Codex pet.json package." license: MIT
Scenario ChatGPT Pet: Create
Overview
A ChatGPT pet is one transparent sprite sheet: 192x208 cells, 8 columns, nine animation rows (v1, 1536x1872) plus two rows of sixteen look directions (v2, 1536x2288). Rows, frame counts, what each state must show, the look directions, the verdict file and the package layout: references/sheet-contract.md. Read it before the first generation.
This skill delivers, next to the run: a v2 sheet (unless the user wants v1 only), a v1 copy for
ChatGPT web upload, pet.gif on a soft background and pet-transparent.gif, and a Codex pet.json
package, installed only when the user says yes. Every image is generated through the Scenario MCP
server; the frame cutting, sheet assembly, validation, GIFs and packaging run locally in the shipped
scripts, because the deliverable is a file for ChatGPT or Codex and no MCP tool assembles a pet
sheet. An image model never draws the whole sheet: it draws one row at a time, and the scripts place
every frame.
Connection, scope and the core loop: the scenario skill. Changing a pet that already has a sheet:
scenario-chatgpt-pet-update. If a sibling skill named here is missing from your available skills,
ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended,
proceed from tool schemas and flag the gap.
Scripts, run by the agent with Python 3, Pillow and NumPy (pip install pillow numpy, in a virtual
environment outside the run folder when the system Python refuses), by their path in this skill's
scripts/ folder from the user's working folder (the commands below shorten that path); each prints
JSON, or error: ... with exit code 1, and --help lists every option:
- pet_prepare.py: run folder, background key, one prompt and request size
per job (
init), extra prompt sentences (note), pixel grid and palette (pixel). - pet_frames.py: cuts a generated strip into frames and reports problems
(
extract); reads an existing sheet (split, used by the update skill). - pet_build.py: assembles the sheet with one pet height, ground line and planted anchor on every row.
- pet_check.py: validates the exact file to deliver.
- pet_preview.py: contact sheet, labeled look sheet, GIFs.
- pet_package.py: package and optional Codex install.
- pet_common.py: shared layout facts, imported by the others.
Quick reference
| Step | Do |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Brief | Text, reference images, or both; one round of at most four questions |
| Set up | pet_prepare.py init; upload_asset each file a job lists in references |
| Model, in this order | model_openai-gpt-image-2-5-sunburst, then model_google-gemini-nano-banana-2-1; recommend only when both are blocked |
| Each generation | model_schema_get once per model, dry_run, model_run with the job's prompt and sizes, jobs_wait, asset_download format: "png" to the job's output |
| Pixel-perfect | After the base is approved and before any row: Pixel Snapper (model_pixel-snapper) on the base once, then pet_prepare.py pixel |
| Each strip | pet_frames.py extract RUN --job <id>; read the JSON; look at frames/<id>/preview.png |
| Rows 0-8 done | pet_build.py RUN --version 1 --out RUN/qa/checkpoint, then pet_preview.py contact and gif |
| Finish | pet_build.py RUN, pet_preview.py looks, verdicts, pet_check.py, pet_preview.py gif, pet_package.py make |
The model ids are named on purpose: both keep one character across a row of eight poses from a
reference image, which is what this job needs, and a team that cannot run either falls back to
recommend with the need and the families (GPT Image, Nano Banana). Pixel Snapper is Scenario's
tool for snapping generated pixel art to a clean grid and palette. Read every schema rather than
trusting the sizes below: at authoring time Sunburst took referenceImages (an array, up to 10),
width and height (16 to 3840, steps of 16), background (opaque here) and quality (left at
its default in every run behind these notes), and widened extreme shapes on its own (asked for
3584x512, it returned 3584x1200), which is why init asks for a height of at least a third of the
width; Nano Banana took up to 14 referenceImages and an aspectRatio preset (4:1, 8:1).
Budget from the dry_run quote, which is what each job is charged: the cuCost that jobs_wait
reports can leave out add-ons such as a project's Quality Gate, so tracking it understates spend. At
authoring time the quotes were 13.75 CU for the base, 13.75 to 17.75 CU per strip (wider strips cost
more) and 6.75 CU for a Snapper call, so a pixel-perfect v2 pet (12 generations with running-left
mirrored, plus the Snapper) came to about 198 CU before any repair, about 216 CU when running-left
has to be generated: agree a budget with room for two or three repaired rows. Unattended, never
launch a job that would take the quotes already spent plus those still needed past the budget: if
only the look rows are left, deliver v1 without them; otherwise stop and report.
Worked example: Biscuit, a corgi in a yellow raincoat, from a photo
- Brief. The user sends a photo and a sentence. Ask once, only what changes the art: the name
and one-line description (default: infer), the style (
auto,pixel,plush,clay,sticker,flat-vector,3d-toy,painterly,brand-inspired), pixel-perfect or not, and v2 with look directions (default) or v1 only. A brand name with no visual cues: ask for colors, shapes and attitude; never copy a logo or readable text. Unattended, infer and record the answers, make every approval below yourself against the brief (recording why), and never install. Resolve the team and project, then create one collection for the pet (collection_create, thencollection_add_assetsfor every kept output, per thescenarioskill). - Set up.
python3 scripts/pet_prepare.py init --name Biscuit --notes "corgi in a yellow raincoat, red collar" --reference photo.jpg --out pets/biscuit(add--pixelfor pixel-perfect: it sets the pixel style in every prompt;--version 1skips the look rows). It picks a background key that contrasts with the references (or with the notes: a pink pet gets green, never magenta) and writesjobs.json: per job anid,frames,prompt,retry_prompt,references(run-relative files),sizesper model,depends_onandoutput. Just before a job runs,upload_asseteach local file it lists underreferences/(once per file, noting the id); agenerated/file is already an asset, so pass the id its job returned instead of uploading the download. - Base. Run the
basejob withreferenceImagesset to the uploaded photo ids (none for a text-only pet), itspromptverbatim, and its Sunburstwidth/height,background: "opaque". Download togenerated/base.png, runpet_frames.py extract RUN --job base, which writes the clean identity referencereferences/base.png, and show the base withasset_display. Nothing else starts before the user approves it; a warning that the pet is close to the key color meansinit --force --chroma-keywith another key and a new base. - Pixel-perfect variant. Run
model_pixel-snapperon the approved base asset as generated, background and all (image,colors24 unless the user wants fewer, any fixedseed), download it, thenpet_prepare.py pixel RUN --snapped snapped.png --colors <same>. It picks a grid of 8, 4, 2 or 1 screen pixels per art pixel, keeps the palette, and rewritesreferences/base.pngas the enlarged pixel version (upload that new file), so every row is drawn from clean pixels and the build snaps every frame to the same grid and palette. Snap only the base: snapping each frame puts frames on different grids and costs a call per frame. - Animation rows. After the base, every standard row is independent except
running-left, which waits forrunning-right. Launchidleandrunning-rightfirst as identity and gait checks, then the rest in waves under the team's concurrency limit (wait: false, onejobs_waitover the batch; a 429 namingparallel-custom-jobsgives the limit, per thescenarioskill). Each row:referenceImages= the uploadedreferences/base.pngplus the user's photos, the job'spromptandsizes. After each download,extract, read its JSON and look at the preview: an error (wrong count, a pose touching the image edge) or a wrong pose means regenerating that row now, withretry_promptor a sentence added bypet_prepare.py note RUN --jobs <id> --text "...". When the pet looks the same mirrored (nothing handed, lettered or leaning to one side, so not a corgi with a one-sided patch or a robot with a tilted leaf), skip generatingrunning-leftand pass--mirror-leftto everypet_build.pycall instead. - Checkpoint.
pet_build.py RUN --version 1 --out RUN/qa/checkpoint, thenpet_preview.py contact RUN/qa/checkpoint.png --out RUN/qa/contact.pngandpet_preview.py gif RUN/qa/checkpoint.png --out-dir RUN/qa/checkpoint-previews;pet_check.py RUN/qa/checkpoint.png --run RUN --json-out RUN/qa/checkpoint-check.jsoncatches height and jump errors before the look rows are paid for. Show the GIF (open the local file, or upload it and share theapp_urlfromasset_display); feedback goes into the affected rows, never into the sheet. - Look rows (v2). Decide how this pet looks around (what stays planted, what leads, how the
eyes and ears move), add it with
note --jobs look-cardinals,look-9,look-10, then runlook-cardinals(four poses: up, right, down, left). Extract it and approve all four by eye before anything else: a cardinal that does not read at pet size is regenerated now. Thenlook-9, extract,pet_build.py RUN --out RUN/qa/checkpoint(it warns thatlook-10is still empty) andpet_preview.py looks RUN/qa/checkpoint.png --out RUN/qa/looks.pngto look at it; thenlook-10, whose references includegenerated/look-9.pngso the sweep continues. - Finish.
pet_build.py RUNwritesfinal/spritesheet.pngandfinal/spritesheet.webpwith one edge cleanup pass.pet_preview.py looks RUN/final/spritesheet.webp --out RUN/qa/looks.png, look at it, and writeqa/direction-semantics.json(format in the contract
Truncated for display — read the full file on GitHub.
Related Skills
headroom
78.0kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
lobehub
83.5k🤯 LobeHub is your Chief Agent Operator, organizing your agents into 7×24 operations by hiring, scheduling, and reporting on your entire AI team.
LocalAI
50.0kLocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.
CowAgent
47.6kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
