Codex + Cowart Infinite Canvas: I Gave Mona Lisa Some “Modern Gear”
Recently I've been playing around with a genuinely interesting tool in Codex — Cowart, the infinite canvas.
It's a native infinite-canvas plugin for Codex, built on tldraw. One idea can go in several different directions at once, and any of those versions can keep growing.
Remember the workflow we grew up with? Generate an image → not happy → regenerate. The whole process runs in a straight line.
Cowart is different. One image can be pushed in several directions at the same time, and any version can become a new starting point for further edits.
So this time I picked an image everyone knows —
Mona Lisa.
No re-drawing the whole thing. No complicated prompts.
Just three very simple changes:
Sunglasses 😎
A cup of coffee ☕
Phone selfie 🤳
Then I kept working from the most fun one — the selfie — to see how far Codex + Cowart could push this 500-year-old painting.
📚 Table of Contents (click to jump)
- 00|Install Cowart: Put an Infinite Canvas in Codex in Three Minutes
- 01|Put Mona Lisa Into the Infinite Canvas First
- 02|Branch One: Give Mona Lisa Sunglasses 😎
- 03|Branch Two: 500 Years In, Mona Lisa Starts Drinking Coffee ☕
- 04|Branch Three: Let Mona Lisa Take a Selfie 🤳
- 05|Now the Infinite Canvas Starts to Make Sense
- 06|Keep Growing From the “Selfie” Version
- FAQ: Common Questions About the Cowart Infinite Canvas
00|Install Cowart: Put an Infinite Canvas in Codex in Three Minutes
Before we start playing, let's get the tool installed.
Cowart is a native infinite-canvas plugin for Codex, built on tldraw. Open a canvas right inside Codex, annotate images, generate new images from annotations, and build AI HTML and AI Slides too. Canvas data lives in the current project's canvas/ directory, with no local server or extra browser window.
The simplest install: paste this block to Codex as-is and let it run the install and checks itself:
Install the Cowart Codex plugin through the Git marketplace that ships with the Cowart repository.
First run codex plugin marketplace add zhongerxin/Cowart --ref main,
then run codex plugin add cowart@cowart-github, and confirm the plugin is enabled with codex plugin list.
The Cowart release already includes a self-contained MCP and pre-built Widget; after install it will not run npm install in the plugin cache, and new users don't need to pre-install tldraw.
Don't manually install dependencies in the current repository, the plugin cache, or marketplace snapshot directories.
Don't clone the repository into the personal marketplace. After the install completes, clearly remind me:
You must fully quit and restart Codex once before using Cowart.
⚠️ You Must Fully Restart Codex After Installing
Don't skip this step: fully quit Codex, then launch it again.
After the restart, Cowart's new skills and MCP tools load completely. If you start using it without restarting, you'll likely hit a canvas that won't open or tools that don't respond.
Installed?
Then let's begin.
01|Put Mona Lisa Into the Infinite Canvas First

Prepare a clean, high-resolution image of Mona Lisa, open the Cowart canvas in Codex, and drop the image in — it becomes the project's root node.
One principle for this session: avoid regenerating the whole Mona Lisa. The figure, face, clothing, background, composition and original oil-painting texture all stay as they are; we only edit the spots we mark.
Start with the simplest change.
02|Branch One: Give Mona Lisa Sunglasses 😎
Select the original image, mark the area near the eyes, and tell Codex:
Give Mona Lisa a pair of modern black slim-frame sunglasses, fitted naturally to the face's perspective and the original lighting. Keep everything else — figure, clothing, background, pose, composition and painting style — completely unchanged.
Let Codex edit from your annotation. Now the canvas has its first branch:

Original Mona Lisa → Sunglasses version
Really, it's just one added pair of sunglasses. But the whole mood shifts immediately.
Same expression as before, same dress, same background — the only difference is a bit of…
"She's already seen through everything."
First round of edits done.
03|Branch Two: 500 Years In, Mona Lisa Starts Drinking Coffee ☕
Here's the key move: don't keep editing the sunglasses version. Go back to the original Mona Lisa and create a new branch from the original.
This time, mark the area near the hands:
Let Mona Lisa naturally hold a modern takeaway coffee cup with a realistic paper cup and lid structure, blending naturally into the original hand pose, perspective and lighting. Everything else stays completely unchanged.

