Skip to content
Merged

Dev #63

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
0e81d50
feat: history parameter recall + fix batch history display
HiramJiang Feb 28, 2026
9ed9060
fix: clear selectedHistoryIndex when starting new run or batch
HiramJiang Feb 28, 2026
2911742
fix: downgrade esrgan CDN model versions to fix 404 errors
HiramJiang Feb 28, 2026
0e04aa0
feat: add playground panels and update templates UI
Leeon-Tang Feb 28, 2026
b305190
Merge branch 'dev' of https://github.com/WaveSpeedAI/wavespeed-deskto…
Leeon-Tang Feb 28, 2026
bd9d0e8
feat: move WebPage & Docs buttons to global titlebar with fixed links
Leeon-Tang Feb 28, 2026
3befd63
refactor: improve playground UI organization
linqiquan Feb 28, 2026
c9fa70c
chore: format code with prettier
linqiquan Feb 28, 2026
f9ea1e9
feat: playground UI polish — animations, layout, and visual refinements
HiramJiang Feb 28, 2026
b8eab4a
feat: improve playground empty state with action buttons
HiramJiang Mar 1, 2026
beaa5c6
feat: add "Generation complete" title to auto-save toast + format wit…
HiramJiang Mar 1, 2026
c07898d
fix: default popularity sort to descending (most popular first)
HiramJiang Mar 1, 2026
b8bb9dc
feat: playground UX polish — sliding tab indicator, featured descript…
HiramJiang Mar 1, 2026
441be8b
fix: ModelSelector family grouping, search precision, and misc UX fixes
HiramJiang Mar 1, 2026
0ed758e
Improve search precision and format model selector display
HiramJiang Mar 1, 2026
f16308c
Polish playground UX: history nav, search sort, workspace display, ta…
HiramJiang Mar 1, 2026
fbb2295
Improve batch shimmer, auto-show results, fix keyboard conflicts
HiramJiang Mar 1, 2026
05ec3a0
Add history navigation to fullscreen single-output preview
HiramJiang Mar 1, 2026
80548ca
Add swap button rotation animation and featured model image skeleton
HiramJiang Mar 1, 2026
8ce3dde
Add entrance animations to FlappyBird overlay elements
HiramJiang Mar 1, 2026
2794176
Polish nav icons, empty state, card stagger animation, sidebar NEW badge
HiramJiang Mar 1, 2026
a9f3c88
Switch to Result tab on model select, add LoRA limit toast, model gri…
HiramJiang Mar 2, 2026
25db199
Add confirmation dialog before clearing all cache
HiramJiang Mar 2, 2026
0e98229
Improve playground UX: upload progress, history kbd hint, nav replace
HiramJiang Mar 3, 2026
caef86b
feat: sync page title icons with sidebar, add workflow page title wit…
Leeon-Tang Mar 3, 2026
96c94e6
feat: move Models panel from playground to sidebar as standalone page
Leeon-Tang Mar 3, 2026
6147cfb
feat: responsive grid cols, fix flicker, parallel model loading & cache
Leeon-Tang Mar 3, 2026
e0b9c14
fix: responsive model grid cols, card layout polish, move + tab butto…
Leeon-Tang Mar 3, 2026
ef9309a
feat: browser-style tab bar — auto-shrink tabs, remove top-bar Templa…
HiramJiang Mar 3, 2026
5b9e3cf
fix: Models page black screen — remove lazy load, sync filter computa…
HiramJiang Mar 3, 2026
b351800
fix: reduce page-enter animation flicker on route switch
HiramJiang Mar 3, 2026
bfd6242
fix: remove page-enter animation to eliminate white flash on route sw…
HiramJiang Mar 3, 2026
97428c3
fix: make History and Assets persistent pages for instant switching
HiramJiang Mar 3, 2026
f18dc03
feat: update workflow guide for all 18 locales, remove advanced setti…
Leeon-Tang Mar 4, 2026
e5abfb6
feat(workflow): add space key toggle & touch gestures for canvas inte…
linqiquan Mar 4, 2026
0187d50
feat: redirect featured models to playground panel, fix tooltip stick…
Leeon-Tang Mar 4, 2026
7cacb86
chore: bump version to 2.0.13
linqiquan Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 1 addition & 3 deletions .cursor/worktrees.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
{
"setup-worktree": [
"npm install"
]
"setup-worktree": ["npm install"]
}
8 changes: 4 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ name: Build
on:
push:
tags:
- 'v*'
- "v*"
branches:
- 'main'
- "main"
pull_request:
branches: [main]
workflow_dispatch:
Expand All @@ -31,8 +31,8 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
node-version: "20"
cache: "npm"

