Kling motion-control models (kling-v2.6-std, kling-v3.0-std/pro) require
image_url + video_url (and prompt for v2.6), but the v2v flow assumed a
single video upload (watermark-remover style) and called processV2V with
only video_url, getting 422 back from muapi.
- VideoStudio (vanilla + React studio): when a motion-control v2v model
is selected, keep the image upload picker active alongside the video
upload, keep the prompt textarea editable, and validate all required
inputs before generating
- processV2V (both clients): forward image_url + prompt when the model
declares imageField / hasPrompt; packages/studio adds a dedicated
processV2V export so the React studio uses it instead of generateVideo
- v2.6 motion-control marked promptRequired so the UI surfaces it
- Higgsfield Soul / Dop endpoints corrected from
higgsfield-{soul,dop}-* to hf-{soul,dop}-* (matches muapi routes)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The model catalog was duplicated between src/lib/models.js (Electron app)
and packages/studio/src/models.js (Next.js web app), both ~8400 lines.
Catalog edits (e.g. adding lastImageField for first/last frame i2v
support) had to be made in both files, and missing one caused the web
UI to silently lack features. Studio's copy is the canonical source —
the standalone now re-exports from studio/src/models.js via the existing
"studio": "*" workspace dep, collapsing 5 components' imports to a
single source of truth.
muapi.js stays duplicated for now — the two clients have incompatible
APIs (class with localStorage key vs function-with-apiKey-arg) and need
a separate harmonization pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The earlier first/last-frame work in commit 8cbaf7f only updated the
standalone Electron VideoStudio.js. The Next.js web app actually
consumes packages/studio/src/components/VideoStudio.jsx (a separate React
component with its own muapi.js + models.js), so the web UI never showed
the END picker on Kling/Veo/Seedance/Wan/Minimax i2v models.
- packages/studio/src/models.js: add lastImageField (last_image or
end_image_url) to the same 16 i2v entries.
- packages/studio/src/muapi.js: forward params.last_image into the
per-model server field in generateI2V.
- packages/studio/src/components/VideoStudio.jsx:
* uploadedEndImageUrl state + endImageFileInputRef + upload handler
* END-badged picker rendered when imageMode && model.lastImageField
* thread last_image into i2vParams; clear it in clearImageUpload
* map t2v selection to i2v sibling by family on image upload (drop
+ file change paths) instead of jumping to i2vModels[0]
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Uploading an image while in t2v mode reset the model to allI2V[0]; with
the i2v list being a concatenation of regular models + effects, that index
shifts as entries are reordered, so users saw seemingly random switches
(e.g. Veo 3.1 → AI Video Effects or seedance lite). Look up the matching
i2v variant by family (veo3.1, kling-v3.0, etc.) and only fall back to
allI2V[0] when no sibling exists.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds an optional end-frame upload picker for i2v models whose server
schema accepts a second image (kling v2.1/v3.0/o1, veo3.1, seedance
lite/v1.5-pro, wan2.2, minimax-hailuo-02). Catalog entries declare the
server-side param via `lastImageField` ("last_image" or "end_image_url")
so the picker is gated per-model and unsupported models stay unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a new "MCP & CLI" tab introducing muapi-cli, muapi-mcp-server,
and the Generative Media Skills repos with quick-start, feature cards,
and example commands. Wired into both the Next.js StudioShell (via
packages/studio) and the standalone Vite shell.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
stablediffusionapi/anything-v5 reorganized into diffusers folder format,
so the single-file checkpoint URL now 404s. Switch to Yntec/AnythingV5
which still hosts Anything-v5.0-PRT.safetensors as a single file.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wires up the new KIE.ai gpt-image-2 model so users can pick it in
Image Studio. Adds the t2i entry (endpoint gpt-image-2-text-to-image)
and the i2i edit variant (endpoint gpt-image-2-image-to-image, up to
16 input images via images_list). Uses resolution (1K/2K/4K, default
2K) instead of quality, and the wider aspect set (auto/1:1/16:9/9:16/
4:3/3:4) — existing helper functions auto-detect both shapes so the
UI dropdowns switch over without further changes.
Closes#136
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Infinite Talk i2v (and other hasPrompt lipsync models) rejected requests with
"field 'prompt' failed nullable validation" when the prompt textarea was blank,
because omitting the key caused the muapi backend to forward prompt: null.
Default to an empty string for hasPrompt models; keep omitting it for the rest.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wan2GP renames its Gradio api_names between releases (and Pinokio packages
drop them on some endpoints), so our hardcoded fn strings (ltx_video, flux,
qwen_image, wan22_t2v, etc.) failed against any current server with
"Could not infer function index for API name". Now we pull /info at probe
time, cache the registered api_names per base URL, and remap each catalog
entry via exact fn match → fnAliases → fuzzy family+type match. Unmatched
models report a clear unavailableReason in listModels(), and generate()
throws an error listing the real available endpoints instead of a cryptic
Gradio traceback.
Fixes#135.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Issue #131 reported `next dev` failing with "Couldn't find a `pages` directory"
on a fresh clone. Root cause is the README pointing users to `npm install &&
npm run dev` while the project actually needs `npm run setup` (which inits
git submodules + builds workspace packages) and most desktop users should be
running `npm run electron:dev` rather than the Next.js hosted-web entry.
- Lead Quick Start with a callout that prebuilt installers exist for non-contributors.
- Replace `npm install` with `npm run setup` and explain why.
- List both dev entry points (electron:dev for desktop, dev for hosted web).
- Add a troubleshooting note for the exact pages-dir error from #131.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes#128. Image Studio's reference-image picker was hard-wired to
muapi.uploadFile, so picking a file with a local model active prompted
for an muapi.ai API key instead of using the file locally. Mirror the
Video Studio fix from d4e645d: pass uploadFn + requireApiKey to
createUploadPicker so local-model uploads return a blob: URL via
URL.createObjectURL and bypass the auth modal entirely.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes the gap reported in #126 where local users hit "Not authorized:
missing or invalid credentials" on upload and couldn't generate video
locally even with WanGP installed. Image, video, and reference uploads
were all hard-wired to the Muapi-hosted upload endpoint, and Video
Studio had no branch into the local Wan2GP provider for generate.
- electron/wan2gpProvider: new wan2gp:upload-file IPC that POSTs to the
Gradio /upload endpoint, caches the returned path, and rehydrates it
into a Gradio FileData descriptor on generate. Adds wan2gp:wan22-i2v.
- preload + localInferenceClient: expose uploadFileToWan2gp(file).
- localModels: wan22-i2v entry, isWan2gpModelId, localT2VModels/localI2VModels.
- UploadPicker: accept optional uploadFn + requireApiKey so callers can
bypass the Muapi auth modal when the active provider is local.
- VideoStudio: merge Wan2GP video models into t2v/i2v lists, route the
reference-image upload through the local provider when a Wan2GP model
is selected, skip the Muapi key gate for local generations, call
localAI.generate, and surface step progress in the button label.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add Dockerfile (multi-stage build) and docker-compose.yml to containerize
the Next.js app. Uses port 3001 on host to avoid conflict with the local
dev server running on 3000.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The download table was still pointing at v1.0.2 — the version that hides
the Settings button behind an unlabeled key icon (root cause of #113).
Mac links updated to v1.0.7 (Wan2GP + Dreamshaper URL fix). Windows and
Linux fall back to v1.0.6 since this release ships Mac-only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
## Added
- **Wan2GP HTTP provider** alongside the existing sd.cpp engine. Settings →
Local Models now has a Wan2GP server config bar — point the desktop app
at any user-run Wan2GP Gradio server (LAN box, RunPod/vast.ai, etc.) and
the new model entries (Flux, Qwen-Image, Wan 2.2 T2V/I2V, Hunyuan, LTX)
light up. sd.cpp keeps working as before; the renderer routes per model.
## Fixed
- Dreamshaper 8 download URL — the catalog pointed at a 404'd HF repo slug
(`Lykon/dreamshaper-8`); switched to the live one (`Lykon/DreamShaper`).
## Docs
- README rewritten for the two-engine model with a copy-paste SD 1.5
sanity-test recipe that bypasses the UI and validates the local engine
end-to-end. Hardware notes flag the Z-Image hang on small-RAM Macs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Local Inference section split into two engines (sd.cpp bundled + Wan2GP
BYO server), with a comparison table explaining when each fits.
- Wan2GP setup spelled out: clone, install, run with --listen, paste URL
into Settings → Local Models. Notes that Wan2GP is CUDA/ROCm-only on the
server side and explains why a Mac user might still want it.
- Hardware Notes flags that Z-Image is known to hang on base 8 GB Macs;
recommends SD 1.5 there. Adds expected sd.cpp per-step timing on M2 with
Metal so users can spot a CPU-fallback regression.
- New "Verifying the SD 1.5 path" subsection: a 3-step curl + sd-cli
invocation that bypasses the UI and confirms the engine works end-to-end.
Mirrors what the Electron path issues, so it doubles as a release sanity
check.
- Features list line for Local Inference rewritten to mention both engines.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The catalog pointed at huggingface.co/Lykon/dreamshaper-8 which now returns
404 — the live HF repo is huggingface.co/Lykon/DreamShaper. Confirmed by
probing both URLs and downloading the file from the corrected one.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The desktop app already has a bundled sd.cpp engine for local generation. This
adds a second, complementary engine: an HTTP client that talks to a user-run
Wan2GP Gradio server (https://github.com/deepbeepmeep/Wan2GP). Useful when
sd.cpp can't run a target model — Wan2GP brings video models (Wan 2.2,
Hunyuan, LTX) and large image models (Flux, Qwen-Image) without bundling
Python or weights into the app.
Architecture
- Each model in the unified catalog now carries a `provider` field
(`'sdcpp' | 'wan2gp'`). The renderer's `localAI.generate()` routes to the
right backend based on that flag.
- sd.cpp keeps its existing IPC channels (`local-ai:*`) untouched. Wan2GP
gets its own channel namespace (`wan2gp:*`) and lives in its own
`electron/lib/wan2gpProvider.js`.
- Wan2GP server URL is persisted in `userData/local-ai/wan2gp.json`.
`Settings → Local Models` exposes a config bar to test/save the URL.
- Generation streams Gradio v4 SSE protocol; both engines emit progress on
the shared `local-ai:progress` channel.
ImageStudio
- Local-model dropdown now filters out video models (`type === 'video'`)
since the studio is image-only. SD 1.5 / SDXL / Z-Image (sd.cpp) and Flux /
Qwen-Image (Wan2GP) still surface; Wan/Hunyuan/LTX are hidden until the
Video Studio is wired up to the same surface.
- Progress event handler updated to tolerate both engines' shapes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
electron-builder's fpm/.deb target requires `homepage` in package.json;
without it `npm run electron:build:linux` fails with "Please specify
project homepage" after producing the AppImage.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fixes#108 — leejet's latest sd.cpp release (master-587-b8bdffc) only
ships Mac arm64, the Windows cudart runtime stub, and Linux ROCm. The
old matcher only ever read `releases/latest` and excluded ROCm/Vulkan,
so Ubuntu/Linux users hit "No binary found for this platform" with no
recovery path. Windows users were also broken: the only Win asset in
the latest release isn't an sd-cli build.
- Walk the last 15 leejet releases until one ships a usable build for
the current platform, so a partial latest release self-heals to the
prior tag (master-586 onwards has the full 12-zip matrix).
- Linux: prefer plain x86_64, then vulkan, then rocm (instead of
rejecting both rocm and vulkan).
- Windows: priority order avx2 > avx > avx512 > noavx > cuda12, and
skip the standalone `cudart-sd-bin-win-cu12-x64.zip` runtime stub.
- macOS Intel: surface a clear error — leejet only ships arm64.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fixes#111 — the Settings entry point was a bare icon (a key glyph in
the Electron header, a gradient circle in the web shell), which users
mistook for an avatar or didn't notice at all. Replace both with a
gear icon + "Settings" text in a bordered pill button.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fixes#110 — workflow-builder and ai-agent live in git submodules
(packages/Vibe-Workflow, packages/Open-Poe-AI). A plain `git clone`
leaves those directories empty, so `next build` fails to resolve
the `ai-agent` and `workflow-builder` workspace imports.
- README: instruct `git clone --recurse-submodules` and document
the `git submodule update --init --recursive` fallback.
- package.json: prepend submodule init to the `setup` script so
`npm run setup` works on a fresh clone too.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Feature Alibaba's Happy Horse 1.0 (#1 ranked AI video model) above the
existing GPT-Image-2 callout, linking to the Python wrapper + curated
community prompt library.