Profile
Back to NewsBack
GitHub Trending 12 min
Reader Mode
drowzeys/Imagination-Studio-by-keys-Wasserman: Imagination Studio by keys+Wasserman powered by TensorFold: an AI film studio for Mac and NVIDIA DGX Spark. Plan a film like a crew (Slate workflow by Sam Wasserman), render Qwen-Image-2.1 / FLUX3-K pict

drowzeys/Imagination-Studio-by-keys-Wasserman: Imagination Studio by keys+Wasserman powered by TensorFold: an AI film studio for Mac and NVIDIA DGX Spark. Plan a film like a crew (Slate workflow by Sam Wasserman), render Qwen-Image-2.1 / FLUX3-K pict

4 hours ago

Imagination Studio by keys+Wasserman, powered by TensorFold (Mac + DGX Spark)

Formerly keys+Wasserman Slate AI Studio, built with integrated Fish Audio Drama 3.

Keys: X @u1tra_instinct · GitHub

Sam Wasserman / Wasserman Productions: wassermanproductions.com · X @SamJWasserman · GitHub

**An AI film studio on your own machine: plan a film the way a crew does in the Wasserman Slate AI Studio, and render it here. Pictures from Qwen-Image-2.1-Turbo, FLUX3-K (Black Forest Labs' FLUX 3 Image Klein) or MOSS-Image, MiniMax H3 / FastH3 video with sound and Fish Audio Drama 3 voices, on TensorFold: Apple-silicon Macs (Metal) and the NVIDIA DGX Spark (CUDA).**

!Imagination Studio by keys+Wasserman, powered by TensorFold: a local creative all-in-one studio for NVIDIA DGX Spark or Apple silicon

Minimum hardware requirements (read this first)

One machine is a complete Studio: a DGX Spark, an RTX Pro 6000 workstation or a Mac. You do not need more than one, and none needs another. The installers check memory and disk before they download anything and stop with the reason when the machine is too small.

NVIDIA DGX Spark (GB10, 128 GB unified memory, DGX OS with CUDA 13 and Docker): every feature runs.

| Install | Disk free | Command | |---|---|---| | Core: pictures and FastH3 video with sound | 125 GB | bash oneshot-setup.sh | | Everything | about 400 GB | bash oneshot-setup.sh --all |

NVIDIA RTX Pro 6000 Blackwell (96 GB card, x86_64 Linux workstation: Ubuntu 22.04 or 24.04, NVIDIA driver 580 or newer, the CUDA 13 toolkit, 64 GB of RAM or more, 128 GB recommended): every feature, with the same one-shot recipe, pending validation on the card. The installer builds the engines for it (sm_120) and the Studio reads the card's own memory; the Bolt brain runs through llama.cpp there. It was simulated as a 96 GB card on a DGX Spark (the whole checklist and the heaviest jobs back to back passed, the card never over 72 GB), not yet run on one: docs/rtx-pro-6000.md.

| Install | Disk free | Command | |---|---|---| | Core: pictures and FastH3 video with sound | 125 GB | bash oneshot-setup.sh | | Everything | about 400 GB | bash oneshot-setup.sh --all |

Other NVIDIA GPUs are untested: the CUDA engines are built and measured for the GB10.

Apple-silicon Mac (macOS 26 or later, for Metal 4). What runs depends on the memory. Every figure was measured on a Mac Studio M5 Ultra with 256 GB; smaller Macs and M1 to M4 follow from those measurements and are untested.

| Memory | M5 family | M1 to M4 | Disk free for --all | |---|---|---|---| | 48 GB | Pictures only | Pictures only | 40 GB | | 64 GB | Pictures, FastH3 video, voice, music, sound, MOSS-Image, FLUX3-K, the Bolt brain | The same, video on the slower MLX engine, no Bolt | about 400 GB (440 on M1 to M4) | | 128 GB | Everything above, plus MiniMax H3 Turbo and reference pictures to video (Ref2VA) | The same, slowly | about 530 GB | | 192 GB or more | Everything, including Upscale and Remove a person (peaks of 125 and 135 GB) | The same, slowly | about 535 GB |

bash oneshot-setup.sh --all --app installs everything your Mac's memory runs and the double-clickable app. It says which features it left out and why. Before that, brew install [email protected] uv ffmpeg.

Accounts: FLUX3-K and Stable Audio Open (sound effects) are gated on Hugging Face. Accept their licences with your account and run hf auth login before installing them; the installer says so when access is missing.

Full recipes, every option and the measured memory of each job: Install, and the one-click app (Mac), DGX Spark (CUDA) build.

Named at the request of the TensorFold project: this is an app built on TensorFold, not a TensorFold product.

Name, credits, colours and voice for anything public: the brand guide.

*Credit first: Keys (drowzeys) built this studio and its engines; Sam Wasserman and Wasserman Productions helped design and build the studio in collaboration with Keys, made Wasserman's Filmmaker Suite, and shaped the production side (Slate, the Sharp Spec, Motion Previs). See Big credit: Sam Wasserman and Wasserman Productions, below the release notes, and CREDITS.md.*

3.1.0 · Apple-silicon Macs (measured on a Mac Studio M5 Ultra 256 GB), the NVIDIA DGX Spark, and the NVIDIA RTX Pro 6000 (96 GB; pending validation) · TensorFold 0.6.5 + two families, and TensorFold 1.0's native Zig runtime for FastH3 on Metal and on CUDA: Qwen 2.1 Turbo, Qwen 2.1 Full, FLUX3-K Fast and FLUX3-K Full (text to image, and Edit a picture) · MOSS-Image (text to image, DGX Spark) · MiniMax H3 (video with sound) · Fish Audio Drama 3 (Voice) · MiniMax-Music3 (Music: songs with sung vocals) · int8 kernels on the M5 tensor units and on the GB10's tensor cores · a 2x video decoder for 2K finals on the Mac

New since 3.1.0 (on main; every install follows it by itself)

  • Your phone and other devices, with an access key. On the computer running the studio nothing is asked. A phone,
a tablet or another computer signs in once: Settings → Access key shows a QR code that signs a phone in with one scan, the key itself to copy, and Make a new key for a lost phone. Step by step: TUTORIAL.md section 15, and Learn → Your phone and other devices in the app. Details: The access key.
  • Automatic updates are on by default, so an install stays on the latest version: checked every six hours,
installed when the queue is idle (Settings → Updates turns it off). Worker Sparks follow their head.
  • NVIDIA RTX Pro 6000 Blackwell (96 GB) may use the same one-shot recipe, pending validation on the card: engines
built for sm_120, the card's own memory read for every job, Bolt through llama.cpp (docs/rtx-pro-6000.md).
  • Every credit, in the app and in the repo. Settings → About → Every credit shows CREDITS.md and the third-party
notices; about 25 more libraries, conversions and tools are credited, and a test keeps the two in step.
  • No personal information in the repo, enforced by a test and by CI; contact goes through GitHub only (Issues,
Discussions, private vulnerability reporting: SECURITY.md).
  • The repository is now drowzeys/Imagination-Studio-by-keys-Wasserman, matching the name. The old address
redirects, so installs that follow it keep updating.

New in 3.1.0 (2026-10-20)

  • One-shot installs with everything, on both machines. bash oneshot-setup.sh --all installs every feature the
machine runs, from prebuilt engines: the GHCR carrier keys-tensorfold-studio:3.1.0 (the DGX Spark's H3, Music 3, Drama 3 and Bolt engines) and the v3.1.0 release (the Mac's native engine and Bolt on Metal), each checksummed. The minimum hardware now opens this README. Proven on a fresh DGX Spark and a fresh Mac.
  • NVIDIA Nemotron 3.5 Bolt is the studio's own brain, loaded and unloaded by the Studio around renders (TensorFold's
CUDA engine on a DGX Spark, Metal on a Mac), for the First AD, the agents and the local harness.
  • A Mac can lead worker DGX Sparks, and a DGX Spark head leaves clips to its idle workers.
  • Voice on a DGX Spark in one shot (Drama 3's CUDA engine from the carrier), and sound effects and foley measured
and guarded there.
  • A LoRA on the Mac's native FastH3 engine, merged into the int8 weights at load; sound effects on Metal twice as
fast.
  • The Mac's memory read correctly (free, file-backed and purgeable pages), so a large job no longer pushes the Mac
into a memory panic, and every ComfyUI job's peak is checked first.
  • Upscale, Find and Remove a person and MOSS-Image on a Mac (below), updates that refresh the renderers' copies, and
Sam Wasserman's CI, host-independent tests and fixes.

Upscale, Find and Remove a person on a Mac

  • Upscale, Find a person and Remove a person now run on a Mac (Mac Studio M5 Ultra), with the DGX Spark's own graphs
and the authors' node packs at the Spark's pins, on a ComfyUI of the Mac's own on PyTorch's Metal device (oneshot-setup.sh --upscale and --remove; scripts/setup-comfy.sh). MiniMax H3 is read from the Mac's own Ref2VA files (--ref2va), not downloaded again: 2.4 GB of models and a 1.6 GB environment. Measured against the DGX Spark on the same clip and seeds: see On a Mac.
  • MOSS-Image on a Mac (oneshot-setup.sh --moss, 28 GB) on the same ComfyUI: 59 s a 1344x768 picture with the
model loaded (44 s on a DGX Spark), the lettering as exact as on a Spark.

!MOSS-Image: DGX Spark left, Mac right, same prompt and seed

!MOSS-Image: DGX Spark left, Mac right, same prompt and seed

New in 3.0.1

  • MOSS-Image, a fifth picture model, on a DGX Spark: OpenMOSS's 5B model (Apache 2.0, commercial use allowed),
through ComfyUI's own support. It is the best of the picture models at lettering: posters, title cards, signs and menus came out exactly as written, in English and Japanese. About 45 s for 1344x768. Install it with oneshot-setup-spark.sh --moss (30 GB); see MOSS-Image on a DGX Spark.
  • ComfyUI moves to v0.42.0 (b9b290e4) on a DGX Spark, for MOSS-Image: oneshot-setup-spark.sh --upgrade moves
an existing install. FLUX3-K, Qwen and FastH3 clips render as before on it.
  • Credits: OpenMOSS in the README, CREDITS.md, NOTICE and the app's About.
  • Nothing changes on a Mac: MOSS-Image has no Mac build yet.

New in 3.0 (since 2.9.3)

A new studio around the same engines

  • Imagination Studio: a new look (the poster's serif, blue, green and amber; Geist and Instrument Serif), Sam's
art on every engine, card and look, and a sidebar of Creative Engines and Studio Vaults with Home on top.
  • Six engines, one page each: Story, Image, Video, Previs, Sound and Edit, each opening on its own cards.
  • Home: one composer makes a clip, a picture, a voice line or a song straight away; start cards, recent takes,
the machine in one line.
  • Settings: the look, which rooms show, what a new take starts from, every connection, and Models & weights,
Sparks, Brains & tools and Updates in one place.
  • Made for phones too: the whole studio works from a phone's browser. The six engines sit along a bottom bar,
a More sheet holds the Agent, the vaults, Settings, search and updates, the queue folds into one line above it, and Add to Home Screen opens it full screen like an app. See Using it on your phone.

Agents and your own sign-ins

  • The Agent room: pick Claude Code, Codex, Hermes, Gemini, Grok or a local model and talk it through; it keeps
its own session, asks when a choice matters and drives the studio's tools (stills, clips, voice, songs, the timeline), Blender and Blockout.
  • One-click Connect for every agent, from any page that needs one: finds it or installs it, runs its own
sign-in (the page opens by itself, with the code, a QR code and Copy link), checks it answers, makes it the default.
  • Link another computer: a DGX Spark uses the agents signed in on your Mac over SSH, and the studio sets up both
directions itself. Claude Code's Mac Keychain over SSH is solved with Allow over SSH (BRAINS.md).
  • The ChatGPT app's own Codex is used when the one on PATH is older, here or over SSH.
Models, looks and installs
  • Models & weights finds every model the studio needs anywhere on the machine and links it instead of
downloading it again (Use everything found here), and Install runs the right installer for what is missing.
  • Gated weights (Keyframe Animation, 3D Animation Style, Stable Audio Open): Install signs you in to Hugging Face
once, opens the licence page, and downloads by itself once access is granted.
  • Looks: the LoRA hub as a style library, one card a look.
Sound, previs and the library
  • Sound effects and foley: MMAudio makes a clip's own sound from its picture, Stable Audio Open makes a sound from
words (Mac; on a DGX Spark through ComfyUI once its memory is measured).
  • Motion Previs from a link: paste a video page or a video file's address and its depth, pose and camera are read.
  • The Library lists voice lines, songs and sound effects beside clips and stills, each with its own filter.
  • Nodes: a ComfyUI-style canvas over the studio's own jobs, run in order.
  • Wasserman's Filmmaker Suite built in: bring work in from Sam's apps, send the cut to Resolve as a ZIP with media.
Machine, updates and safety
  • Machine: live GPU, memory, temperature, power and storage; Sparks; an optional workload governor for a shared Spark.
  • Updates in the app: follows the installed branch, waits for idle, shows the latest release.
  • Everything is kept in ~/ImaginationStudio (an older ~/TensorFoldStudio is moved there once, with a link left behind).
  • Tighter safety: this computer or its Tailscale name only, same-origin writes, size limits, no hidden files served.

Screenshots

| | | |---|---| | !Home: the composer, start cards and the machine | !Story: the film board, Wasserman Slate, First AD | | Home | Story | | !Image: stills, scouts, edits and looks | !Video: clips with sound, long takes, references, Sharp Spec | | Image | Video | | !Previs: Motion Previs and your agent | !Sound: voice lines and songs | | Previs | Sound | | !Edit: timeline, Resolve, dailies, Library | !Nodes: a canvas over the studio's jobs | | Edit | Nodes | | !Looks: the LoRA hub as a style library | !Looks: one card a look, with its licence and size | | Looks | Looks, the cards | | !Wasserman's Filmmaker Suite, built in | !Machine: live readings and storage on a DGX Spark | | Wasserman's Filmmaker Suite | Machine |

Using it on your phone

The models run on your Mac or DGX Spark; the phone is only the screen and the remote. Everything works from it: write a prompt, roll a clip, watch the queue, play takes from the Library, plan in Story, talk to your agent.

  1. Put the computer and the phone on the same Tailscale network (free for personal use):
install Tailscale on both and sign in with the same account.
  1. Share the studio on that network, once, on the computer running it:
tailscale serve --bg 7870

Tailscale prints the address, https://..ts.net. Only devices on your own tailnet can open it, over HTTPS, and the studio accepts its Tailscale name by itself. (On a trusted home network, HOST=0.0.0.0 bash scripts/app.sh and http://:7870 work too; the access key below still guards it, but keep that to a network you trust.)

  1. Sign the phone in, once: on the computer, open Settings → Access key and scan its QR code with the phone's
camera. It opens the studio on the phone, signed in. The phone keeps it. Then Share → Add to Home Screen (iPhone) or ⋮ → Add to Home screen (Android): the studio opens full screen from its own icon.

The access key. On the computer running the studio nothing is asked: open http://localhost:7870 (or the computer's own network address or .local name, when it is opened to the network) and use it, updates included. Reaching it from another device (a phone over Tailscale, another computer on the network) takes the studio's access key, once per device: on the computer, Settings → Access key shows a QR code that signs a phone in with one scan, and the key itself to copy. The key is made once, kept in access-key in the studio folder (readable by you only) and survives restarts and updates; Make a new key there signs every other device out. bash scripts/studio-key.sh prints the same from a terminal. A clip read from another machine's app (Slate's Import a take) needs that app's key beside its address.

On the phone:

  • Bottom bar: Story, Image, Video, Previs, Sound and Edit, one tap each. More opens the Agent, the Library,
Looks, Wasserman's Filmmaker Suite, Nodes, Machine, Learn, Settings, search and updates.
  • Home keeps the composer on top: pick Clip with sound, Picture, Voice or Song, describe it, Generate.
  • The queue is the line above the bar; tap the arrow to see what is rolling and what is next. Renders keep going
on the computer when the phone sleeps or leaves.
  • Connect an agent from the phone: Connect shows the sign-in code in large type with Copy code and *Copy
link*, and a QR code; sign in on the phone itself, or scan the QR with another device.

| !Home on a phone: the composer, the queue line and the bottom bar | !The More sheet: the Agent, the vaults, Settings, search and updates | !The Video engine on a phone | | :---: | :---: | :---: | | Home | More | An engine: Video |

Contact

Through GitHub only; the project publishes no email address. Bugs and install trouble: Issues. Questions, ideas and what you made: Discussions. A security problem: the Security tab's Report a vulnerability, which only the maintainers see (SECURITY.md). Never paste a token, key or your own address into any of them.

License & credits

Everyone whose work the studio uses is named in CREDITS.md (with THIRD_PARTY_NOTICES.md), and the app shows the same files under Settings → About → Every credit.

Apache License 2.0 — see LICENSE. Free to use, modify, fork and build on, commercially or otherwise; the models it downloads keep their own licences (below).

Attribution required: per the NOTICE file (Apache 2.0 §4(d)), any use, fork or redistribution must retain the NOTICE file and credit Keys (github.com/drowzeys) and **Sam Wasserman / Wasserman Productions (wassermanproductions.com)** in its documentation and about/credits surface. To cite it: CITATION.cff.

The same credits the studio shows in Settings → About; CREDITS.md has each one in full.

  • Keys (drowzeys) — the studio itself, its TensorFold families and int8 kernels, and its Mac and DGX Spark engines.
  • Sam Wasserman and Wasserman Productions — helped design and build the studio in collaboration with Keys;
Wasserman's Filmmaker Suite (ScriptBreak, Cork Board, Master Canvas, Storyboard Reference Studio, Blockout, Motion Previs Studio, Slate, Circle Take, Stem Studio, Call Sheet, DaVinci MCP), the Sharp Spec, the 80s Horror LoRA and the studio's art.
  • Qwen team — Qwen-Image-2.1. Black Forest Labs — FLUX 3 Image Klein (FLUX3-K). OpenMOSS — MOSS-Image.
MiniMax — MiniMax H3 and MiniMax-Music3. Built with Fish Audio — Fish Audio Drama 3.
  • Stability AI — Stable Audio Open · Ho Kei Cheng et al. — MMAudio · kijai — ComfyUI-MMAudio (sound effects
and foley).
  • Ash Hart — TensorFold.
  • antirez — h3.c · RobZombAI — H3MLX · mrbizarro — minimax-h3-mlx (Phosphene) · **Filip Strand and the mflux
contributors · felix-ab** — flux3-mlx.
  • Comfy Org — ComfyUI · Apple — MLX · NVIDIA Research · FastVideo · LightX2V · Viggle ·
speach1sdef178 · rookiestar28 · ddalcu.
  • The agents you connect — Claude Code (Anthropic), Codex (OpenAI), Gemini CLI (Google), Grok CLI (xAI), Hermes
Agent (Nous Research); Ollama, LM Studio, vLLM, llama.cpp; Blender and blender-mcp.
  • OpenAI Whisper and faster-whisper, yt-dlp, FFmpeg, PyTorch, Hugging Face diffusers and
transformers, FastAPI, Geist and Instrument Serif.
  • The community LoRA authors, by name in Looks and in CREDITS.md.
Licences. The studio's code is Apache-2.0. The models keep their own terms; do not redistribute their weights. Qwen-Image-2.1: Qwen Research License (non-commercial) · MiniMax H3: MiniMax H3 Community License (territory limits) · MiniMax-Music3: its licence asks for its name in a commercial UI · FLUX3-K: FLUX Kommunity License · MOSS-Image: Apache 2.0 (commercial use allowed) · Fish Audio Drama 3: Fish Audio Community License v1.0 (a hosted voice service needs Fish's own licence) · Stable Audio Open 1.0: Stability AI Community License (free under US$1 million of yearly revenue) · MMAudio's weights: CC-BY-NC 4.0, non-commercial · Wasserman's Filmmaker Suite: each app under its own licence, Apache-2.0 (Master Canvas: MIT).

Links. Keys: X @u1tra_instinct · GitHub. Sam Wasserman / Wasserman Productions: wassermanproductions.com · X @SamJWasserman · GitHub.

Powered by TensorFold (Ash Hart and the TensorFold contributors) · built with integrated Fish Audio Drama 3 · Built with Qwen · Built with Fish Audio · MiniMax-Music3.

New in 2.9.3

  • FLUX3-K installs again on a DGX Spark. On 2026-10-17 Black Forest Labs renamed the Klein checkpoints on Hugging
Face (flux3-image-klein-bf16.safetensors, flux3-image-klein-base-bf16.safetensors) and removed the old underscore names, so oneshot-setup-spark.sh --flux3 could not download them. The setup now fetches the new names and renames an older install's files in place instead of fetching 22 GB again: they are the same files (the same SHA-256 on Hugging Face). The app reads either name, so a Spark updated from the Sparks tab keeps FLUX3-K before the setup runs. Nothing changes on a Mac.

New in 2.9.2

  • Mac: Music runs on TensorFold's native Metal engine. On an M5 or later the Music tab now runs MiniMax Music 3
on music3-generate built for Metal (Zig and Metal, no Python or MLX; TensorFold pull request #987, commit 8c9559da), when oneshot-setup.sh --music has built it (scripts/build-music3-metal.sh). On the Mac Studio M5 Ultra, against the MLX port int8, 60 s hip-hop, seed 7, three runs each: the autoregressive model 69 frames/s against 65, the whole song 59.5 to 63.0 s against 62.3 to 63.9 s, peak 17.8 GB against 28.1 GB. Through the app a song the model ended at 33.4 s took 35.2 s, load included, at 16.1 GB. Limits: it does not stream yet, so *Play while it's made* is MLX-only (MUSIC3_BACKEND=mlx); an M1 to M4 keeps the MLX port; measured on an M5 Ultra only. See Music.

Imagination Studio 3.0: the studio

The web app is Imagination Studio by keys+Wasserman, powered by TensorFold and built with Fish Audio Drama 3. Everything it did before is still here, arranged to be quicker to find and calmer to use.

  • Creative Engines. Story (the film board, Wasserman Slate, the First AD), Image (stills, scouts, edit a picture),
Video (clips with sound, long takes, references), Previs (Motion Previs, Ask your agent), Sound (Voice, Music) and Edit (the Timeline and its exports). Each opens on a page of picture cards; a card opens the view that does it, already set up. In Create a small switch at the top says where the prompt goes: video with sound, an image, or an edit of a picture.
  • Studio Vaults. Library (every take), Looks (the LoRA hub as a library of styles, one card each), Suite (bring work
in from the filmmaker suite, send the cut to Resolve and dailies to Circle Take), Machine (telemetry, Sparks, brains and tools, updates) and Learn.
  • Home, under the wordmark, starts the common jobs in one click and shows recent takes and the machine.
  • Updates. Machine → Updates shows the installed version and commit, the branch it follows, the newest GitHub
release (for information) and one Update and restart button. Installing is always a fast-forward of the followed branch, and waits until jobs and the render engine are idle.
  • Render bay and ⌘K. The queue is docked along the bottom of every room. ⌘K (or /) searches and runs anything;
⌥1 to ⌥9 and ⌥0 jump between rooms. Below 1100 px the sidebar is an icon rail; on a phone the rooms sit along the bottom.
  • Pictures. The cards' key art fills from app/static/art: each slot is listed in art/ART-MANIFEST.json and
shows a plain panel until its picture is there. Model and tool marks in app/static/brand identify what the Studio runs and belong to their owners (brand/THIRD-PARTY-MARKS.md).

The typefaces (Geist, Geist Mono, Instrument Serif) ship in app/static/fonts under the SIL Open Font License.

New in 2.9.1

Three changes to Music (MiniMax-Music3), one for each machine and one for the Mac's player. Every figure is one run unless it says otherwise.

  • Mac: int8 weights by default. The Studio starts the MLX engine (music3-mlx, now pinned at 6844b413) with
--quant int8: the autoregressive model, its code-0 head and the depth decoder at 8 bits. On the Mac Studio M5 Ultra the autoregressive model went from 40 to 65 frames a second and the peak from 27.6 to 20.5 GB; a 60 s song took about 63 s through the app (75.8 s in 2.9.0). Against ComfyUI's reference the code-0 logits keep cosine 0.99994 (bf16 0.99997), 98.0 % greedy agreement, and Whisper's lyric scores over six same-seed songs stayed within their noise. MUSIC3_QUANT=none runs the bf16 weights. Limits: measured on an M5 Ultra only; other M-series chips are not measured.
  • Mac: play while it's made. With the box ticked (the default where the engine streams) the song plays in the tab
while it is made, from GET /api/music/takes/{id}/live, one stereo 44.1 kHz WAV. The sound is held back until playing will not run dry (the engine's measured no-stall start plus 3 s). Through the app, 60 s songs: first sound at about 7 s (7.6 and 6.4 s), playing from about 13 s (13.4 s both), no stall (the least buffer 4.0 s), made in 63.4 and 61.0 s; a 30 s song played from 8.1 s. The kept take is the engine's finished WAV, the same samples that were played. Limits: a Mac only (no route on a Spark streams); only 30 s and 60 s were measured through the app, and the wait grows with the length (about 56 s for a 300 s song, from the engine's own figure); nobody has listened for seams. Details in Music.
  • Music on a DGX Spark: TensorFold's CUDA engine for MiniMax Music 3 (MiniMax-Music3). The Music tab on a Spark now
runs music3-generate, TensorFold's native CUDA port (branch music3-cuda, 6b714531: Zig + CUDA, no Python at run time), wherever it is built and the weights are there; otherwise it falls back to ComfyUI's nodes as in 2.9.0. MUSIC3_BACKEND=cuda|comfy chooses; the tab's state says which route runs and, after a fall-back, why. - int8 weights by default, made on the GPU as the engine loads (no cache file): the autoregressive model, its head and the depth decoder at 8 bits. MUSIC3_WEIGHTS=bf16 runs the checkpoint's own weights. It reads Comfy-Org's three files as they are (~/spark-studio-models/MiniMax-Music3-Comfy, MUSIC3_MODEL names another). - Same lifecycle as the Mac engine: a persistent server, loaded on the first song, holding ~/studio-gpu.lock.d while loaded, unloaded after five idle minutes and before any other job, under the memory kill-guard; a studio ComfyUI that holds models is stopped before it loads. Never beside H3, Drama 3 or ComfyUI's models. - Installed by bash oneshot-setup-spark.sh --music (and --upgrade where the weights are): spark/build-music3.sh takes the prebuilt binary from the carrier image, or builds it with nvcc 12.9+ and Zig 0.17 (50 s on a GB10). - Measured on one GB10 (int8, hip-hop lyrics, seed 7, 30 steps; one run each; memory is MemTotal - MemAvailable above the idle machine):

| Song | TensorFold CUDA (int8) | ComfyUI's nodes (2.9.0) | |---|---|---| | 30 s, engine | 60.3 s | 131.0 s | | 60 s, engine | 123.9 s (AR 73.9 s at 20.4 frames/s, DiT 46.4 s, DAV 3.6 s) | 260.6 s | | 120 s, engine | 252.0 s | 527.6 s | | 60 s through the app | 149.2 s for the song (load 37.3 s, AR 68.2 s, DiT 40.4 s, DAV 3.3 s; the model ended it at 55.2 s), 171.4 s with Whisper's check (97 %, 164 of 169 words) | 270.6 s for the song (ComfyUI started for it; AR 166.5 s, DiT 94.3 s, DAV 4.0 s; 59.99 s made), 297.0 s with Whisper (96 %, 162 of 169), 29.4 GB at the peak: the same run of the 2.9.1 app with MUSIC3_BACKEND=comfy | | Peak memory, 60 s | 17.9 GB (18.7 GB through the app) | 29.3 GB |

bf16 weights: a 60 s song in 194.3 s and 25.5 GB. Parity against ComfyUI's nodes and Whisper's lyric count passed on the engine branch (docs/recipes/minimax-music3-cuda.md there). - Honest limits. No streaming on the Spark: a song is heard when it is done. Built and measured on a GB10 only (the build refuses another GPU unless MUSIC3_ANY_GPU=1; elsewhere use MUSIC3_BACKEND=comfy). Loading takes about 37 s each time the engine starts (int8 is made at load), so the first song after five idle minutes pays it again. Songs over 120 s are not measured on this engine; the memory estimate goes on at the measured slope.

  • Carrier image ghcr.io/drowzeys/keys-tensorfold-studio:2.9.1 adds the prebuilt Spark music3-generate
(spark-music3/) beside the H3 engine.

New in 2.9.0

  • Music: MiniMax Music 3 (MiniMax-Music3). A new Music tab beside Voice makes a whole song with sung vocals
from your lyrics and a style, on this machine: up to five minutes, 44.1 kHz stereo. See Music (MiniMax Music 3). - Lyrics take section tags ([Intro], [Verse], [Pre-Chorus], [Chorus], [Bridge], [Instrumental], [Outro] ...) on lines of their own; the tab has a button for each and says when a tag looks wrong. - Style is a caption: genre, tempo, key, mood, vocals, instruments. A helper writes one from those six boxes. - Use as soundtrack: a song can be laid under a long video, the Editor's export or any clip of the Library. It sits under the clip's own sound, is lowered up to 12 dB while someone speaks, and no peak passes -1 dBFS. - Mac: TensorFold's MLX port (music3-mlx, pinned at 6844b413), installed by bash oneshot-setup.sh --music into its own environment, with the 22 GB of weights. DGX Spark: ComfyUI's own MiniMax Music 3 nodes, bash oneshot-setup-spark.sh --music. - Measured through the app, one 60 s song on each machine (the same pop lyrics and style, seed 7, 30 steps; one run each):

| 60 s song | Mac Studio M5 Ultra (MLX) | DGX Spark (ComfyUI, CUDA) | |---|---|---| | Whole job, song made | 75.8 s (59.99 s of song), files in the page cache | 289.0 s (59.99 s of song), ComfyUI started and the files read from an empty page cache | | Words and melody (autoregressive model) | 37.8 s | 176.3 s | | Sound (DiT, 30 steps) | 34.6 s | 96.3 s | | Decoder | 2.0 s | 4.1 s | | Model load | 0.9 s (first song) | inside the stages above (ComfyUI loads as it goes); about 12 s more than with the files cached | | Peak memory | 27.6 GB (MLX's own peak); the machine's in use rose 32.9 GB | 29.3 GB taken from the machine (MemTotal - MemAvailable, 5.1 GB before) | | Whisper on the take | 96 % of the words sung (128 of 134); the song reached 43 % of the lyrics at 60 s | 1 %: on this take Whisper heard only "We'll be right back" twice. A second take through the app (hip-hop lyrics, seed 11, 273.2 s): 98 % (166 of 169), all the lyrics reached |

- Honest limits (as of 2.9.0; 2.9.1 plays a song while it is made on a Mac and adds TensorFold's CUDA engine on a Spark, above). A song is not played while it is made (no streaming yet). Whisper's count on sung words is rough, and one Spark take in three was barely heard by it (above). Lengths measured: on the Spark 30, 60, 120 and 300 s asked (one run each; the 300 s one ended itself at 189.8 s, so no song over 120 s was made to its full length there); on the Mac songs of 10, 30 and 60 s. Other lengths are untested, and so is anything but the default settings. On the Spark the autoregressive stage runs in ComfyUI's Python loop at about 9 frames a second, so a song takes about 4.4 times its length there against 1.25 on the Mac.

  • Upgrade with git pull, then bash oneshot-setup.sh --upgrade --music (on either machine) to add the Music tab's
engine and weights; restart the app.
  • Licence: MiniMax-Music3 Community License. Commercial use is allowed, but a commercial product must show
"MiniMax-Music3" in its interface (the tab does). Above US$20 million of yearly revenue you need MiniMax's written authorisation, and a hosted service must keep safeguards against misuse.

New in 2.8.0 and 2.8.1

  • 2.8.1: Qwen 2.1 Full. The picker now offers Qwen-Image-2.1 in two versions, as it does FLUX3-K: **Qwen 2.1
Turbo (8 steps, the quickest) and Qwen 2.1 Full**. - What Full is: the 40-step base model with true guidance (CFG 4 with an empty negative prompt, as Qwen's own pipeline runs it). It gives more detail than Turbo. - Where it is offered: wherever the base weights are installed, which is the same files Edit a picture's 40-step choice uses (oneshot-setup.sh --image-edit). - Mac: the Mac's generator gained --cfg for it. - DGX Spark: it runs ComfyUI's 40-step CFG-4 workflow. - Times on an M5 Ultra at 1344x768: Turbo 12 s, Full 47 s, both peaking at 15.3 GiB. Full run without guidance took 24 s and was barely better than Turbo, so guidance stays on.
  • A shootout of all four picture models, Mac against DGX Spark, with 128 pictures, says which to use for what:
see Which picture model to use: the evidence.

▶ Watch the 60 s demo: the Studio on one Mac Studio M5 Ultra, recorded live on 2026-10-16. It shows the app at work, two clips with sound, and the times and memory measured during those renders.

!Two demo clips made on the M5 Ultra: a FLUX3-K Fast picture to 864x480 video, a Qwen 2.1 Turbo picture to 1344x768 video

  • Pick the picture model. Wherever the Studio makes a picture you can choose Qwen 2.1 Turbo (the quickest),
FLUX3-K Fast (the distilled checkpoint, 16 steps) or FLUX3-K Full (the base checkpoint, 50 steps at CFG 3.5). That covers Image only, scouts, the first frame of a clip and a last frame. Install them with bash oneshot-setup.sh --flux3 (41 GB); first accept the FLUX Kommunity License on Hugging Face. - How each prompt is handled: BFL's prompt upsampler writes a full scene caption from your prompt first. - On a DGX Spark: FLUX3-K runs on ComfyUI's own FLUX 3 nodes, with ComfyUI moving to 5a665890. - On a Mac: it runs on flux3-mlx in an environment of its own.
  • Edit a picture with FLUX3-K. It also takes up to nine further reference pictures, for example a person from one
picture put into the place of another. The LoRAs, the camera ring and the 40-step base model stay Qwen's.
  • Better text and whole figures. On the same prompts and seeds, FLUX3-K:
- spelled a poster's title and tagline where Qwen wrote "SOME ONE IS STOLL LISTENNING"; - drew whole figures for character sheets where Qwen cut them at the waist; - kept two characters recognisable in a two-reference shot.
  • New carrier image. ghcr.io/drowzeys/keys-tensorfold-studio:2.8.0 now holds the DGX Spark's LoRA engine
(h3-cuda-lora 1f7ecc75), so a Spark install no longer builds it from source.
  • Upgrade with git pull, then bash oneshot-setup.sh --upgrade. Add --flux3 for the FLUX3-K weights.
!FLUX3-K against Qwen 2.1 Turbo on the same poster prompt and two seeds

*The poster prompt, two seeds. Left: Qwen 2.1 Turbo, on the Mac. Middle and right: FLUX3-K Full ("Base") and FLUX3-K Fast ("Distilled"), here run through diffusers on a Spark, so the times are diffusers' (91 s and 15.5 s). In the Studio, through ComfyUI, they take 57.5 s and 10.5 s.*

Picture times, 1344x768, model loaded, bf16:

| | DGX Spark | Mac Studio M5 Ultra | |---|---|---| | Qwen 2.1 Turbo, 8 steps | 9.5 s | 9.7 s | | Qwen 2.1 Full, 40 steps at CFG 4 (2.8.1) | | 47 s (whole run, model load included) | | FLUX3-K Fast, 16 steps | 10.3 to 10.7 s | 14.9 s | | FLUX3-K Full, 50 steps | 57.5 s | 53.6 s | | FLUX3-K prompt upsampler, once per prompt | about 18 s | 5 s | | Edit a picture: Qwen / FLUX3-K Fast / FLUX3-K Full | 24 / 37 / 139 s | 10 / 37 / 240 s | | Two-picture edit: Qwen / Fast / Full | 23 / 44 / 188 s | 13 / 42 / 427 s |

FLUX3-K Full is slow for edits on a Mac, so Fast is the FLUX3-K to use there.

A whole clip, text to picture to 5 s of video with sound, measured through the app. On the Mac these are the demo renders; on the Spark, the 2.8.0 tests.

| | Picture | Video (FastH3, 8 passes) | Total | Peak memory of the render | |---|---|---|---|---| | Mac, 864x480, FLUX3-K Fast | 11 s | 70 s (5.93 s a pass) | 81 s | 29.0 GB | | Mac, 1344x768, Qwen 2.1 Turbo | 11 s | 201 s (20.1 s a pass) | 212 s | 33.0 GB | | DGX Spark, 864x480, FLUX3-K Fast | about 32 s (upsampler included) | 70 to 96 s | 102 to 128 s | | | DGX Spark, 864x480, FLUX3-K Full | 53 s | 96 s | 149 s | |

Peak memory is the render process's macOS footprint, GPU memory included, sampled every second. The peak comes at the handover from the picture model. FastH3 itself holds 23 GB at 864x480 and 27 GB at 1344x768.

!Memory of the render process during the two demo renders on the M5 Ultra

The Studio's TensorFold work, submitted upstream. At the TensorFold project's invitation, the engines behind this Studio are open as pull requests to ashhart/TensorFold. Each lists what was tested and what was not:

| Pull request | What | |---|---| | #949 #950 #959 #960 #961 | MiniMax H3 / FastH3 on Metal in bf16 (10.2 s a pass against 27.9 s for MLX bf16), from an image, any step count, re-voicing, Ref2VA | | #947 #958 #946 | MiniMax H3 / FastH3 on CUDA, one GPU or one pass split over several DGX Sparks (3 Sparks: 3.0 s a pass in int8, 5.0 s in bf16), and the runtime hook it uses | | #939 #956 | Fish Audio Drama 3 on CUDA (34 frames/s) and on Metal (84 frames/s, first audio 0.15 s, 9.5 GB) | | #948 | Qwen-Image 2.1 on Metal (0.74 s a step, 43 dB PSNR against mflux) | | #941 to #944 | This Studio: Slate, Motion Previs, FLUX3-K and Voice |

These are proposals: this repository's install still pins the engines on the drowzeys/TensorFold fork.

Big credit: Sam Wasserman and Wasserman Productions (wassermanproductions.com)

Sam Wasserman shaped the production side of this studio: the AI film workflow and the ideas behind it. Slate, his prompt studio for AI filmmaking, is the workflow inside the Wasserman Slate AI Studio tab. The Wasserman Sharp Spec, the QA gate that follows it, and the 80s Horror LoRA that opens the Keys and Wasserman LoRA Hub are his too. The Motion Previs tab's analysis is a Python port of his Motion Previs Studio. The aim we share is the best AI film studio there is, and this pack is where his planning tools meet a render engine. See CREDITS.md.

Wasserman's Filmmaker Suite, by Sam Wasserman and Wasserman Productions, is built in: ScriptBreak, Cork Board, Master Canvas, Storyboard Reference Studio, Blockout, Motion Previs Studio, Slate, Circle Take, Stem Studio, Call Sheet and DaVinci MCP, each under its own licence (Apache-2.0; Master Canvas MIT). The Studio reads and writes their files.

Keys (drowzeys) built the studio itself: the app, both builds, the TensorFold families and int8 kernels, and the Metal and CUDA engines it renders with. Sam Wasserman and Wasserman Productions helped design and build it in collaboration with Keys. Imagination Studio is by keys+Wasserman.

Thank you to everyone this stands on: the Qwen team at Alibaba (Qwen-Image-2.1, Qwen3-VL), the MiniMax team (MiniMax H3), Ash Hart and the TensorFold contributors, antirez (h3.c), RobZombAI (H3MLX), mrbizarro (minimax-h3-mlx / Phosphene), Filip Strand and the mflux contributors, Viggle (the image turbo adapter up to 2.2), speach1sdef178 (the 2x video decoder), LightX2V (the video Turbo adapter), NVIDIA Research (Sol-Engine, Sol-Attn, Sol-H3), FastVideo (FastH3), and Apple's MLX team and every MLX contributor, Fish Audio (Drama 3, text to speech), the MiniMax team again (MiniMax-Music3, the Music tab's songs), Black Forest Labs (FLUX 3 Image Klein) and felix-ab (flux3-mlx), and OpenMOSS (MOSS-Image). This pack is their work, ported, pinned and measured. See CREDITS.md. Built with Qwen. Built with Fish Audio.

Which picture model to use: the evidence

The test: a shootout on 2026-10-16 with Studio 2.8.1, run on a Mac Studio M5 Ultra and one DGX Spark.

  • Pictures: 8 prompts × 2 seeds × 4 models × 2 machines = 128 pictures at 1344x768, 0 failed jobs.
  • Judging: by eye, from the full-size pictures.
  • Full report: every grid, the raw numbers and the method are in
docs/picture-shootout.md.

Speed and memory, per picture with the model loaded (median):

| Model | Mac M5 Ultra | DGX Spark | Peak memory (Mac / Spark) | |---|---|---|---| | Qwen 2.1 Turbo, 8 steps | 4.7 s | 8.6 s | 33 / 31 GB | | Qwen 2.1 Full, 40 steps at CFG 4 | 43.3 s | 80.1 s | 33 / 30 GB | | FLUX3-K Fast, 16 steps | 9.8 s | 10.5 s | 38 / 37 GB | | FLUX3-K Full, 50 steps | 59.9 s | 58.7 s | 40 / 37 GB | | FLUX3-K prompt upsampler, once per prompt | 5.2 s | 12.5 s | |

  • Qwen: runs about 2x faster a step on the M5 Ultra.
  • FLUX3-K: runs at the same speed on both machines.
Quality, the winner per prompt:

| Prompt | Winner | The evidence | |---|---|---| | Poster with title and tagline | Qwen 2.1 Full | Most coherent scene. All 32 posters, every model, spelled both lines exactly | | Photoreal portrait | Qwen 2.1 Full | Real skin and the whole face. FLUX3-K cropped off the mouth in 8 of 8 | | Character turnaround | Qwen 2.1 Full, narrowly | Gear consistent across views. FLUX3-K wins for a labelled line-art sheet | | Crowded night market | FLUX3-K Full | Lanterns, steam, mostly real words on signs. Qwen drew pseudo-script | | "Red cube on a blue sphere, left of a green pyramid" | FLUX3-K Fast | Right in 8 of 8; Qwen 2 of 8 | | Food photography | FLUX3-K Fast | More professional styling. No model reliably drew the three pancakes asked for | | Watercolor | FLUX3-K Full | Truest washes and paper texture | | Hands at a piano | FLUX3-K Full | Five fingers on each hand in 8 of 8. Qwen drew a third hand 3 times |

!The spatial prompt: rows are Mac s101, Mac s102, Spark s101, Spark s102; columns Qwen Turbo, Qwen Full, FLUX3-K Fast, FLUX3-K Full

*The spatial prompt. Every FLUX3-K picture (right two columns) has the pyramid on the right, as asked. Six of the eight Qwen pictures put it on the left.*

Conclusion: which to pick

  • Drafts and scouts: use Qwen 2.1 Turbo. It is the quickest, and its quality is visibly below the other three.
  • The everyday default: use FLUX3-K Fast. It is right on layout and good on hands and crowded scenes, at about
10 s on either machine.
  • Faces, portraits, posters and character sheets: use Qwen 2.1 Full. It is twice as fast on a Mac.
  • Final frames of complex scenes, illustration and hands: use FLUX3-K Full.
  • Machine: for Qwen, the Mac when you have the choice. For FLUX3-K, the machine does not matter.
Limits: two seeds a prompt and one judge, by eye. These model times leave out the text encode, so they are lower than the whole-run times in the table above.

MOSS-Image on a DGX Spark

MOSS-Image is OpenMOSS's 5B text-to-image model (Apache 2.0: commercial use is allowed). On a DGX Spark it is a fifth choice in the picture picker, for scouts, studio jobs and Nodes. It makes pictures from words only: it does not edit pictures.

  • Install: bash oneshot-setup-spark.sh --moss (30 GB: the SFT checkpoint and its Qwen3.5 9B text encoder in bf16,
and the FLUX.2 small decoder, from Comfy-Org/MOSS-Image). It needs ComfyUI v0.42.0 or later, which this setup moves to.
  • Settings: ComfyUI's own template: 25 steps of er_sde at CFG 2.5, with its negative prompt. The prompt goes to the
model as written.
  • Mac: bash oneshot-setup.sh --moss installs the same files (28 GB) on the Mac's own ComfyUI (the one of
--upscale and --remove, PyTorch's Metal device, PyTorch's attention) and scripts/image.sh runs the Spark's graph there. Measured on 2026-10-20, 1344x768, seed 7, the same prompts on both machines: 71 s for the first picture with the model load and 59 s for the next on a Mac Studio M5 Ultra, 44 s each on a DGX Spark. The lettering came out exactly as written on both, and both are equally sharp; the compositions differ, because er_sde draws its noise during sampling on each machine's own device, so a seed does not give the same picture on a Mac and a Spark.

Tested on one DGX Spark on 2026-10-19 (bf16, one seed per prompt, judged by eye):

| | MOSS-Image | FLUX3-K Full | Qwen 2.1 Turbo | |---|---|---|---| | 1344x768, model loaded | 45 s | 69 s | 10 s | | 1024x576 (a scout picture) | 26 s | | | | Memory taken, from nothing loaded | 26 GB | | | | Poster: title, tagline and date | All three lines exact, cleanest layout | Title cut off at the top | Exact |

  • Best at: lettering. Posters, title cards, signs, menus with prices and labels came out exactly as written. A
Japanese station sign was right too.
  • Also good: a photoreal portrait at dawn (warm, filmic, the light as asked) and anime key art.
  • Not tested yet: hands, the same character across pictures, and MOSS-Image's JSON layout prompts.
  • Use it for: posters, title cards, signage and anything with words in the frame, and pictures meant for
commercial use.

!MOSS-Image, FLUX3-K Full and Qwen 2.1 Turbo on the same poster prompt

!The same film-still prompt: MOSS-Image at 25 and 50 steps, FLUX3-K Full, Qwen 2.1 Turbo

Speed: the first version on each machine, and 2.3

!Benchmark: TensorFold against ComfyUI, h3.c, H3MLX, Phosphene and the Turbo LoRA, on a DGX Spark and a Mac Studio M5 Ultra

*Every figure on the poster is a measurement from this README and the H3 shootout of keys-Mac-TensorFold-MiniMax-H3-MLX. Most are one run each; the times include loading the model and decoding unless a row says per pass.*

One run each unless a range is given; 5 second clips are 124 frames. Mac: Mac Studio M5 Ultra, 256 GB. Spark: one NVIDIA DGX Spark (GB10), models already loaded.

| 5 second clip, 864x480 | Mac, first version (1.0, 2026-10-04) | Mac, 2.3 | DGX Spark, first build (ComfyUI's own blocks, bf16) | DGX Spark, 2.3 | |---|---|---|---|---| | What makes the video | MiniMax H3 + Turbo adapter on MLX, 3 passes | FastH3, 8 passes, TensorFold's Zig + Metal engine | FastH3, 8 passes, ComfyUI | FastH3, 8 passes, TensorFold's CUDA engine in int8 | | Image, then video from it | 74 s (103 s with the sound made again, the later default) | 79 s (image 6 s, video 73 s) | 155 s | 115 s (measured before the faster decoder below, which takes about 10 s more off) | | Text straight to video | not offered | 66 s | 118 to 121 s | 73 s | | One denoising pass | 9.5 s | 5.3 s | 10.5 s | 7.1 s | | Video decode | not timed apart | 13 s | 26 s | 14 s |

| Other sizes and lengths | Mac, first version | Mac, 2.3 | DGX Spark, first build | DGX Spark, 2.3 | |---|---|---|---|---| | 864x480, 4 passes, text to video | | 43 s | 71 s | 45 s (from the pass time) | | 1280x720, 5 s, text to video | | 199 to 217 s | not measured | 183 s | | 1344x768, 5 s, text to video | | 175 s | 289 s | about 195 s | | 1344x768, 8 s, image then video | 364 s (709 s with the later default) | not re-measured | | | | 1280x720, 10 s (243 frames), text to video | | 378 s | not measured | 444 s | | One 15 s part of a chained 864x480 clip |

... (README truncated for length)

Chat with me