AI Ukiyo-e wallpaper forge. Pick one of four Edo-period masters (Yoshitoshi / Utamaro / Hokusai / Kuniyoshi), type a scene, get a vertical 1320×2868 iPhone-ready wallpaper rendered in that master's idiom.
Live: ukiyo.openclawd.co
Frontend (React + Vite + Tailwind) → Cloudflare Pages
│
▼
Worker (Cloudflare Workers + Durable Object)
│ ├─ queue + rate limit (KV)
│ ├─ prompt synthesis → Kimi (moonshot) / Qwen3.6-max-preview
│ └─ image generation → Dashscope wan2.7-image-pro
▼
Dashscope OSS → signed PNG URL → stream back via SSE
# Frontend
npm install
npm run dev # vite on http://localhost:5173
# Worker
cd worker
npm install
npx wrangler dev # http://localhost:8787- Cloudflare account with Workers + Pages + one zone (edit
wrangler.tomlroutes) - A Dashscope (Alibaba Cloud Model Studio) API key with access to
wan2.7-image-proand at least one chat model (kimi-k2-thinkingorqwen3.6-max-preview)
cd worker
npx wrangler secret put DASHSCOPE_API_KEY
# paste your key when promptedOptional (only needed if you use a Kimi/Moonshot key separate from your
Dashscope-compatible account; the default worker calls Kimi via the Dashscope
compatible-mode endpoint and reuses DASHSCOPE_API_KEY):
npx wrangler secret put KIMI_API_KEYnpx wrangler kv:namespace create RATE_LIMIT
# copy the id into wrangler.toml under [[kv_namespaces]]# Worker
cd worker && npx wrangler deploy
# Frontend to Cloudflare Pages (from repo root)
npm run build
npx wrangler pages deploy dist --project-name ukiyo-eThe worker builds its image prompt from a per-master preamble + palette +
technique block, plus LLM-filled narrative slots (centralFocus /
environment / colorMaterial / atmosphere / moodWord). See
worker/src/index.ts for the STYLE_MAP, UKIYO_NEGATIVE, and
UKIYO_DETAIL_MANDATE blocks — the "museum nishiki-e density" directive
is what pushes wan2.7 toward authentic 19th-century polychrome woodblock
output instead of a modern simplified illustration.
MIT — see LICENSE.