- name: Install dependencies
run: npm ci
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/mobile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ name: Mobile Build
on:
push:
tags:
- 'v*' # Unified release: same tag as desktop
- "v*" # Unified release: same tag as desktop
branches:
- 'main'
- "main"
pull_request:
branches: [main]
workflow_dispatch: # Allow manual trigger anytime
workflow_dispatch: # Allow manual trigger anytime

jobs:
# Check for potential mobile sync issues — blocks mobile build if issues found
Expand Down Expand Up @@ -212,15 +212,15 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
node-version: "20"
cache: "npm"
cache-dependency-path: mobile/package-lock.json

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
distribution: "temurin"
java-version: "17"

- name: Setup Android SDK
uses: android-actions/setup-android@v3
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Nightly Build
on:
schedule:
# Run at 2:00 AM UTC every day
- cron: '0 2 * * *'
- cron: "0 2 * * *"

jobs:
check-changes:
Expand Down Expand Up @@ -52,8 +52,8 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
node-version: "20"
cache: "npm"

- name: Install dependencies
run: npm ci
Expand Down Expand Up @@ -197,4 +197,4 @@ jobs:
git reset --hard origin/main &&
npm install &&
npm run build:web
'
'
3 changes: 1 addition & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
{
}
{}
23 changes: 14 additions & 9 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ wavespeed-desktop/
- **`src/workflow/browser/run-in-browser.ts`**: Workflow execution (browser only): AI task via apiClient, free-tool nodes, I/O nodes
- **`src/workflow/ipc/ipc-client.ts`**: Typed IPC client for workflow, execution, models, cost, history, registry, settings
- **`src/workflow/types/node-defs.ts`**: NodeTypeDefinition, WaveSpeedModel, ParamDefinition
- **`src/workflow/types/ipc.ts`**: IPC channel types (workflow:*, execution:*, models:*, cost:*, history:*, etc.)
- **`src/workflow/types/ipc.ts`**: IPC channel types (workflow:_, execution:_, models:_, cost:_, history:\*, etc.)
- **`src/workflow/hooks/useFreeToolListener.ts`**: Listens for free-tool execution requests from main process (used by Layout)
- **`src/workflow/lib/free-tool-runner.ts`**: Runs free-tool nodes (e.g. background-remover) and returns outputs to main
- **`src/components/playground/DynamicForm.tsx`**: Generates forms from model schemas
Expand Down Expand Up @@ -149,18 +149,19 @@ Authentication: `Authorization: Bearer {API_KEY}`

### Endpoints

| Endpoint | Method | Description |
|----------|--------|-------------|
| `/api/v3/models` | GET | List available models with schemas |
| `/api/v3/{model}` | POST | Run a prediction |
| `/api/v3/predictions/{id}/result` | GET | Poll for prediction result |
| `/api/v3/predictions` | POST | Get prediction history (with date filters) |
| `/api/v3/media/upload/binary` | POST | Upload files (multipart/form-data) |
| `/api/v3/balance` | GET | Get account balance (returns `{ data: { balance: number } }`) |
| Endpoint | Method | Description |
| --------------------------------- | ------ | ------------------------------------------------------------- |
| `/api/v3/models` | GET | List available models with schemas |
| `/api/v3/{model}` | POST | Run a prediction |
| `/api/v3/predictions/{id}/result` | GET | Poll for prediction result |
| `/api/v3/predictions` | POST | Get prediction history (with date filters) |
| `/api/v3/media/upload/binary` | POST | Upload files (multipart/form-data) |
| `/api/v3/balance` | GET | Get account balance (returns `{ data: { balance: number } }`) |

### History API

The predictions history endpoint requires a POST request with JSON body:

