Anleitung für Codex Desktop-Pets
Worum es geht
Pets ist eine Funktion der OpenAI Codex App (Desktop-Version): Auf dem Bildschirm schwebt ein transparentes kleines Fenster im Vordergrund, in dem ein Pixel-Haustier wohnt. Es ist keine bloße Dekoration – die Animationszustände hängen direkt am Laufzeitstatus von Codex:
- Generiert Codex gerade Code, wechselt das Pet in die Animation „Bei der Arbeit“ und zittert vor lauter Betriebsamkeit;
- Wartet Codex auf deine Eingabe, springt es auf „Wartet auf dich“ um und schaut dich an;
- Ist die Aufgabe geglückt, macht es einen Freudensprung; ist sie gescheitert, sackt es zusammen und schwitzt kalt.
Kein Fensterwechsel nötig: Ein Blick auf das Pet genügt, um zu wissen, ob du zurück ins Terminal solltest.
So bekommst du ein Pet zum Laufen
- Vergewissere dich, dass du die Desktop-Version der Codex App installiert hast (nicht nur das CLI) und aktiviere Pets in den Einstellungen;
- Lade aus dem Katalog die
.pet.zipeines beliebigen Pets herunter; - Entpacke sie in den pets-Ordner – ein Ordner pro Pet:
# macOS / Linux
~/.codex/pets/<pet-id>/
├── pet.json
└── spritesheet.webp (PNG geht auch)
# Windows
%USERPROFILE%\.codex\pets\<pet-id>\
Danach erscheint das neue Pet in der Pet-Auswahl der Codex App. Falls nicht, starte die Codex App einmal neu.
Spritesheet-Spezifikation (offiziell)
Sämtliche Animationen eines Pets stecken in einem einzigen Bild: 1536×1872 Pixel, PNG oder WebP, transparenter Hintergrund, aufgeteilt in 8 Spalten × 9 Zeilen mit je 192×208 pro Feld. Wichtig: Jede Zeile nutzt eine andere Anzahl Frames (so steht es im offiziellen Contract animation-rows.md), und ungenutzte Felder einer Zeile müssen vollständig transparent bleiben. Von oben nach unten:
| Zeile | Zustands-ID | Name | Genutzte Frames | Schleifendauer | Wann sie läuft |
|---|---|---|---|---|---|
| 0 | idle | Bereitschaft | 6 | 1100ms | Ruhiges Atmen, gelegentliches Blinzeln |
| 1 | running-right | Läuft nach rechts | 8 | 1060ms | Codex schickt es nach rechts an die Arbeit |
| 2 | running-left | Läuft nach links | 8 | 1060ms | Auf dem Rückweg |
| 3 | waving | Winken | 4 | 700ms | Winkt dir kurz zu, bevor die Aufgabe startet |
| 4 | jumping | Sprung | 5 | 840ms | Aufgabe erledigt, Freudensprung |
| 5 | failed | Fehlgeschlagen | 8 | 1220ms | Etwas ging schief – hängt durch und schwitzt kalt |
| 6 | waiting | Wartet auf dich | 6 | 1010ms | Codex wartet auf deine Eingabe und starrt dich an |
| 7 | running | Bei der Arbeit | 6 | 820ms | Codex generiert Code, es zittert vor Betriebsamkeit |
| 8 | review | Review | 6 | 1030ms | Kneift die Augen zusammen und scannt deinen Code |
Ein paar Regeln, über die man leicht stolpert:
- Das gesamte Pet muss komplett im Feld von 192×208 bleiben – auch am höchsten Punkt eines Sprungs;
- Transparent heißt wirklich transparent: Ungenutzte Pixel müssen Alpha 0 haben und dürfen keine RGB-Reste enthalten. Halbtransparente Schlagschatten, Bodenschatten, Speedlines und ähnliche „abgesetzte Effekte“ sind verboten (das offizielle validate_atlas.py prüft das Pixel für Pixel);
- Male keine lesbare Schrift und keine Logos auf das Pet;
- Die Details müssen groß genug sein – die Anzeigegröße ist am Ende winzig, ein Muster aus ein, zwei Pixeln sieht schlicht niemand.
So sieht eine pet.json aus
{
"id": "momo",
"displayName": "Momo",
"description": "A round cream-orange cat.",
"spritesheetPath": "spritesheet.webp"
}
Vier Felder genügen. id besteht aus Kleinbuchstaben und Ziffern und stimmt mit dem Ordnernamen überein; spritesheetPath ist relativ zur pet.json angegeben.
Bau dir selbst eines
Weg 1: die KI malen lassen (der offizielle Weg). OpenAI stellt in openai/skills die Skill hatch-pet bereit. Installiere sie in Codex, beschreibe die gewünschte Figur, und die Skill ruft die Bildgenerierung auf, malt die 9 Animationszeilen Zeile für Zeile, setzt sie automatisch zum spezifikationskonformen Spritesheet zusammen und legt das Ergebnis direkt in ~/.codex/pets/ ab. Ideal für alle, die eine fein gezeichnete Optik wollen.
Weg 2: jedes Frame per Code zeichnen (unser Weg). Die 91 Pets dieser Seite sind allesamt prozedural mit Python + Pillow erzeugt: Auf einem logischen Raster von 24×26 entsteht der Körper aus Farbflächen, dann bekommt jedes Frame je nach Zustand seine Parameter – Bereitschaft heißt Atembewegung plus Blinzeln, der Sprung folgt einer Bewegungskurve aus Ducken, Strecken, Schweben und Landen, und Scheitern bedeutet gestauchter Körper plus X-Augen und kaltem Schweiß. Am Ende wird alles gemäß den Framezahlen der einzelnen Zeilen zum großen Bild mit 1536×1872 zusammengesetzt. Als wir bei ein paar Dutzend Pets angekommen waren, haben wir das Ganze zu einem „konfigurationsgetriebenen“ Ansatz abstrahiert: Körperform, Farbgebung, Ohren, Schwanz, Brille und Schal sind Parameter – für ein neues Pet reichen zehn Zeilen Konfiguration.
Beide Wege führen zum selben Ergebnis: ein regelkonformes Spritesheet plus eine pet.json. Ordner in das pets-Verzeichnis werfen, läuft.
Häufige Fragen
Das Pet bewegt sich nicht oder taucht nicht auf? Prüfe zuerst die Ordnerebene – die pet.json muss direkt in pets/<id>/ liegen, nicht in einem zusätzlichen Ordner aus dem Entpacken. Prüfe dann, ob das Bild exakt 1536×1872 groß ist.
Was ist der Unterschied zwischen V1 und V2? Was die Community V2 nennt, ergänzt die 9 Basiszeilen um „Umschau“-Frames in 16 Blickrichtungen, damit das Pet in Richtung des Mauszeigers schauen kann. Pets nach der Basisspezifikation mit 9 Zeilen (also auch die von dieser Seite) funktionieren in neuen Versionen der Codex App uneingeschränkt weiter.
Darf ich die Pets dieser Seite verändern? Ja. Alle 91 sind eigene Pixel-Arbeiten (die Inspirationsreihe orientiert sich lediglich an Motivtypen und enthält keine urheberrechtlich geschützten Figuren) – verändere und verbreite sie nach Belieben, eine Namensnennung ist nicht nötig.