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).**
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,
- Automatic updates are on by default, so an install stays on the latest version: checked every six hours,
- NVIDIA RTX Pro 6000 Blackwell (96 GB) may use the same one-shot recipe, pending validation on the card: engines
- Every credit, in the app and in the repo. Settings → About → Every credit shows CREDITS.md and the third-party
- No personal information in the repo, enforced by a test and by CI; contact goes through GitHub only (Issues,
- The repository is now
drowzeys/Imagination-Studio-by-keys-Wasserman, matching the name. The old address
New in 3.1.0 (2026-10-20)
- One-shot installs with everything, on both machines.
bash oneshot-setup.sh --allinstalls every feature the
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
- 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
- A LoRA on the Mac's native FastH3 engine, merged into the int8 weights at load; sound effects on Metal twice as
- The Mac's memory read correctly (free, file-backed and purgeable pages), so a large job no longer pushes the Mac
- Upscale, Find and Remove a person and MOSS-Image on a Mac (below), updates that refresh the renderers' copies, and
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
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
!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),
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 --upgrademoves
- 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
- 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,
- Settings: the look, which rooms show, what a new take starts from, every connection, and Models & weights,
- Made for phones too: the whole studio works from a phone's browser. The six engines sit along a bottom bar,
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
- One-click Connect for every agent, from any page that needs one: finds it or installs it, runs its own
- Link another computer: a DGX Spark uses the agents signed in on your Mac over SSH, and the studio sets up both
BRAINS.md).
- The ChatGPT app's own Codex is used when the one on PATH is older, here or over SSH.
- Models & weights finds every model the studio needs anywhere on the machine and links it instead of
- Gated weights (Keyframe Animation, 3D Animation Style, Stable Audio Open): Install signs you in to Hugging Face
- Looks: the LoRA hub as a style library, one card a look.
- Sound effects and foley: MMAudio makes a clip's own sound from its picture, Stable Audio Open makes a sound from
- 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: 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~/TensorFoldStudiois 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.
- Put the computer and the phone on the same Tailscale network (free for personal use):
- Share the studio on that network, once, on the computer running it:
tailscale serve --bg 7870
Tailscale prints the address, https://. 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:// work too; the access key below still
guards it, but keep that to a network you trust.)
- Sign the phone in, once: on the computer, open Settings → Access key and scan its QR code with the phone's
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,
- 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
- Connect an agent from the phone: Connect shows the sign-in code in large type with Copy code and *Copy
| !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;
- Qwen team — Qwen-Image-2.1. Black Forest Labs — FLUX 3 Image Klein (FLUX3-K). OpenMOSS — MOSS-Image.
- Stability AI — Stable Audio Open · Ho Kei Cheng et al. — MMAudio · kijai — ComfyUI-MMAudio (sound effects
- Ash Hart — TensorFold.
- antirez — h3.c · RobZombAI — H3MLX · mrbizarro — minimax-h3-mlx (Phosphene) · **Filip Strand and the mflux
- Comfy Org — ComfyUI · Apple — MLX · NVIDIA Research · FastVideo · LightX2V · Viggle ·
- The agents you connect — Claude Code (Anthropic), Codex (OpenAI), Gemini CLI (Google), Grok CLI (xAI), Hermes
- OpenAI Whisper and faster-whisper, yt-dlp, FFmpeg, PyTorch, Hugging Face diffusers and
- The community LoRA authors, by name in Looks and in CREDITS.md.
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
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
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),
- Studio Vaults. Library (every take), Looks (the LoRA hub as a library of styles, one card each), Suite (bring work
- 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
- Render bay and ⌘K. The queue is docked along the bottom of every room. ⌘K (or
/) searches and runs anything;
- Pictures. The cards' key art fills from
app/static/art: each slot is listed inart/ART-MANIFEST.jsonand
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
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
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.1adds the prebuilt Sparkmusic3-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
[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, thenbash oneshot-setup.sh --upgrade --music(on either machine) to add the Music tab's
- Licence: MiniMax-Music3 Community License. Commercial use is allowed, but a commercial product must show
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
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:
▶ 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.
- Pick the picture model. Wherever the Studio makes a picture you can choose Qwen 2.1 Turbo (the quickest),
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
- Better text and whole figures. On the same prompts and seeds, FLUX3-K:
- New carrier image.
ghcr.io/drowzeys/keys-tensorfold-studio:2.8.0now 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, thenbash oneshot-setup.sh --upgrade. Add--flux3for the FLUX3-K weights.
*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
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.
| 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. 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
- 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.
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,
- Settings: ComfyUI's own template: 25 steps of er_sde at CFG 2.5, with its negative prompt. The prompt goes to the
- Mac:
bash oneshot-setup.sh --mossinstalls 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
- 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
!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
*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)