# Janhavi Tupe

- **Event:** [Meta Global AI Developer Hackathon](https://cerebralvalley.ai/e/meta-ai-developer-hackathon)
- **When:** Oct 26, 12:00 PM – Nov 4, 9:00 PM (EST)
- **Where:** Online
- **Team:** [Janhavi Tupe](https://cerebralvalley.ai/u/janhavitupe)
- **GitHub:** https://github.com/janhavitupe/kitsune
- **Demo video:** https://youtu.be/-3Xucvz9Gd0?si=0JIHTr5D5fDLuY8F
- **Gallery:** https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery
- **Page:** https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1598

Kitsune: version control for digital artists
Inspiration
Every artist has a folder like this: painting_final.kra, painting_final2.kra, painting_FINAL_actually.kra. Programmers solved this years ago with git, but git doesn't understand art. It can't tell you what changed in a painting, it can't merge two versions of one, and it treats a 200 MB layered file as an unreadable blob. We wanted artists to get what coders already have: try anything, never lose anything, and always be able to go back.

What it does:
-Kitsune tracks your artwork while you keep painting in your own software, such as Krita, Photoshop or anything that exports PNG.
Every version, layers included. Each commit stores your original .kra, .psd or .ora file whole, so going back to an old version gives you back its layers, not a flattened image.

-Readable history. Kitsune tells you in plain words what changed, like "Changed the sky (darker, warmer) and the hills (more saturated)", and writes the commit message for you.

-Branches for ideas. Try a dusk palette or a different pose from any version without touching your main piece.

-Layer-by-layer merging. Merge two branches of a Krita file and each layer is combined inside the file. If both sides changed the same layer, you keep both copies plus a layer showing where they overlap, so you decide in Krita.

-Bring back one part. Liked the old sky better? Bring just that area back from an old version and keep everything you painted since. You can also draw around the area yourself.

-Recover lost layers. Deleted a layer three versions ago? Kitsune restores it in its original place.

-Go to any version. kitsune rebase v4 makes any version your latest. If you have unsaved changes, it asks whether to commit them, put them on a new branch, or discard them. Versions you move away from are kept on their own branch, never silently lost.

-Notes and client feedback. Type or record a voice note on any version; voice notes are transcribed automatically.

-Search your history in plain language, like "before I changed the sky" or "client wanted it warmer".



How we used Meta's models:
-SAM 3.1 names the regions of each painting (sky, sun, hills, tree, figure), so diffs say what changed instead of where.

-Muse Spark writes commit messages and captions, and reads plain-language search queries.

-Muse Wonder suggests palette directions and drives the assistant.
Muse Voice transcribes spoken client feedback into notes.

One firm rule: the AI never paints. Palette variations recolour your own pixels, and bring-backs copy your own earlier work. Every brushstroke in Kitsune's history was made by the artist.



How we built it:

-Backend: Python and FastAPI, with SQLite and content-addressed storage, so identical images are stored once.
-Frontend: React with TypeScript and Vite, deployed on Vercel. The backend runs on Render.
-CLI: a Python command-line tool that talks to the same API.
Krita merging: we read .kra files directly (a zip of per-layer pixel data and XML) for layer-level merges and layer recovery.
-Region-aware diffs: a pixel-level change mask is intersected with 
-SAM's regions. Every AI response is cached, so nothing is paid for twice and the demo runs offline.
-History you can trust: cherry-picks, merges and the assistant always create new versions, and your own work is never rewritten.
Tests: 187 automated tests, with every model call faked.

Accomplishments I am proud of:
-Merging Krita files layer by layer actually works, and you open the result in Krita with every layer intact.
-Diffs read like a person describing the painting, not a list of coordinates.
-Nothing is ever lost by accident: every destructive action asks first or keeps a copy.


What I learnt:
Version control isn't really about storage. It's about giving people the confidence to experiment. Artists don't need git's vocabulary; they need "try this", "go back" and "keep that part".

What's next
-More file formats: Photoshop-native layer merging (today it's Krita and OpenRaster).
-Sharper regions: decoding SAM's full masks instead of boxes.
-Collaboration: shared pieces for artist–client review.
-Plugins: Krita and Photoshop plugins, so committing is one button inside the paint app.

## More from Meta Global AI Developer Hackathon

- [Mixray](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1595)
- [Bandesh](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1596)
- [Touseef](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1597)
- [Verify and Train on WhatsApp](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1599)
- [Icecream and Deb](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1600)
- [AweSpark](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1601)

---

Markdown version of https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1598. Site index for agents: https://cerebralvalley.ai/llms.txt · full text: https://cerebralvalley.ai/llms-full.txt
