[{"data":1,"prerenderedAt":979},["ShallowReactive",2],{"project-\u002Fprojects\u002Fcodex-img":3,"related-codex-img":929,"news-codex-img":930,"more-codex-img":942},{"id":4,"title":5,"body":6,"coverLabel":910,"description":911,"detailImage":912,"extension":913,"featured":914,"github":915,"image":916,"imageFit":910,"links":910,"meta":917,"navigation":914,"order":53,"path":918,"platforms":919,"seo":920,"stem":921,"tags":922,"tech":925,"url":910,"__hash__":928},"projects\u002Fprojects\u002Fcodex-img.md","codex-img",{"type":7,"value":8,"toc":898},"minimark",[9,14,23,30,33,37,40,87,94,101,123,127,145,151,154,158,161,167,178,182,185,289,295,301,304,309,333,338,355,359,362,681,714,744,781,785,813,817,820,823,827,851,869,873,892,895],[10,11,13],"h2",{"id":12},"overview","Overview",[15,16,17,18,22],"p",{},"A ChatGPT subscription comes with image generation, but from the terminal the usual way to get at it is to ask the Codex agent to draw something. codex-img skips the agent. It sends your prompt to the same image endpoint the Codex CLI uses, with the login ",[19,20,21],"code",{},"codex login"," already saved, and writes the image to disk. That's one request per image, and your prompt reaches the image model word for word.",[15,24,25,26,29],{},"It's built for scripts and coding agents as much as for people. Paths go to stdout, progress to stderr, ",[19,27,28],{},"--json"," gives one line of metadata per image, and each kind of failure has its own exit code.",[15,31,32],{},"The pictures below were all generated with codex-img.",[10,34,36],{"id":35},"generate-and-edit","Generate and edit",[15,38,39],{},"The photo and its edit below came from prompts like these:",[41,42,47],"pre",{"className":43,"code":44,"language":45,"meta":46,"style":46},"language-sh shiki shiki-themes github-light github-dark","codex-img \"photo of a green ceramic mug on an oak desk\" -o mug.png\ncodex-img \"the same scene at night, by lamplight\" -i mug.png -o night.png\n","sh","",[19,48,49,68],{"__ignoreMap":46},[50,51,54,57,61,65],"span",{"class":52,"line":53},"line",1,[50,55,5],{"class":56},"sScJk",[50,58,60],{"class":59},"sZZnC"," \"photo of a green ceramic mug on an oak desk\"",[50,62,64],{"class":63},"sj4cs"," -o",[50,66,67],{"class":59}," mug.png\n",[50,69,71,73,76,79,82,84],{"class":52,"line":70},2,[50,72,5],{"class":56},[50,74,75],{"class":59}," \"the same scene at night, by lamplight\"",[50,77,78],{"class":63}," -i",[50,80,81],{"class":59}," mug.png",[50,83,64],{"class":63},[50,85,86],{"class":59}," night.png\n",[15,88,89,90,93],{},"Add up to five ",[19,91,92],{},"-i"," images to edit a picture or combine several. An edit changes what the prompt asks for and keeps the rest:",[15,95,96],{},[97,98],"img",{"alt":99,"src":100},"Two photos of the same sage green mug on an oak desk beside a notebook, a pencil and a potted plant. On the left in bright morning daylight with a green view through the window; on the right the same scene in the evening, lit warmly from the left, with a dark blue window, city lights and steam rising from the coffee","\u002Fimg\u002Fprojects\u002Fcodex-img\u002Fedit.webp",[15,102,103,106,107,110,111,114,115,118,119,122],{},[19,104,105],{},"-n 4"," runs four requests in parallel, and ",[19,108,109],{},"-a 16:9"," sets the shape. The shape comes from a sentence in the prompt, because the backend ignores the size field. For images that only guide a new one, ",[19,112,113],{},"--style-ref",", ",[19,116,117],{},"--composition-ref"," and ",[19,120,121],{},"--character-ref"," send them with a line in the prompt saying how to use each.",[10,124,126],{"id":125},"transparent-images","Transparent images",[15,128,129,132,133,136,137,140,141,144],{},[19,130,131],{},"-b transparent"," gives real alpha, for icons, stickers and sprites. ",[19,134,135],{},"--trim"," crops to the visible pixels, ",[19,138,139],{},"--resize"," sets the size, and ",[19,142,143],{},"--hard-alpha"," makes every pixel fully solid or fully transparent for pixel art. The untouched original is kept next to the result, because an image can't be generated again exactly.",[15,146,147],{},[97,148],{"alt":149,"src":150},"An app icon of a glossy sun behind a white cloud on a blue rounded square, and a sticker of a smiling potted cactus with a pink flower and a white border, both on a checkerboard that shows their transparent background","\u002Fimg\u002Fprojects\u002Fcodex-img\u002Ftransparent.webp",[15,152,153],{},"Generated images hide a dark colour under their transparent pixels, which shows up as a dark halo when an engine or browser scales them. codex-img resizes with premultiplied alpha and fills those pixels with the nearest edge colour, so it can't.",[10,155,157],{"id":156},"small-files","Small files",[15,159,160],{},"The backend returns large PNGs. codex-img recompresses every PNG it writes without changing a visible pixel, and converts locally:",[15,162,163],{},[97,164],{"alt":165,"src":166},"A flat vector illustration of a red and white lighthouse on a green cliff above the sea at sunset, split down the middle by a thin line. The left half is the full PNG and the right half the 64-colour version; they look the same","\u002Fimg\u002Fprojects\u002Fcodex-img\u002Fformats.webp",[15,168,169,170,173,174,177],{},"The illustration above as the PNG codex-img saved is 1.1 MB. As a 64-colour palette PNG (",[19,171,172],{},"-c 64",", like pngquant) it's 116 KB, and as lossy WebP (",[19,175,176],{},"-f webp",") it's 57 KB. The left half is the full PNG, the right half the 64-colour one.",[10,179,181],{"id":180},"camera-angles-characters-and-palettes","Camera angles, characters and palettes",[15,183,184],{},"Game art needs the same camera, style and colours across many images. codex-img has an option for each, so they aren't written into every prompt by hand:",[41,186,188],{"className":43,"code":187,"language":45,"meta":46,"style":46},"codex-img \"a red sports car\" --view top-down -b transparent -o car.png\ncodex-img presets add character captain --ref captain.png --text \"a stocky walrus sea captain in a yellow raincoat\"\ncodex-img \"the captain steering a ship's wheel in a storm\" --character captain -a 3:2 -o storm.png\ncodex-img \"a treasure chest sprite\" --palette pico-8 -b transparent -o chest.png\n",[19,189,190,214,242,266],{"__ignoreMap":46},[50,191,192,194,197,200,203,206,209,211],{"class":52,"line":53},[50,193,5],{"class":56},[50,195,196],{"class":59}," \"a red sports car\"",[50,198,199],{"class":63}," --view",[50,201,202],{"class":59}," top-down",[50,204,205],{"class":63}," -b",[50,207,208],{"class":59}," transparent",[50,210,64],{"class":63},[50,212,213],{"class":59}," car.png\n",[50,215,216,218,221,224,227,230,233,236,239],{"class":52,"line":70},[50,217,5],{"class":56},[50,219,220],{"class":59}," presets",[50,222,223],{"class":59}," add",[50,225,226],{"class":59}," character",[50,228,229],{"class":59}," captain",[50,231,232],{"class":63}," --ref",[50,234,235],{"class":59}," captain.png",[50,237,238],{"class":63}," --text",[50,240,241],{"class":59}," \"a stocky walrus sea captain in a yellow raincoat\"\n",[50,243,245,247,250,253,255,258,261,263],{"class":52,"line":244},3,[50,246,5],{"class":56},[50,248,249],{"class":59}," \"the captain steering a ship's wheel in a storm\"",[50,251,252],{"class":63}," --character",[50,254,229],{"class":59},[50,256,257],{"class":63}," -a",[50,259,260],{"class":59}," 3:2",[50,262,64],{"class":63},[50,264,265],{"class":59}," storm.png\n",[50,267,269,271,274,277,280,282,284,286],{"class":52,"line":268},4,[50,270,5],{"class":56},[50,272,273],{"class":59}," \"a treasure chest sprite\"",[50,275,276],{"class":63}," --palette",[50,278,279],{"class":59}," pico-8",[50,281,205],{"class":63},[50,283,208],{"class":59},[50,285,64],{"class":63},[50,287,288],{"class":59}," chest.png\n",[15,290,291,294],{},[19,292,293],{},"--view"," sets the camera. Five angles are built in, and a project can add or replace its own:",[296,297],"figure-image",{"alt":298,"small":299,"src":300},"A car, a cottage and an oak tree, each drawn in five views. Side shows the car's profile and a flat elevation of the cottage. Front shows the car's nose and the cottage's front wall. Top-down shows the car's roof from directly above and the cottage almost entirely as roof. Three-quarter looks down at the front of each, with the roof filling the top half. Isometric turns the car and the cottage 45 degrees, showing the top and two sides","\u002Fimg\u002Fblog\u002Fcodex-img-0-7-0\u002Fviews-small.webp","\u002Fimg\u002Fblog\u002Fcodex-img-0-7-0\u002Fviews.webp",[15,302,303],{},"A character preset is an image of the character and a description of their looks, and it keeps them the same from scene to scene:",[296,305],{"alt":306,"small":307,"src":308},"Three images of the same cartoon walrus captain in a yellow raincoat and a white captain's hat. On the left, the anchor image on a transparent background. In the middle, the captain steering a ship's wheel in a storm, with the scene fading out at the edges because the description included the anchor's whole prompt. On the right, the same storm scene filling the frame, made with only his looks as the description","\u002Fimg\u002Fblog\u002Fcodex-img-0-7-0\u002Fcharacter-small.webp","\u002Fimg\u002Fblog\u002Fcodex-img-0-7-0\u002Fcharacter.webp",[15,310,311,314,315,318,319,322,323,114,326,118,329,332],{},[19,312,313],{},"--palette"," puts the palette's hex codes in the prompt, then snaps every colour to the nearest one, so the PNG has exactly those colours. It takes hex codes, a ",[19,316,317],{},".gpl"," or ",[19,320,321],{},".hex"," file, a swatch image, or one of 14 built-in palettes such as ",[19,324,325],{},"pico-8",[19,327,328],{},"nes",[19,330,331],{},"resurrect-64",":",[296,334],{"alt":335,"small":336,"src":337},"The same treasure chest prompt with four palettes, each with its colours shown below it: six warm browns and golds with a teal, the four Game Boy greens, the sixteen PICO-8 colours, which turned the chest into pixel art, and the sixty-four colours of Resurrect 64","\u002Fimg\u002Fblog\u002Fcodex-img-0-7-0\u002Fpalettes-chest-small.webp","\u002Fimg\u002Fblog\u002Fcodex-img-0-7-0\u002Fpalettes-chest.webp",[15,339,340,341,344,345,348,349,354],{},"Views, styles, characters and palettes are presets: a project keeps its own in ",[19,342,343],{},"codex-img.json",", global ones apply to every project, and ",[19,346,347],{},"codex-img presets"," lists them all. The ",[350,351,353],"a",{"href":352},"\u002Fblog\u002Fcodex-img-0-8-0","post on 0.7 and 0.8"," shows how each one was tested.",[10,356,358],{"id":357},"sets-of-images","Sets of images",[15,360,361],{},"For more than a few images, list them in a JSON file. A spec for pictures like the ones on this page:",[41,363,367],{"className":364,"code":365,"language":366,"meta":46,"style":46},"language-json shiki shiki-themes github-light github-dark","{\n  \"raw_dir\": \"raw\",\n  \"out_dir\": \"public\u002Fimg\",\n  \"defaults\": {\"quality\": \"medium\", \"format\": \"webp\"},\n  \"assets\": {\n    \"mug\": {\n      \"prompt\": \"Product photo: a green ceramic mug on an oak desk\",\n      \"aspect\": \"3:2\"\n    },\n    \"mug-night\": {\n      \"prompt\": \"The same scene at night, lit by a desk lamp\",\n      \"reference\": \"mug\"\n    },\n    \"lighthouse\": {\n      \"prompt\": \"Flat vector illustration: a lighthouse at sunset\",\n      \"aspect\": \"3:2\",\n      \"max\": [1200, 800]\n    },\n    \"icons\u002Fweather\": {\n      \"prompt\": \"App icon: a glossy sun behind a white cloud\",\n      \"format\": \"png\",\n      \"colors\": 128\n    },\n    \"stickers\u002Fcactus\": {\n      \"prompt\": \"Die-cut sticker of a smiling potted cactus\",\n      \"background\": \"transparent\",\n      \"trim\": true\n    }\n  }\n}\n","json",[19,368,369,375,389,401,430,439,447,460,471,477,485,497,508,513,521,533,545,565,570,578,590,603,614,619,627,639,652,663,669,675],{"__ignoreMap":46},[50,370,371],{"class":52,"line":53},[50,372,374],{"class":373},"sVt8B","{\n",[50,376,377,380,383,386],{"class":52,"line":70},[50,378,379],{"class":63},"  \"raw_dir\"",[50,381,382],{"class":373},": ",[50,384,385],{"class":59},"\"raw\"",[50,387,388],{"class":373},",\n",[50,390,391,394,396,399],{"class":52,"line":244},[50,392,393],{"class":63},"  \"out_dir\"",[50,395,382],{"class":373},[50,397,398],{"class":59},"\"public\u002Fimg\"",[50,400,388],{"class":373},[50,402,403,406,409,412,414,417,419,422,424,427],{"class":52,"line":268},[50,404,405],{"class":63},"  \"defaults\"",[50,407,408],{"class":373},": {",[50,410,411],{"class":63},"\"quality\"",[50,413,382],{"class":373},[50,415,416],{"class":59},"\"medium\"",[50,418,114],{"class":373},[50,420,421],{"class":63},"\"format\"",[50,423,382],{"class":373},[50,425,426],{"class":59},"\"webp\"",[50,428,429],{"class":373},"},\n",[50,431,433,436],{"class":52,"line":432},5,[50,434,435],{"class":63},"  \"assets\"",[50,437,438],{"class":373},": {\n",[50,440,442,445],{"class":52,"line":441},6,[50,443,444],{"class":63},"    \"mug\"",[50,446,438],{"class":373},[50,448,450,453,455,458],{"class":52,"line":449},7,[50,451,452],{"class":63},"      \"prompt\"",[50,454,382],{"class":373},[50,456,457],{"class":59},"\"Product photo: a green ceramic mug on an oak desk\"",[50,459,388],{"class":373},[50,461,463,466,468],{"class":52,"line":462},8,[50,464,465],{"class":63},"      \"aspect\"",[50,467,382],{"class":373},[50,469,470],{"class":59},"\"3:2\"\n",[50,472,474],{"class":52,"line":473},9,[50,475,476],{"class":373},"    },\n",[50,478,480,483],{"class":52,"line":479},10,[50,481,482],{"class":63},"    \"mug-night\"",[50,484,438],{"class":373},[50,486,488,490,492,495],{"class":52,"line":487},11,[50,489,452],{"class":63},[50,491,382],{"class":373},[50,493,494],{"class":59},"\"The same scene at night, lit by a desk lamp\"",[50,496,388],{"class":373},[50,498,500,503,505],{"class":52,"line":499},12,[50,501,502],{"class":63},"      \"reference\"",[50,504,382],{"class":373},[50,506,507],{"class":59},"\"mug\"\n",[50,509,511],{"class":52,"line":510},13,[50,512,476],{"class":373},[50,514,516,519],{"class":52,"line":515},14,[50,517,518],{"class":63},"    \"lighthouse\"",[50,520,438],{"class":373},[50,522,524,526,528,531],{"class":52,"line":523},15,[50,525,452],{"class":63},[50,527,382],{"class":373},[50,529,530],{"class":59},"\"Flat vector illustration: a lighthouse at sunset\"",[50,532,388],{"class":373},[50,534,536,538,540,543],{"class":52,"line":535},16,[50,537,465],{"class":63},[50,539,382],{"class":373},[50,541,542],{"class":59},"\"3:2\"",[50,544,388],{"class":373},[50,546,548,551,554,557,559,562],{"class":52,"line":547},17,[50,549,550],{"class":63},"      \"max\"",[50,552,553],{"class":373},": [",[50,555,556],{"class":63},"1200",[50,558,114],{"class":373},[50,560,561],{"class":63},"800",[50,563,564],{"class":373},"]\n",[50,566,568],{"class":52,"line":567},18,[50,569,476],{"class":373},[50,571,573,576],{"class":52,"line":572},19,[50,574,575],{"class":63},"    \"icons\u002Fweather\"",[50,577,438],{"class":373},[50,579,581,583,585,588],{"class":52,"line":580},20,[50,582,452],{"class":63},[50,584,382],{"class":373},[50,586,587],{"class":59},"\"App icon: a glossy sun behind a white cloud\"",[50,589,388],{"class":373},[50,591,593,596,598,601],{"class":52,"line":592},21,[50,594,595],{"class":63},"      \"format\"",[50,597,382],{"class":373},[50,599,600],{"class":59},"\"png\"",[50,602,388],{"class":373},[50,604,606,609,611],{"class":52,"line":605},22,[50,607,608],{"class":63},"      \"colors\"",[50,610,382],{"class":373},[50,612,613],{"class":63},"128\n",[50,615,617],{"class":52,"line":616},23,[50,618,476],{"class":373},[50,620,622,625],{"class":52,"line":621},24,[50,623,624],{"class":63},"    \"stickers\u002Fcactus\"",[50,626,438],{"class":373},[50,628,630,632,634,637],{"class":52,"line":629},25,[50,631,452],{"class":63},[50,633,382],{"class":373},[50,635,636],{"class":59},"\"Die-cut sticker of a smiling potted cactus\"",[50,638,388],{"class":373},[50,640,642,645,647,650],{"class":52,"line":641},26,[50,643,644],{"class":63},"      \"background\"",[50,646,382],{"class":373},[50,648,649],{"class":59},"\"transparent\"",[50,651,388],{"class":373},[50,653,655,658,660],{"class":52,"line":654},27,[50,656,657],{"class":63},"      \"trim\"",[50,659,382],{"class":373},[50,661,662],{"class":63},"true\n",[50,664,666],{"class":52,"line":665},28,[50,667,668],{"class":373},"    }\n",[50,670,672],{"class":52,"line":671},29,[50,673,674],{"class":373},"  }\n",[50,676,678],{"class":52,"line":677},30,[50,679,680],{"class":373},"}\n",[41,682,684],{"className":43,"code":683,"language":45,"meta":46,"style":46},"codex-img batch images.json --dry-run   # what it would do, no quota\ncodex-img batch images.json             # generate what's missing, convert\n",[19,685,686,703],{"__ignoreMap":46},[50,687,688,690,693,696,699],{"class":52,"line":53},[50,689,5],{"class":56},[50,691,692],{"class":59}," batch",[50,694,695],{"class":59}," images.json",[50,697,698],{"class":63}," --dry-run",[50,700,702],{"class":701},"sJ8bj","   # what it would do, no quota\n",[50,704,705,707,709,711],{"class":52,"line":70},[50,706,5],{"class":56},[50,708,692],{"class":59},[50,710,695],{"class":59},[50,712,713],{"class":701},"             # generate what's missing, convert\n",[15,715,716,719,720,723,724,727,728,114,731,114,734,114,737,740,741,743],{},[19,717,718],{},"defaults"," apply to every image, and an image can override them: the icon becomes a 128-colour PNG instead of WebP. ",[19,721,722],{},"batch"," generates four images at a time, so in one real run 22 images took about 4 minutes instead of 14. An asset with a ",[19,725,726],{},"reference"," is an edit of another, and waits for it. Images that already exist aren't generated again, so deleting one is how you re-roll it, and converting again uses no quota. An asset can also name presets (",[19,729,730],{},"view",[19,732,733],{},"style",[19,735,736],{},"character",[19,738,739],{},"palette","). Each generated image gets a small record of the prompt and inputs it was made from, and when the spec changes later, ",[19,742,722],{}," says which images no longer match it.",[745,746,747,757,765,773],"ul",{},[748,749,750,756],"li",{},[751,752,753],"strong",{},[19,754,755],{},"codex-img convert",": everything above for images you already have, with no login and no quota.",[748,758,759,764],{},[751,760,761],{},[19,762,763],{},"codex-img sheet",": lays a set out in one labelled grid, to review it as a single image.",[748,766,767,772],{},[751,768,769],{},[19,770,771],{},"codex-img tile",": makes a background wrap around, so it can repeat side by side without a mirror.",[748,774,775,780],{},[751,776,777],{},[19,778,779],{},"--key",": removes a background the model painted in despite the prompt, such as sea under a boat or sky behind a building, without touching the paint inside the object's outline.",[10,782,784],{"id":783},"details","Details",[745,786,787,793,803],{},[748,788,789,792],{},[751,790,791],{},"Same input, same file",": the same image and options always give the same bytes, so a rebuild doesn't change files in git.",[748,794,795,798,799,802],{},[751,796,797],{},"Safe with your login",": it only reads ",[19,800,801],{},"~\u002F.codex\u002Fauth.json",". It never refreshes or writes tokens, so it can't log Codex out.",[748,804,805,808,809,812],{},[751,806,807],{},"Never overwrites"," an existing file unless you pass ",[19,810,811],{},"--force",". A taken output name is refused before the request, so no image is generated only to be thrown away.",[10,814,816],{"id":815},"for-agents","For agents",[15,818,819],{},"The repository includes an Agent Skill that Claude Code, Codex and other skill-aware agents pick up when a task needs an image. It explains when to generate, what to do for each exit code (don't retry a quota or login error, for example), and how to write prompts.",[15,821,822],{},"If the binary isn't installed, the skill falls back to a small Python script that uses only the standard library. It has the same flags and output, but writes PNG only. Copying the skill folder is enough to get started.",[10,824,826],{"id":825},"install","Install",[15,828,829,830,836,837,839,840,843,844,846,847,850],{},"Download the archive for your platform from the ",[350,831,835],{"href":832,"rel":833},"https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fcodex-img\u002Freleases\u002Flatest",[834],"nofollow","latest release",". There are builds for macOS (Apple Silicon and Intel), Linux (x86-64 and ARM64, fully static) and Windows (x86-64). Put ",[19,838,5],{}," on your ",[19,841,842],{},"PATH",", and log in once with ",[19,845,21],{}," using your ChatGPT account. ",[19,848,849],{},"codex-img status"," checks the login without using any quota.",[15,852,853,854,857,858,118,861,864,865,868],{},"To build from source instead, run ",[19,855,856],{},".\u002Fscripts\u002Finstall.sh",". It also links the skill into ",[19,859,860],{},"~\u002F.claude\u002Fskills",[19,862,863],{},"~\u002F.codex\u002Fskills",". On Windows, run ",[19,866,867],{},"cargo build --release",".",[10,870,872],{"id":871},"built-with","Built with",[15,874,875,876,879,880,883,884,887,888,891],{},"Rust, as a single ~2 MB binary with no runtime dependencies. It uses ",[19,877,878],{},"ureq"," for HTTP, the ",[19,881,882],{},"image"," crate for decoding, resizing and JPEG, libwebp for WebP, ",[19,885,886],{},"exoquant"," for palettes (with a fix that makes its output the same on every run) and ",[19,889,890],{},"oxipng"," for PNG recompression. The skill's fallback script is plain Python 3.9.",[15,893,894],{},"This isn't an official API. codex-img calls the backend the Codex CLI uses, so it can break when that backend changes, and what the backend does with a request (which model, how it counts against your plan) isn't documented.",[733,896,897],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":46,"searchDepth":70,"depth":70,"links":899},[900,901,902,903,904,905,906,907,908,909],{"id":12,"depth":70,"text":13},{"id":35,"depth":70,"text":36},{"id":125,"depth":70,"text":126},{"id":156,"depth":70,"text":157},{"id":180,"depth":70,"text":181},{"id":357,"depth":70,"text":358},{"id":783,"depth":70,"text":784},{"id":815,"depth":70,"text":816},{"id":825,"depth":70,"text":826},{"id":871,"depth":70,"text":872},null,"Generate and edit images from the command line with your ChatGPT\u002FCodex subscription. No API key, and no agent in between.","\u002Fimg\u002Fproducts\u002Fcodex-img-detail.webp","md",true,"https:\u002F\u002Fgithub.com\u002Ffoksa\u002Fcodex-img","\u002Fimg\u002Fproducts\u002Fcodex-img.webp",{},"\u002Fprojects\u002Fcodex-img","macOS · Linux · Windows · CLI",{"title":5,"description":911},"projects\u002Fcodex-img",[923,924],"ai","cli",[926,927],"rust","python","4S3xXN7nR2yRMTyPBYjWWXJeeNG7suKTWLFKI1ch2GI",[],[931,934,938],{"path":352,"date":932,"title":933},"2026-10-04","codex-img 0.7 and 0.8 add camera angles, exact palettes and a way to review images",{"path":935,"date":936,"title":937},"\u002Fblog\u002Fcodex-img-0-6-0","2026-09-30","codex-img 0.5 and 0.6 turn generated images into a game's finished art",{"path":939,"date":940,"title":941},"\u002Fblog\u002Fcodex-img","2026-09-28","codex-img generates images from the terminal with your ChatGPT subscription",[943,944,949,954,960,965,970,974],{"path":918,"title":5,"description":911,"image":916,"imageFit":910,"coverLabel":910},{"path":945,"title":946,"description":947,"image":948,"imageFit":910,"coverLabel":910},"\u002Fprojects\u002Fusage-window-starter","Usage Window Starter","A macOS menu bar app that starts your next Claude Code and Codex 5-hour session the moment the old one resets.","\u002Fimg\u002Fproducts\u002Fusage-window-starter.webp",{"path":950,"title":951,"description":952,"image":953,"imageFit":910,"coverLabel":910},"\u002Fprojects\u002Fcamera-video-converter","Camera Video Converter","Free, offline Android app that turns hard-to-share camera footage into standard 1080p MP4s, right on the phone.","\u002Fimg\u002Fproducts\u002Fcamera-video-converter.webp",{"path":955,"title":956,"description":957,"image":958,"imageFit":959,"coverLabel":46},"\u002Fprojects\u002Fopen-claude-agent-sdk","open-claude-agent-sdk","Drop-in, open-source replacement for @anthropic-ai\u002Fclaude-agent-sdk. Readable TypeScript that runs on the Claude CLI you already have installed.","\u002Fimg\u002Fproducts\u002Fopen-claude-agent-sdk-home.webp","contain",{"path":961,"title":962,"description":963,"image":964,"imageFit":910,"coverLabel":910},"\u002Fprojects\u002Fyoutube-shorts-blocker","YouTube Shorts Blocker","A lightweight Chrome extension that hides YouTube Shorts everywhere and can redirect Shorts links.","\u002Fimg\u002Fproducts\u002Fyoutube-shorts-blocker.webp",{"path":966,"title":967,"description":968,"image":969,"imageFit":910,"coverLabel":910},"\u002Fprojects\u002Fsub2utf","sub2utf","Converts subtitle files (.srt) from legacy encodings to UTF-8 so Plex shows č, ć, š, đ and ž correctly.","\u002Fimg\u002Fproducts\u002Fsub2utf.webp",{"path":971,"title":972,"description":973,"image":910,"imageFit":910,"coverLabel":910},"\u002Fprojects\u002Fdocument-iteration-skill","document-iteration-skill","A lightweight markdown syntax for editing documents with Claude: leave feedback inline instead of asking it to regenerate the whole document.",{"path":975,"title":976,"description":977,"image":978,"imageFit":910,"coverLabel":910},"\u002Fprojects\u002Flitrpgvault","LitRPG Vault","A database of LitRPG and Progression Fantasy books: 250+ series with ratings, reading orders and audiobook links.","\u002Fimg\u002Fproducts\u002Flitrpgvault.webp",1791126067060]