open-higgsfield
The free, open-source alternative to Higgsfield AI. Generate images and videos with 32 models from one prompt bar — no closed ecosystem, no studio subscription.
🌐 Try it Online — No Install Required
Hosted version: openhiggsfield.ai
Image and Video in one studio, in the browser — no Node.js, no setup. Add your
platform key (id:secret) to start generating. The studio itself is free.
Why OpenHiggsfield AI instead of Higgsfield AI?
- Free & open-source — no studio subscription, no vendor lock-in
- Self-hosted — clone it, run it, change it
- Your key — generate with your own platform key
- 32 models — 8 image, 24 video, one catalog, one composer
Next.js 16 App Router on Vercel · React 19 · plain CSS · Zustand · pnpm
Features
Generate
- One composer for Image and Video. A single prompt bar drives both; the
model you pick decides image or video.
⌘/Ctrl + Entersubmits. - 32 models in the catalog — 8 image, 24 video: Soul 2, Soul Cinema, Kling 3 (Turbo / Std / Pro / 4K / Motion), Wan, Flux, Ideogram, Recraft, LTX, MiniMax, PixVerse, Grok, Qwen and more. Searchable picker.
- Per-model settings. Aspect ratio, resolution, duration, output format, audio, batch size, prompt enhancement — each model declares its own allow-list and the studio renders exactly that. No parallel hardcoded list.
- Media inputs by role. Start frame, end frame, references, video and audio, each with the per-role cap the model declares. Files upload to Vercel Blob and become public URLs the generate request can carry.
- Asset picker. Attach from your uploads library or from any finished run in history — two tabs over one library, filtered to the role's kind.
- Batch. Up to 4 results per press. Models with a native count setting use it; the rest are submitted once per result, each clearing its own tile.
- Live run lifecycle. Skeletons open in the grid on submit, the request is polled every 4s until a terminal status (10-minute deadline), and each finished result blooms into place on its own clock.
Gallery
- Four scopes — Image, Video, Assets (every finished run) and Favorites — as an arrow-key-navigable tab rail.
- Masonry grid of real runs at their true aspect ratio, newest first, with a gradient placeholder while media loads.
- Per-tile actions: reuse, favorite, delete, select.
- Reuse restores model, settings and prompt, so the same run can be re-rendered, not just re-typed.
- Viewer. Full-size media with prompt (copy in one click), model, resolved settings, timestamp, download, favorite and Recreate.
- Selection mode. Click a tile's checkbox to enter; shift-click extends a
range. Bulk download (sequential, with progress and a report of any files the
CDN refused), bulk favorite/unfavorite, bulk delete.
Escexits. - Undo. Deletion is reversible for 6 seconds via a bar with a draining hairline, in the strip the composer already reserves.
- Empty states that hand you a starter prompt instead of a blank grid.
State and errors
- History persists in IndexedDB in this browser (60 records). Favorites are a deliberate keep and never age out of the cap. Result URLs belong to the generation platform, so old history can outlive its CDN lifetime and show gaps.
- Failed, NSFW and canceled runs are recorded as failed tiles carrying the reason and a retry that restores the prompt and model.
- Your own platform key. Entered in a modal, stored by a server action in an httpOnly cookie. A missing key opens the modal — it never fails silently. The topbar lamp states whether a key is held and whether a run is in flight.
Architecture
Each generate is one object: { model, prompt, media, settings }.
- The UI builds that object and hands it to a server action. The action
resolves it against the catalog and maps it to the generation API's own
fields (
image_urls,aspect_ratio, …). - Server actions are the only caller. The browser never talks to the
generation API. Submit is
POST /{model}; status isGET /requests/{id}/status. Auth isAuthorization: Key <api_key>. - The catalog is the source of truth (
src/generation/catalog/). A new entry appears in the picker, brings its own settings rail and media roles, and needs no studio changes. - Five small Zustand stores — shared image/video prompt, shared image/video
media,
settings[modelId], and a tinyactivestore. No store per model. - Uploads go client-direct to Vercel Blob through
/api/blob, which issues scoped tokens.blob:URLs are preview-only.
Getting started
pnpm install
pnpm dev # http://localhost:3000
Open the studio, press Add key, and paste your platform key as id:secret.
Environment
HF_API_BASE_URL= # generation API origin, server only
OPEN_HIGGSFIELD_READ_WRITE_TOKEN= # Vercel Blob read-write token
Commands
| Command | What it does |
|---|---|
pnpm dev |
Dev server on port 3000 |
pnpm build |
Production build |
pnpm start |
Serve the production build |
pnpm brand |
Rebuild the icons and OG card in public/ |
Layout
src/
app/ / is the full-viewport studio and the only page
/api/blob issues upload tokens
base.css owns the document canvas
generation/ generate requests, server actions, API mapping, catalog, stores
openhiggsfield/
the studio surface: composer, gallery, viewer, model picker,
settings, asset picker, selection bar — and openhiggsfield.css
Design principles
Dark studio ground, a single lime accent #d1fe17, Inter throughout. The chrome
stays neutral so the generated work is the only color on the surface.
- The tool disappears into the task — expression never obscures state or affordance.
- Accent is state, not decoration — selection, primary action, liveness only.
- Data is data — settings, counts and durations read in tabular numerals. One typeface throughout; no monospace anywhere.
- Motion conveys state — the generation lifecycle, the arrival of a run. Nothing loops decoratively.
- Every control ships all its states — hover, focus, active, disabled, loading, error, empty.
- The catalog is the source of truth — the studio renders what the model declares, never a parallel hardcoded list.
Built for people who work in long sessions, iterating on prompts, inputs and settings.