Original Mona Lisa → Coffee version
This is where the canvas starts to get interesting.
If you keep editing the previous image — original → sunglasses → sunglasses + coffee → sunglasses + coffee + phone — the whole process is still a straight line, and ordinary chat-based image generation can do that.
But here we keep the original and test two directions — "what if she wears sunglasses" and "what if she drinks coffee" — two ideas that never interfere with each other.
04|Branch Three: Let Mona Lisa Take a Selfie 🤳
Same approach. Go back to the original Mona Lisa and create a third branch straight from the original.
Mark the area near the hands:
Let Mona Lisa naturally hold a modern smartphone in one hand, lifting it slightly toward herself as if taking a selfie. Keep her original measured, mysterious expression; the phone and hand follow correct perspective; all other features, clothing, background and painting style stay completely unchanged.

Here I actually wanted AI to avoid making her too modern — no modern clothes, no modern makeup, and no turning the oil painting into a photo.
She's still the same Mona Lisa — same expression, same background.
The only wrong note: she suddenly pulls out a phone and starts a selfie.
That anachronistic tension is more fun than turning Mona Lisa into a modern girl.
05|Now the Infinite Canvas Starts to Make Sense
Pause here for a second.
The whole canvas holds just four images:the original Mona Lisa, plus three branches — sunglasses / coffee / selfie. Roughly:
😎 sunglasses
↗
original Mona Lisa ────→ ☕ coffee
↘
🤳 selfieNot many images. But all three creative directions are right in front of you, ready to compare:
Which one is the most fun?
My pick: the selfie. Let's keep going.
06|Keep Growing From the “Selfie” Version
This time, don't go back to the original. Take the selfie version we just made as the new starting point.
Keep Mona Lisa's selfie pose, identity, clothing, background and oil-painting style unchanged; have her other hand naturally make a modern peace sign ✌️. The hand structure and perspective stay natural, and keep her original measured, mysterious facial expression.

Now the structure becomes:
😎 sunglasses
↗
original Mona Lisa ────→ ☕ coffee
↘
🤳 selfie
↓
✌️ selfie 2.0This is where "infinite canvas" genuinely starts to make sense — any node can become a new starting point and keep growing.
In Closing
No complicated prompts. No batch of dozens of images.
Just one Mona Lisa, and three questions:
What if she wears sunglasses?
What if she drinks coffee?
What if she takes a phone selfie?
Turns out the selfie is the most fun, so I kept editing from there.
I think this is the comfortable way to use an infinite canvas:
It's not infinite generation for its own sake — it's giving every good idea room to keep growing.
FAQ: Common Questions About the Cowart Infinite Canvas
What is Cowart?
Cowart is a native infinite-canvas plugin for Codex, built on tldraw. It lets Codex brainstorm on a visual canvas, annotate images, generate new images from those annotations, and build runnable single-file HTML (AI HTML) and full slide decks (AI Slides). It's open source on GitHub.
What's the difference between an infinite canvas and ordinary chat-based image generation?
In chat-based image generation, every new edit overwrites the previous image — you can only go down one path, and to try a second direction you have to start over. The Cowart canvas lets one original image carry several independent edit branches at once. Each branch is saved separately on the canvas and can be edited further at any time. The hard-to-manage problem of "many versions, many directions" in AI creation is exactly what a canvas structure holds.
My Cowart canvas won't open after installing. Why?
Nine times out of ten you didn't restart. After installing or updating Cowart, fully quit and restart Codex so the new skills and MCP tools load completely. If it still fails after a restart, run codex plugin list to confirm the plugin is enabled.
Where is the Cowart canvas data saved?
In the current project's canvas/ directory: canvas/pages/<page-id>/cowart-canvas.json is the canvas page, and canvas/pages/<page-id>/assets/ holds images and other resources. Data follows the project — it's not stored in the plugin repository.
Do I need to pre-install tldraw or manually install dependencies?
No. The Cowart release already includes a self-contained MCP and a pre-built Widget. After install, Codex loads them directly — no npm install runs in the plugin cache, and tldraw doesn't need to be pre-installed.
Need a higher Codex plan? Check the Codex top-up page for supported plans, payment methods, and delivery.
About the Author
UPGPTs Team creates step-by-step, screenshot-heavy tutorials for AI tools like ChatGPT, Claude, Grok and Codex. Find more in the UPGPTs Tutorial Hub, check the FAQ, or reach us via the Contact page.
