- Rust 92.6%
- JavaScript 5.6%
- CSS 1.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| assets | ||
| skill/codex-color | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| NOTICE.md | ||
| README.md | ||
Codex Color
codex-color gives the Codex desktop app a wallpaper and a matching colour palette, from the command line or from inside Codex with $codex-color.
Website: vibewait.ing/codex-color · Source: x.vibewait.ing/x/codex-color
- Generate: in Codex, type
$codex-color a sunny island after rain. Codex draws the wallpaper with its built-inimage_gen, picks the colours, and applies them. - Your own picture: drag an image into a Codex chat and send
$codex-color, or drop it on Codex Color in the Dock. - Motion: use a looping video or GIF as the wallpaper, or add snow, rain, stars, fireflies, petals, fireworks or a slow drift to any picture. Motion pauses when Codex is hidden and follows macOS Reduce Motion.
- Import:
$codex-color https://dreamskin.cc/themes/ver_…downloads a reviewed community theme from DreamSkin.cc, checks it, and applies it. - Browse: search the DreamSkin gallery, see popular or new themes with previews, or let it surprise you.
- Remix and share: make a new skin from any saved one, community themes included (other colours, dark or light, or an image_gen edit of the picture), shuffle your saved skins, or export one as a DreamSkin pack.
- Manage: list, switch, remove, clear, open the folder, turn off, update.
It is one ~1 MB binary. It has no runtime dependencies beyond curl, which ships with macOS. It does not modify the Codex app bundle.
Unofficial. For the macOS Codex desktop app (
com.openai.codex), verified on 26.917 and 26.924. Windows is not supported yet.
Install
cargo install codex-color
codex-color install-skill
codex-color install-launcher
Then start a new Codex thread and type $codex-color.
Coming from codex-skin? codex-color was called codex-skin until 0.6.0. Run codex-skin update once: its last release (0.5.4) installs codex-color, which moves your skins from ~/.codex-skin to ~/.codex-color, replaces the $codex-skin skill with $codex-color and rebuilds the Dock launcher in place; then the old binary is removed. Or do it by hand: cargo install codex-color, codex-color install-skill (which moves everything over), then cargo uninstall codex-skin. With downloaded binaries, put codex-color in the same folder as codex-skin before running it. CODEX_SKIN_* settings keep working.
install-launcher adds Codex Color.app to ~/Applications, with its own icon. Put it in your Dock in place of the regular Codex icon, and Codex always opens with skin support, so skins never need a restart. If Codex is already open without skin support, the launcher asks before restarting it. Drop an image (or a theme pack) on the launcher to make it your skin, with colours picked from the picture.
Use it in Codex
$codex-color a baby sleeping under a starry mobile
$codex-color a lighthouse on a cliff at dusk, in watercolour
$codex-color rainy Tokyo alley, show me 3 options
$codex-color https://www.dreamskin.cc/themes/ver_420992420627173aecf2
$codex-color (with an image dragged into the chat)
$codex-color find cat skins
$codex-color surprise me with something dark
$codex-color make this one at night
$codex-color make ds-123456 dark with a pink accent
$codex-color make it snow
$codex-color list my skins
$codex-color switch to the island one
$codex-color delete the gothic skin
$codex-color turn it off
$codex-color update yourself
New skins use a structured prompt: subject, a style preset (photo, watercolour, anime background, ink wash, oil, pixel art, 3D diorama, synthwave or minimal), palette and light, and a wallpaper composition with a calm left side for readable text. The guidance adapts awesome-gpt-image-2.
If Codex wasn't opened with skin support, it has to restart once (see "How it works"). The skill asks before it does that. After that, skin changes apply live.
When Codex updates itself, it reopens without skin support and the wallpaper goes away. codex-color notices and asks whether to restart Codex to bring it back; you can also just open Codex from Codex Color in the Dock. codex-color status shows the Codex version and whether it changed since the skin was applied.
Command line
codex-color apply <image> [--name TEXT --mode light|dark --surface #hex --ink #hex --accent #hex --focus X,Y]
codex-color apply --latest [...] # newest image Codex generated in the last 30 minutes
# colours you leave out are picked from the image (macOS)
codex-color import <source> # DreamSkin link / ver_ id / dreamskin:// link / .zip / folder / image URL
codex-color download <source> # save without applying
codex-color tweak <id> [look flags] [--image PATH|--latest] # a new skin from a saved one
codex-color show <id> [--json] # a saved skin and its wallpaper path
codex-color motion <effect|off> [<id>] # snow, rain, stars, fireflies, petals, fireworks or drift
codex-color find <words> [--dark|--light] [--previews] # search the DreamSkin gallery
codex-color top | new [--dark|--light] [--previews] # popular / newest themes
codex-color random [words] [--dark|--light] # apply a surprise theme
codex-color current | shuffle [--dark|--light]
codex-color export <id> [--author NAME] [--license TEXT] [--out DIR]
codex-color list | use <id> | remove <id>... | clear --yes | open
codex-color off [--keep-palette] [--restart]
codex-color status
codex-color launch # open Codex with skin support
codex-color install-launcher [--remove] # Codex Color.app in ~/Applications
codex-color install-skill | update
When exit code 3 says Codex needs a restart, run the printed codex-color use <id> --restart. --restart lets codex-color quit and reopen Codex once. It uses the normal quit, so Codex can still ask you to confirm, and it never force-kills.
How it works
- Debug port. Codex is an Electron app. codex-color opens it with
--remote-debugging-address=127.0.0.1 --remote-debugging-port=<port>, starting at 9333. - Wallpaper. Over that loopback port it runs one script in the Codex window (Chrome DevTools Protocol
Runtime.evaluate). The script adds a<style>with the image (as ablob:URL) behind the UI. It also makes Codex's own surface colour tokens translucent, instead of targeting its generated class names. - Live colours. The injected CSS also overrides the ~40 colour tokens Codex precomputes, such as surfaces, menus, controls, text and borders. Switching between light and dark skins therefore looks right immediately.
- Palette. It writes accent, ink and surface into
~/.codex/config.tomlunder[desktop.appearanceDarkChromeTheme]/[desktop.appearanceLightChromeTheme], and setsappearanceTheme. These are the keys Codex's own Settings → Appearance uses. They're undocumented, so this may change. Codex reads them only at launch. Until the next launch, the injected CSS supplies the new surface and text colours. The original values are backed up once, andoffrestores them exactly. - Watcher. A small background process re-applies the skin if Codex reloads its window. It exits when you turn the skin off or quit Codex. With the launcher installed, launchd runs it (
~/Library/LaunchAgents/dev.codex-color.watch.*.plist), so the launcher doesn't stay "running" in the Dock; macOS lists it under Login Items, but it never starts at login.install-launcher --removetakes it out again.
Community themes (DreamSkin)
find, top, new and random use DreamSkin's public gallery API (https://api.dreamskin.cc/v1/themes). Only reviewed themes that can be applied are listed. --previews downloads each theme's background to ~/.codex-color/previews/, and previews older than a day are deleted.
export writes a pack that DreamSkin's own validator accepts: manifest.json with sizes and SHA-256, theme.json with all ten colours, Safe CSS theme.css, and the background. Upload it at dreamskin.cc/studio. Skins that came from DreamSkin aren't re-exported.
DreamSkin theme packs (manifest.json, theme.json, theme.css, one background image) import as-is:
- The link's
ver_…id is resolved throughhttps://api.dreamskin.cc/v1/themes/<id>. - The package must match the published size and SHA-256.
- Every file must match
manifest.json. - The ZIP is checked for path traversal, links, extra files and size.
theme.cssmust pass a Safe CSS allowlist. Only[data-ds-part="…"]selectors are allowed, with nourl()or@rules. If the CSS fails, it is dropped and the wallpaper and colours still apply.
Security notes
- While Codex runs with the debug port, any program on your Mac can connect to it without a password, and Codex can run shell commands. Use
codex-color off --restartto reopen Codex normally and close the port. - The port is bound to 127.0.0.1 only. codex-color checks that the listener belongs to the Codex app before using it.
- Only the main Codex window (
app://-/index.htmlwith noinitialRoute) is skinned. Overlays such as the pet and global dictation windows are skipped and cleaned.
Files
~/.codex-color/skins/<id>/: saved skins (theme.json, image, optionaltheme.css,meta.json)~/.codex-color/state.json,palette-backup.json,codex-color.log~/.codex/skills/codex-color/: the Codex skill (install-skill)
Override with CODEX_COLOR_HOME, CODEX_HOME and CODEX_COLOR_APP. Set CODEX_COLOR_NO_RESTART=1 to make codex-color refuse to quit Codex.
Credits
- Codex Dream Skin by Fei-Away and contributors (MIT). codex-color builds on its approach: skinning the Codex desktop app through a loopback debug port without modifying the app. Its theme pack format (
manifest.json,theme.json, Safe CSStheme.css),data-ds-partvocabulary and part selectors are reused so its themes work here. Community themes come from its gallery, DreamSkin.cc. - awesome-gpt-image-2 by freestylefly (MIT). The skill's image prompt structure and style guidance adapt its templates.
- DreamSkin theme authors. Each imported theme keeps its author and licence;
codex-color listshows the author.
Licence
MIT. See NOTICE.md for the third-party licence texts. Community themes keep their authors' licences.