Merge remote-tracking branch 'origin/main' into feat/modernize-studio-upload

This commit is contained in:
Jaya Prasad Kavuru 2026-04-22 15:46:10 +05:30
commit 911bcdd558
5 changed files with 59 additions and 16 deletions

View file

@ -2,6 +2,8 @@
> **The free, open-source, unrestricted alternative to Higgsfield AI, Freepik, Krea, Openart AI.** Generate AI images and videos using 200+ state-of-the-art models — no content filters, no closed ecosystem, no subscription fees.
> 💡 **Looking for GPT-Image-2 prompts?** Check out [Awesome GPT-Image-2 API Prompts](https://github.com/Anil-matcha/Awesome-GPT-Image-2-API-Prompts) — a curated collection of 40+ ready-to-use prompts for the OpenAI `gpt-image-2` API covering portraits, posters, UI mockups, game screenshots, and more.
## 🌐 Try it Online — No Install Required
**Hosted version:** [https://dev.muapi.ai/open-generative-ai](https://dev.muapi.ai/open-generative-ai)
@ -22,9 +24,9 @@ One-click installers — no Node.js or terminal required.
| Platform | Download |
|---|---|
| macOS Apple Silicon (M1/M2/M3/M4) | [Open Generative AI-1.0.0-arm64.dmg](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.0/Open.Generative.AI-1.0.0-arm64.dmg) |
| macOS Intel (x64) | [Open Generative AI-1.0.0.dmg](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.0/Open.Generative.AI-1.0.0.dmg) |
| Windows (x64 + ARM64) | [Open Generative AI Setup 1.0.0.exe](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.0/Open.Generative.AI.Setup.1.0.0.exe) |
| macOS Apple Silicon (M1/M2/M3/M4) | [Open Generative AI-1.0.2-arm64.dmg](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.2/Open.Generative.AI-1.0.2-arm64.dmg) |
| macOS Intel (x64) | [Open Generative AI-1.0.2.dmg](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.2/Open.Generative.AI-1.0.2.dmg) |
| Windows (x64 + ARM64) | [Open Generative AI Setup 1.0.2.exe](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.2/Open.Generative.AI.Setup.1.0.2.exe) |
| Linux (Ubuntu x64) | Build locally with `npm run electron:build:linux` |
All releases: [github.com/Anil-matcha/Open-Generative-AI/releases](https://github.com/Anil-matcha/Open-Generative-AI/releases)
@ -125,6 +127,7 @@ For a deep dive into the technical architecture and the philosophy behind the "I
- **Video Studio** — Generate videos from text prompts (40+ text-to-video models) or animate a start-frame image (60+ image-to-video models). Same intelligent mode switching as Image Studio.
- **Lip Sync Studio** — Animate portrait images or sync lips on existing videos using audio. 9 dedicated models across two modes: portrait image + audio → talking video, and video + audio → lipsync video.
- **Cinema Studio** — Interface for photorealistic cinematic shots with pro camera controls (Lens, Focal Length, Aperture)
- **Workflow Studio** — Build and run multi-step AI pipelines visually. Chain image, video, and audio models into automated flows. Browse community templates, create your own with a node-based editor, and run them via an interactive playground.
- **Upload History** — Reference images are uploaded once and stored locally. A picker panel lets you reuse any previously uploaded image across sessions — no re-uploading.
- **Smart Controls** — Dynamic aspect ratio, resolution/quality, and duration pickers that adapt to each model's capabilities (including t2i models with resolution or quality options)
- **Generation History** — Browse, revisit, and download all past generations (persisted in browser storage)
@ -233,6 +236,20 @@ The **Lip Sync Studio** generates audio-driven talking videos using 9 models acr
Generation history is saved separately in `lipsync_history` and pending jobs resume automatically on page reload.
### 🔀 Workflow Studio
The **Workflow Studio** lets you build and run multi-step AI pipelines without writing code.
**Key capabilities:**
- **Templates** — Start from pre-built workflows (image chains, video pipelines, and more)
- **My Workflows** — Save and manage your own custom pipelines
- **Community** — Browse and run workflows published by other users
- **Node-based Builder** — Drag-and-drop visual editor to connect models and route outputs between steps
- **Playground** — Run any workflow interactively with a form UI; results render inline
- **API execution** — Every workflow is also callable via the Muapi API
> 💡 **Want to add workflows to your own app?** Check out **[Vibe Workflow](https://github.com/SamurAIGPT/Vibe-Workflow)** — the open-source workflow engine powering this feature. Drop it into any project.
### 🎥 Cinema Studio Controls
The **Cinema Studio** offers precise control over the virtual camera, translating your choices into optimized prompt modifiers:
@ -323,14 +340,15 @@ Open-Generative-AI/
├── packages/
│ └── studio/ # Shared React component library
│ └── src/
│ ├── index.js # Exports: ImageStudio, VideoStudio, LipSyncStudio, CinemaStudio
│ ├── index.js # Exports: ImageStudio, VideoStudio, LipSyncStudio, CinemaStudio, WorkflowStudio
│ ├── models.js # 200+ model definitions (single source of truth)
│ ├── muapi.js # API client (named exports, apiKey as first param)
│ └── components/
│ ├── ImageStudio.jsx # Dual-mode t2i/i2i studio
│ ├── VideoStudio.jsx # Dual-mode t2v/i2v studio
│ ├── LipSyncStudio.jsx # Portrait/video + audio → talking video
│ └── CinemaStudio.jsx # Pro studio with camera controls
│ ├── CinemaStudio.jsx # Pro studio with camera controls
│ └── WorkflowStudio.jsx # Multi-step pipeline builder & playground
├── next.config.mjs # transpilePackages: ['studio']
├── tailwind.config.js
└── package.json # workspaces: ["packages/studio"]

View file

@ -1,8 +1,35 @@
import { execSync } from 'child_process';
import path from 'path';
import fs from 'fs';
export default async function afterPack({ appOutDir, packager }) {
if (packager.platform.name !== 'mac') return;
const platformName = packager.platform.name;
// Remove Next.js SWC native binaries that don't belong on this target platform.
// They are bundled because `next` is in dependencies, but only the host-platform
// binary is ever used at runtime in the Electron app.
const nextDir = path.join(appOutDir,
platformName === 'mac'
? `${packager.appInfo.productName}.app/Contents/Resources`
: 'resources',
'app.asar.unpacked/node_modules/@next'
);
if (fs.existsSync(nextDir)) {
const keepPrefix = platformName === 'mac' ? 'swc-darwin'
: platformName === 'windows' ? 'swc-win32'
: 'swc-linux';
for (const entry of fs.readdirSync(nextDir)) {
if (entry.startsWith('swc-') && !entry.startsWith(keepPrefix)) {
const fullPath = path.join(nextDir, entry);
fs.rmSync(fullPath, { recursive: true, force: true });
console.log(` • removed foreign SWC binary path=${fullPath}`);
}
}
}
if (platformName !== 'mac') return;
const appPath = path.join(appOutDir, `${packager.appInfo.productName}.app`);
console.log(` • ad-hoc signing path=${appPath}`);

View file

@ -2,7 +2,7 @@
"name": "open-generative-ai",
"description": "Open-source alternative to Higgsfield AI — AI image, video, cinema and lip sync studio",
"private": true,
"version": "1.0.1",
"version": "1.0.2",
"workspaces": [
"packages/studio",
"packages/workflow-ui",
@ -54,8 +54,7 @@
{
"target": "nsis",
"arch": [
"x64",
"arm64"
"x64"
]
}
]

View file

@ -1,11 +1,10 @@
import { getModelById, getVideoModelById, getI2IModelById, getI2VModelById, getV2VModelById, getLipSyncModelById } from './models.js';
const BASE_URL = 'https://api.muapi.ai'; // Legacy direct URL
const PROXY_APP_BASE = '/api/app';
const BASE_URL = 'https://api.muapi.ai';
const PROXY_WF_BASE = '/api/workflow';
async function pollForResult(requestId, key, maxAttempts = 900, interval = 2000) {
const pollUrl = `${PROXY_APP_BASE}/v1/predictions/${requestId}/result`;
const pollUrl = `${BASE_URL}/api/v1/predictions/${requestId}/result`;
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
await new Promise(resolve => setTimeout(resolve, interval));
try {

View file

@ -2162,7 +2162,7 @@ export const t2vModels = [
},
{
"id": "seedance-v2.0-t2v",
"name": "Seedance 2.0",
"name": "SD 2",
"inputs": {
"prompt": { "type": "string", "title": "Prompt", "name": "prompt", "description": "The prompt to generate the video" },
"aspect_ratio": { "enum": ["16:9", "9:16", "4:3", "3:4"], "title": "Aspect Ratio", "name": "aspect_ratio", "type": "string", "description": "Aspect ratio of the output video.", "default": "16:9" },
@ -2172,10 +2172,10 @@ export const t2vModels = [
},
{
"id": "seedance-v2.0-extend",
"name": "Seedance 2.0 Extend",
"name": "SD 2 Extend",
"requiresRequestId": true,
"inputs": {
"request_id": { "type": "string", "title": "Request ID", "name": "request_id", "description": "Request ID of the original Seedance 2.0 video generation.", "placeholder": "abcdefg-123-456-789-a1b2c3d4e5f6" },
"request_id": { "type": "string", "title": "Request ID", "name": "request_id", "description": "Request ID of the original SD 2 video generation.", "placeholder": "abcdefg-123-456-789-a1b2c3d4e5f6" },
"prompt": { "type": "string", "title": "Prompt", "name": "prompt", "description": "Optional prompt to guide the extension. If omitted, the model continues with the original scene." },
"duration": { "enum": [5, 10, 15], "title": "Duration", "name": "duration", "type": "int", "description": "The duration of the generated video extension in seconds", "default": 5 },
"quality": { "enum": ["high", "basic"], "title": "Quality", "name": "quality", "type": "string", "description": "Quality of the generated video.", "default": "basic" }
@ -7938,7 +7938,7 @@ export const i2vModels = [
},
{
"id": "seedance-v2.0-i2v",
"name": "Seedance 2.0 I2V",
"name": "SD 2 I2V",
"endpoint": "seedance-v2.0-i2v",
"family": "seedance-v2.0",
"imageField": "images_list",