Materializr
Open-source parametric 3D CAD for makers — constraint sketches, solid modeling, threads, SVG & text engraving, STL/STEP export. Android, iPad, Linux, Mac, Windows. Vibe coded.
AI-powered 4×4 sprite animation packs from ONE reference image. 6 states, transparent BG, APNG / GIF / WebM / .moripack export.
Translation pending
DesignTypeScript · CSSGitHub @yazelinOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Web tool to produce .moripack.zip character packs for mori-desktop
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Web tool to build 1024×1024 4×4 sprite animation packs from a single character reference image.
AI-powered. Browser-only. Transparent backgrounds. Multiple export formats.
▶ Try the live app · Docs / screenshots · Buy me a coffee
You give it one reference image of your character. It produces a complete sprite animation pack for mori-desktop — 6 required + 2 optional animated states, each a 1024×1024 4×4 sprite sheet that the floating window plays back.Read the full README ↗English · 繁體中文
Web tool to build 1024×1024 4×4 sprite animation packs from a single character reference image.
AI-powered. Browser-only. Transparent backgrounds. Multiple export formats.
▶ Try the live app · Docs / screenshots · Buy me a coffee
You give it one reference image of your character. It produces a complete sprite animation pack for mori-desktop — 6 required + 2 optional animated states, each a 1024×1024 4×4 sprite sheet that the floating window plays back.
| Required (6) | Optional (2) |
|---|---|
| idle / sleeping / recording / thinking / done / error | walking / dragging |
It's built for Mori — yazelin's 森林精靈 (forest spirit) Jarvis-style AI partner who lives on the desktop. "Iron Man 有 Jarvis,我有 Mori。" This studio makes Mori's visible body — her sprite form — that the mori-desktop floating window animates.
The studio also works for any character you want to give a visible form to: your own AI partner / personal spirit / streamer overlay companion / character mascot. The Mori demo is one example of what's possible.
You can also export each state as APNG, GIF, WebM, or just the raw sheet PNG — useful for LINE animated stickers, Discord, OBS overlays, video editing, etc.
[character ref image]
│
│ (AI · 1 call → 6-cell grid)
▼
[6 static base poses] ← editable / re-rollable per state
│
│ (AI · 6 calls, one per state)
▼
[6 sprite sheets, 4×4 each] ← editable per cell, normalize across states
│
│ (optional) walking + dragging
▼
[+2 cyclic-locomotion sheets] ← W / Dr standalone pipeline (no pre-tile)
│
│ (manual sort: 反向 + 換位)
▼
[hand-tuned gait cycle]
│
│ (bake transforms + zip)
▼
[mori.moripack.zip] → mori-desktop
│
│ (per state, optional)
▼
[mori-{state}.png / .gif / .webm] → LINE / Discord / OBS
生 <state> 動畫 to produce the 4×4 sprite sheet. Uses pre-tiled placeholder + multi-anchor identity reference to keep the character locked in position with subtle motion (blink, breath, gesture)..moripack.zip — drop into mori-desktop's character folder.Generation
Walking + Dragging (optional cyclic-locomotion states)
scaleX(-1) for leftward motionManual cell sorting (post-generation tuning)
桌面預覽 view (desktop simulation)
object-cover cover full window)drop-shadow matches floating.css)Editing
prev frame + next frame + staticBase references for smooth interpolationCleanup
Cross-state alignment
Normalize scans every state's character bbox and computes per-state transform (scale + offset) so the character lands at the same size + center across all 6 statesExport
.moripack.zip — character pack for mori-desktop (manifest + 6 required sheets + 0/1/2 optional walking/dragging + 2 backdrops).moriproject.zip save/load — full author state (sheets + raw + settings) for resuming work or sharingDemo loader
✦ 載入 Mori 預設範本 button on the project page — loads a fully-configured Mori character (27 MB) so you can play around without generating from scratch. Confirmation dialog warns about overwriting current data.Per-character backdrop
.moripack per mori-desktop PR #107 3-tier backplate chain✦ 載入 Mori Demo on the project page (one-click loads a fully-configured Mori character pack — 22 MB)All providers are BYOK (bring your own key) — the free Author Fallback trial channel has been discontinued. Pick a provider in the sidebar's AI Provider section and fill in your own key (Google Gemini Direct only needs a free AI Studio API key).
git clone https://github.com/yazelin/mori-sprite-studio
cd mori-sprite-studio
npm install
npm run dev # Vite dev server
Deploy to Vercel:
vercel --prod
Set the same env vars in Vercel Dashboard → Settings → Environment Variables for production.
| Layer | Tech |
|---|---|
| UI | Vite + React 19 + TypeScript + Tailwind CSS + shadcn/ui |
| State | Zustand + IndexedDB (idb-keyval) for Blob-native persistence |
| AI providers | abstract ImageProvider interface, 3 BYOK impls (Google Gemini / Codex-Image / Vertex Gemini) |
| Chroma key | Coverage-based alpha matte + enclosed-detail recovery + edge-only despill + optional erosion |
| Sprite-sheet anim preview | Canvas + requestAnimationFrame (16-frame row-major) |
| Export encoders | upng-js (APNG), gifenc (GIF), MediaRecorder + VP9 (WebM), JSZip (.moripack / .moriproject) |
| Server-side | none — pure static frontend, all AI calls go browser → your provider (BYOK) |
Output spec: 1024×1024 PNG-32, 4×4 grid, 256×256 per cell, row-major frame order, transparent background. Conforms to mori-desktop's character-pack.md v1.0.
| Format | What it's for | Contents |
|---|---|---|
.moripack.zip | Consumer format — drop into mori-desktop's character folder | manifest.json + sprites/{6 states}.png + backdrop-{light,dark}.png |
.moriproject.zip | Author format — resume editing later / share configured starting point | project.json + character-ref.png + sprites/{state}/{sheet,raw-sheet,static-base,raw-static-base}.png + backdrops |
| APNG (.png) | Transparent + looping. LINE animated stickers / Discord / Slack / Twitter inline | Standard APNG with acTL/fcTL chunks |
| GIF (.gif) | Universal compatibility (Mac Preview, Windows Photos animate it natively). 1-bit alpha so edges are slightly crusty | Standard GIF89a |
| WebM (.webm) | VP9 + alpha channel. OBS streaming overlays, QuickTime, browsers. Records 3 loops | VP9 codec via MediaRecorder |
| Raw sheet (.png) | The 1024×1024 4×4 sheet itself. For external editing / inspection | PNG-32 RGBA |
| State | Required | Loop mode | Duration | Pose hint |
|---|---|---|---|---|
| idle | yes | loop | 3000 ms | Standing front-facing, gentle smile, calm welcoming |
| sleeping | yes | loop | 5000 ms | Cross-legged, eyes closed, hands in lap, floating Z |
| recording | yes | loop | 1500 ms | Hand cupped to ear (LISTENING to user, not holding a mic), wide alert eyes |
| thinking | yes | loop | 2000 ms | Finger to temple, eyes glancing up, thought sparkles |
| done | yes | one-shot (sub-pattern A burst-and-settle) | 1800 ms | Both hands raised in victory cheer, joyful ^v^ smile |
| error | yes | one-shot (sub-pattern B sustained-energy) | 2000 ms | Hands to head in cute distressed "oh no!" pose, tear-drop / tension lines |
| walking | opt | loop | 2500 ms | Neutral full-body standing reference (facing right). Actual gait cycle rendered in 16 frames via W template. |
| dragging | opt | loop | 1600 ms | Neutral full-body reference (feet planted in static, suspended swing in 16-frame animation via Dr template). |
Required = mori-desktop expects these 6. Optional = if missing, mori-desktop falls back to idle.png + CSS transforms.
State semantics are editable per project — see src/defaults/semantics.ts for defaults.
The studio code: MIT.
The generated character pack (sprites you make): your work, your choice of license. The Mori reference character bundled as demo is CC-BY-NC-SA-4.0 (attribute, non-commercial, share-alike).
Building this is running on love + caffeine. If you find it useful:
This is self-funded out of pocket. Coffee = direct support for:
You can also ⭐ this repo + share with anyone building their own AI companion / desktop spirit.
If you have a ChatGPT Plus / Pro subscription, you can pair this studio with codex-image-service — a FastAPI wrapper that exposes Codex CLI's $imagegen as an HTTP endpoint, so your subscription's image-gen quota powers studio's generations.
Three ways to combine them:
| Setup | What you need | When it makes sense |
|---|---|---|
| A. Studio (hosted) + your own Gemini key | A free AI Studio API key | New users, exploring, low-volume |
| B. Studio (hosted) + your own codex-image-service | Run codex-image-service somewhere reachable + issue yourself a Bearer key | You have ChatGPT Plus + want unlimited use |
| C. Both self-hosted | Clone + run both repos locally | Full control, offline, no external dependencies |
cimg_…)https://your-domain.example/codex-image)cimg_… you just issuedauto (default) or low / medium / highIf you self-host both, codex-image-service must allow your studio's origin via CORS. yazelin's deployment already does (Access-Control-Allow-Origin reflects request origin); for new self-hosts, see codex-image-service repo for CORS middleware setup.
Made by yazelin