- Rename vite.config.js to vite.config.mjs so ESM-only @tailwindcss/vite
loads correctly (CJS require() can't import ESM modules)
- Remove tailwindcss from postcss.config.js — handled by @tailwindcss/vite
in Tailwind v4; the v3 PostCSS plugin conflicts with v4 CSS syntax
- Add "main": "electron/main.js" to package.json so electron-builder
finds the entry point instead of defaulting to index.js
- Bump version to 1.0.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The generate_wan_ai_effects endpoint requires both `name` (effect type)
and `prompt` (str) fields. The client was sending neither — `name` had
no state/UI/payload entry, and `prompt` was omitted when blank — causing
a 422 Unprocessable Entity error.
- Add selectedEffectName state and getEffectNamesForModel() helper
- Add Effect dropdown button (visible only for ai-video-effects /
motion-controls) with the full enum list from the model definition
- Wire updateControlsForModel to initialize/reset selectedEffectName
- Pass name in i2vParams at generate time
- Always send prompt (defaults to '') so the required str field is present
- Forward params.name in muapi.js generateI2V payload
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update all references across source files, config, and docs — including
page titles, app name, package name, Electron window title, and release
asset URLs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add CSS tooltip system with data-tooltip attribute
- Tooltips appear on hover with smooth animation
- Non-blocking: uses pointer-events: none
- Added to ImageStudio, VideoStudio, and CinemaStudio buttons
- Add Quick Starters and Prompt Enhancer to ImageStudio
- 8 preset prompts (Portrait, Landscape, Product, Fantasy, Sci-Fi, Food, Architecture, Fashion)
- 23 enhancement tags across 4 categories (quality, lighting, mood, style)
- Collapsible panel accessible via 'Tools' button
- Add Camera Builder to CinemaStudio
- Quick-access camera/lens/focal/aperture selector
- Live preview using buildNanoBananaPrompt()
- Accessible via 'Builder' button
- Refactor shared constants to promptUtils.js
- ENHANCE_TAGS and QUICK_PROMPTS now exported from promptUtils
- FOCAL_PERSPECTIVE and APERTURE_EFFECT also exported
- Update AssistPage to use shared constants from promptUtils
- Also includes TemplatesPage fix for searchability
Removes the DropdownPanel component that depended on the external `glass`
CSS class. Uses inline {open && <div bg-[#111]>} pattern and a single
dropdownRef, consistent with ImageStudio.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
overflow-x-auto implicitly sets overflow-y:auto, creating a clipping
context that cut off the upward-opening position:absolute dropdown
panels. Changed to flex-wrap so buttons wrap on narrow screens and
dropdowns display correctly.
Replace translate-based centering (md:left-1/2 md:-translate-x-1/2)
with margin-auto approach (md:left-0 md:right-0 md:mx-auto) to fix
prompt bar not being centered when rendered inside Tailwind v4 host app.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add download table for macOS and Windows installers in README
- Add desktop app build instructions to Quick Start section
- Move electron-builder output to release/ to avoid Vite dist conflicts
- Add electron:build:all script to build all platforms in one pass
- Add electron/main.js as the Electron main process
- Configure electron-builder for macOS (x64 + arm64 DMG) and Windows (x64 + arm64 NSIS installer)
- Add build scripts: electron:build (mac), electron:build:win (windows)
- Set vite base to './' for file:// protocol compatibility in Electron
- Add mode control (fun/normal/spicy) to VideoStudio for models that support it; wired through generateVideo and generateI2V in muapi.js
- Add getModesForModel helper to models.js
- Header key button now opens SettingsModal to update API key in-place instead of wiping and reloading
- Fix silent failures: catch block no longer overridden by finally; errors now display for 4s before resetting
- Restore hero section on generation failure so the page doesn't look broken
- Extend video polling timeout from 4 min to 30 min (900 attempts)
- Add pending job recovery: save requestId to localStorage on submit, resume polling on studio load with a live banner showing progress
- Add onRequestId callback to all muapi generate methods (generateImage, generateI2I, generateVideo, generateI2V, processV2V)
- New pendingJobs.js utility for CRUD operations on pending jobs in localStorage