```json
{
"page": 1,
Expand All @@ -185,19 +186,23 @@ npm run build:all # Build for all platforms
## Common Tasks

### Adding a new page

1. Create component in `src/pages/`
2. Add route in `src/App.tsx`
3. Add navigation item in `src/components/layout/Sidebar.tsx` under the appropriate section (Create, Manage, or Tools)

### Adding a new API method

1. Add method to `WaveSpeedClient` class in `src/api/client.ts`
2. Add types in `src/types/` if needed

### Modifying the build

1. Build config is in `package.json` under `"build"` key
2. GitHub Actions in `.github/workflows/`

### Adding a new UI component (shadcn/ui pattern)

1. Create component in `src/components/ui/` following the existing pattern
2. Use `@radix-ui/*` primitives (already installed: dialog, select, dropdown-menu, etc.)
3. Use `cn()` for className merging
Expand Down
62 changes: 32 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,20 +34,20 @@ The Android app shares the same React codebase as the desktop version, giving yo

12 free AI-powered creative tools that run entirely in your browser. No API key required, no usage limits, completely free. Also available as a standalone web app at [wavespeed.ai/studio](https://wavespeed.ai/studio) — fully responsive, works on desktop, tablet, and mobile browsers.

| Tool | Description |
|------|-------------|
| **Image Enhancer** | Upscale images 2x–4x using ESRGAN with slim, medium, and thick quality options |
| **Video Enhancer** | Frame-by-frame video upscaling with real-time progress and ETA |
| **Face Enhancer** | Detect faces with YOLO v8 and enhance with GFPGAN v1.4 (WebGPU accelerated) |
| **Face Swapper** | Swap faces using InsightFace (SCRFD + ArcFace + Inswapper) with optional GFPGAN post-processing |
| Tool | Description |
| ---------------------- | ------------------------------------------------------------------------------------------------- |
| **Image Enhancer** | Upscale images 2x–4x using ESRGAN with slim, medium, and thick quality options |
| **Video Enhancer** | Frame-by-frame video upscaling with real-time progress and ETA |
| **Face Enhancer** | Detect faces with YOLO v8 and enhance with GFPGAN v1.4 (WebGPU accelerated) |
| **Face Swapper** | Swap faces using InsightFace (SCRFD + ArcFace + Inswapper) with optional GFPGAN post-processing |
| **Background Remover** | Remove backgrounds instantly — outputs foreground, background, and mask with individual downloads |
| **Image Eraser** | Remove unwanted objects with LaMa inpainting, smart crop and blend (WebGPU accelerated) |
| **Segment Anything** | Interactive object segmentation with point prompts using SlimSAM |
| **Video Converter** | Convert between MP4, WebM, AVI, MOV, MKV with codec and quality options |
| **Audio Converter** | Convert between MP3, WAV, AAC, FLAC, OGG with bitrate control |
| **Image Converter** | Batch convert between JPG, PNG, WebP, GIF, BMP with quality settings |
| **Media Trimmer** | Trim video and audio by selecting start and end times |
| **Media Merger** | Merge multiple video or audio files into one |
| **Image Eraser** | Remove unwanted objects with LaMa inpainting, smart crop and blend (WebGPU accelerated) |
| **Segment Anything** | Interactive object segmentation with point prompts using SlimSAM |
| **Video Converter** | Convert between MP4, WebM, AVI, MOV, MKV with codec and quality options |
| **Audio Converter** | Convert between MP3, WAV, AAC, FLAC, OGG with bitrate control |
| **Image Converter** | Batch convert between JPG, PNG, WebP, GIF, BMP with quality settings |
| **Media Trimmer** | Trim video and audio by selecting start and end times |
| **Media Merger** | Merge multiple video or audio files into one |

![WaveSpeed Creative Studio](https://github.com/user-attachments/assets/67359fa7-8ff4-4001-a982-eb4802e5b841)

Expand Down Expand Up @@ -186,15 +186,15 @@ npm run dev

### Scripts

| Script | Description |
|--------|-------------|
| `npm run dev` | Start development server with hot reload |
| `npx vite` | Start web-only dev server (no Electron) |
| `npm run build` | Build the application |
| `npm run build:win` | Build for Windows |
| `npm run build:mac` | Build for macOS |
| `npm run build:linux` | Build for Linux |
| `npm run build:all` | Build for all platforms |
| Script | Description |
| --------------------- | ---------------------------------------- |
| `npm run dev` | Start development server with hot reload |
| `npx vite` | Start web-only dev server (no Electron) |
| `npm run build` | Build the application |
| `npm run build:win` | Build for Windows |
| `npm run build:mac` | Build for macOS |
| `npm run build:linux` | Build for Linux |
| `npm run build:all` | Build for all platforms |

### Mobile Development

Expand Down Expand Up @@ -263,6 +263,7 @@ wavespeed-desktop/
## Tech Stack

### Desktop

- **Framework**: Electron + electron-vite
- **Frontend**: React 18 + TypeScript
- **Styling**: Tailwind CSS + shadcn/ui
Expand All @@ -272,6 +273,7 @@ wavespeed-desktop/
- **Workflow Database**: sql.js (SQLite in-process)

### Mobile

- **Framework**: Capacitor 6
- **Frontend**: React 18 + TypeScript (shared with desktop)
- **Styling**: Tailwind CSS + shadcn/ui (shared)
Expand All @@ -290,14 +292,14 @@ Get your API key from [WaveSpeedAI](https://wavespeed.ai)

The application uses the WaveSpeedAI API v3:

| Endpoint | Method | Description |
|----------|--------|-------------|
| `/api/v3/models` | GET | List available models |
| `/api/v3/{model}` | POST | Run a prediction |
| `/api/v3/predictions/{id}/result` | GET | Get prediction result |
| `/api/v3/predictions` | POST | Get prediction history |
| `/api/v3/media/upload/binary` | POST | Upload files |
| `/api/v3/balance` | GET | Get account balance |
| Endpoint | Method | Description |
| --------------------------------- | ------ | ---------------------- |
| `/api/v3/models` | GET | List available models |
| `/api/v3/{model}` | POST | Run a prediction |
| `/api/v3/predictions/{id}/result` | GET | Get prediction result |
| `/api/v3/predictions` | POST | Get prediction history |
| `/api/v3/media/upload/binary` | POST | Upload files |
| `/api/v3/balance` | GET | Get account balance |

## Contributing

Expand Down
9 changes: 2 additions & 7 deletions data/templates/ai-generation/image-to-video.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,7 @@
"name": "图生视频",
"i18nKey": "imageToVideo",
"description": "将静态图片转换为动态视频,并进行高清放大处理",
"tags": [
"图片",
"视频",
"AI生成",
"视频放大"
],
"tags": ["图片", "视频", "AI生成", "视频放大"],
"category": "ai-generation",
"author": "WaveSpeed",
"thumbnail": "https://d1q70pf5vjeyhc.cloudfront.net/media/fb8f674bbb1a429d947016fd223cfae1/images/1759814613446857978_B0Cyvroj.jpeg",
Expand Down Expand Up @@ -93,4 +88,4 @@
}
]
}
}
}
7 changes: 1 addition & 6 deletions data/templates/audio-processing/music_generate.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,7 @@
"name": "音乐生成",
"i18nKey": "musicGenerate",
"description": "通过歌词和风格标签生成原创音乐,支持多种音乐风格",
"tags": [
"音乐",
"生成",
"AI",
"歌词"
],
"tags": ["音乐", "生成", "AI", "歌词"],
"category": "audio-conversion",
"author": "WaveSpeed",
"thumbnail": "https://d1q70pf5vjeyhc.wavespeed.ai/media/images/1752486874849919611_uMhlqGOZ.png",
Expand Down
13 changes: 2 additions & 11 deletions data/templates/image-processing/image-edit.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,7 @@
"name": "图像编辑",
"i18nKey": "imageEdit",
"description": "使用AI模型编辑图像,支持自定义提示词进行精确修改",
"tags": [
"图像",
"编辑",
"AI",
"提示词"
],
"tags": ["图像", "编辑", "AI", "提示词"],
"category": "image-processing",
"author": "WaveSpeed",
"thumbnail": "https://d1q70pf5vjeyhc.cloudfront.net/media/a171ce9f725a41f49d5694458dba5f2a/images/1771092349188456413_57k0enwG.jpg",
Expand Down Expand Up @@ -81,11 +76,7 @@
"type": "enum",
"description": "The format of the output image.",
"default": "jpeg",
"enum": [
"jpeg",
"png",
"webp"
],
"enum": ["jpeg", "png", "webp"],
"fieldType": "select"
}
]
Expand Down
11 changes: 2 additions & 9 deletions data/templates/video-processing/video-edit.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,7 @@
"name": "视频编辑",
"i18nKey": "videoEdit",
"description": "使用AI模型编辑视频内容,支持通过提示词修改视频中的元素",
"tags": [
"视频",
"编辑",
"AI"
],
"tags": ["视频", "编辑", "AI"],
"category": "video-editing",
"author": "WaveSpeed",
"thumbnail": "https://d1q70pf5vjeyhc.wavespeed.ai/media/images/1763608542503495122_E5Jc0qQc.png",
Expand Down Expand Up @@ -49,10 +45,7 @@
"type": "enum",
"description": "The resolution of the output video.",
"default": "480p",
"enum": [
"480p",
"720p"
],
"enum": ["480p", "720p"],
"fieldType": "select"
},
{
Expand Down
Loading