Skip to content

Ruach Studio 2.0.7

IGR.BIBLE edited this page Nov 12, 2026 · 2 revisions

Ruach Studio 2.0.7: our own decoders, the Narrator and eight rooms

Released on 11 November 2026 · the release · CHANGELOG · the visiting card

We cut 2.0.7 in honour of our own decoders. Five days after 2.0.6, the Studio decodes every new take with a decoder we grew and trained ourselves, opens a room for the spoken word, takes its rooms into a new order and fetches its models more carefully than before.

This article walks through what changed, why, and what we measured on the way. Every change has its own line in the CHANGELOG, numbered by our working log (HERESY 2163–2391).

Our own decoders become the Studio's sound

The decoder (the VAE) is the last step of every take: it turns what the model wrote into the sound you hear. Until 2.0.7 the Studio decoded with m-a-p's Standard decoder by default.

Now the default is YuE2-VAE-RS x3 v1 (step 161,953), a decoder grown from m-a-p's Standard to three times its size and trained by us on music. v2 (step 155,030) stands beside it as a second voice. In the Studio they are named RS x3 v1 and RS x3 v2.

You choose the decoder in the song form, in ☰ → VAE, in Engine → Compute, and on a finished take's own VAE switch. The last one decodes the take's kept music again in seconds, so a take you made before 2.0.7 can be heard through v1 or v2 without being generated again.

Standard has not gone away. Engine → Defaults → Decoders offered (up to three) adds it back to the lists, and Standard still encodes covers and uploads. The Legacy decoder and the 0.666 Blend have left the Studio; they stay on Hugging Face, and a take decoded with one of them keeps its decoder's name.

On NVIDIA cards both of our decoders run in true float32. A patch of ours to ggml turns TF32 off where an operation asks for F32, so the engine matches the PyTorch reference to the rounding.

Why we grew a decoder at all is in the study: what Standard loses (a ripple at 100 Hz, seams at 6 and 12 kHz), how the larger decoder was grown and trained, and what was measured. Read it on the card: YuE2-VAE-RS ×3, the study.

The weights, the study and a programmers' guide are public on Hugging Face: goldhub/YuE2-RS-Finetunes, VAE-RS/. The integration kit for ComfyUI and for YuE2's own pipeline is Apache-2.0; the weights are CC BY-NC 4.0, as YuE2's own are. The first announcement is in Discussions #6.

A new install fetches v1 with what a song needs, and v2 comes with the extras.

The Narrator: a room for the spoken word

The Narrator reads your text aloud with Fish Audio's Drama 3, run through audio.cpp (Apache-2.0). It runs on your card in the quant its free memory allows, or on the processor.

It speaks in the engine's own voice or in a voice of your own made from a short clip. A voice is cloned only with its owner's consent, and no ready-made voices come with the Studio. It reads as narration or as a dialog with a voice for each speaker, and emotions go in brackets.

Stresses come before the reading. A stress you marked stays as you wrote it; then comes your own dictionary for that language; then the language's big dictionary where the Studio has one. For Ukrainian that is the Studio's index of lang-uk's ukrainian-word-stress (MIT, 2.9 million word forms, from ULIF's «Словники України»). For Russian and every other language in 2.0.7 you build one of your own in the same form with lab/reader_dict_build.py (docs/NARRATOR-DICTIONARIES.md).

It hears what it read. Whisper, on the processor, hears each piece while the next one is being read. A word inserted, dropped or swapped is read again, up to three readings. A guard cuts a voice or a tone left after the last word, and names a tone under the words, a stall or a level far off. The whole reading is joined at −16 LUFS.

A take is fixed piece by piece. Fix opens a finished take's pieces, each with ▶. Press a word's vowel and the stress moves there (into your dictionary too, if you ask), and only that piece is read again, in the take's voice. A pause tag such as [pause:1s] or [pause:600ms] cuts the piece there and stands after it to the hundredth of a second.

Its quants are graded. Each tier was measured on an RTX 3090, alone and beside other work, and graded green (stable), yellow (medium) or red (undesirable). Auto never takes a red one, and an out-of-memory crash is retried with more of the model in RAM.

Books, recordings and scripts. A text with [split] in it is read as a book: part by part, in one voice, each part a take of its own. A lecture or a stream (any audio, or a video's sound) is heard by Whisper and cleaned up by the Writer's model into a script. The Writer's text goes to the Narrator with one button. A text in letters of its own is read by a glyph map that you edit; the Studio never transliterates it.

In the Library and the Refiner. The Library has two realms now, the Musician's and the Narrator's, with a small slider on its bar (Musician · Both · Narrator). The Refiner has a speech chain for the Narrator's takes: denoise, de-esser, speech EQ and speech loudness. The Narrator's takes say in their Content Credentials that they are speech, and never for training.

«Built with Fish Audio» stands on each result, and the Narrator has its own tab in the guide (F1).

Eight rooms in a new order

The keys 1–8 are now the Musician, the Narrator, the Writer, the Refiner, the Artist, the Videographer, the Trainer and the Librarian; the Engine is 0.

The Creator is now called the Musician, and the Reader is the Narrator in English (other languages keep their own name for it). Your settings, workspaces, takes and addresses are as they were.

The Studio speaks Hebrew, its thirteenth language. The page reads right to left, while the player, the waves, the timeline and the sliders keep running left to right.

The page is a centred block of 2560 px at most, so on a 4K screen the whole Studio stands in the middle. A system bar under the header shows the processor, the memory, each card (NVIDIA and Intel Arc alike), the disks and the room's jobs, with two graphs on hover.

Two transcribers: Heretical and Refined

Wherever a score is written from a recording, you now choose between two transcribers. The names are Viktor's and are never translated.

Heretical is SheetSage2 with the bfloat16 angles it was trained with, and it is the default. Refined is anime-song's community fine-tune SheetSage2-Refined (CC BY-NC 4.0), run with the same angles, as its author's reference runs it; it has a feel of its own for notes and lyrics. A tooltip on each says what it is, whose it is and what it risks.

Two setups were measured and left out. SheetSage2 with exact angles wrote false meter changes: 82 on our test set of songs (the Ring) against 8. Refined with exact angles left one card without a score and one without chords, and got the bar count right on 4 cards of 19, against 9 with the bfloat16 angles.

A score written from a recording now begins where the recording begins. Before, when the transcriber found its first beat late, the score started a bar early and lost the notes before it.

The models in one tree, and a triple guard

The models live in one tree, models/<room>/. An install of 2.0.6 is moved into it on its first start; a model that lies on another disk stays there, and a link at its new place reaches it.

Every model file from our repositories is checked three times before it is used. It comes at the pinned commit, it must have the pinned size, and its SHA-256 must match the Studio's own manifest (heresy/hf-manifest.tsv). Only then is it moved into place. A file that fails keeps the one that was there, its download is removed, and the line says which check failed. A download cut halfway goes on from where it stopped next time.

An update now brings the new default decoder it announces; before, it was announced and then skipped. The repositories themselves are unchanged, so 2.0.6 and older fetch as before.

Every file the engine writes now lands whole or not at all: each write goes to a part file of its own, is renamed into place, and is removed on a failure.

The AppImage: a window of its own and its own C library

Started from the desktop, the Linux AppImage first opens a small window of its own. It says what the Studio does, what is missing and whether there is a network. It fetches the models only online and only when you press Fetch the models, opens the page, and stops the Studio when you close it.

It carries its own C library, so it runs on Linux distributions older than Ubuntu 22.04 too. We measured it on Debian 10 and CentOS 7, offline.

The file is RuachStudio-2.0.7-core-x86_64.AppImage on the release page, with its .sha256 and .zsync.

The rest of the house

The DAW gets a bar grid from the take's own tempo, meter and sections, so cuts, copies, the loop and the click cling to bars and beats. It also gets a chord and key lane from the take's score, a reference track at equal loudness, Bounce in place, Audition from the click point (Alt on a lane's wave), and automation shapes: a bend, a hold or an S, and an LFO on the bar grid. The REAPER project now carries your markers, the lyrics as MIDI lyric events and a Chords track; a real REAPER 7.81 import confirmed the markers' times and names.

The Videographer cuts a clip as an editor and a colourist would. A change of section is cut on a bar of the DAW's grid, with a strictness you choose (as sung, on the sections, or on the beat). The lyrics can run as karaoke with each word lit as it is sung. Every picture's colours are matched to one shot, so pictures painted apart become one film. YouTube 4K is made at 1080p and scaled up, almost twice as fast. The plan keeps its history, with Undo and a new Redo that survive a reload, and the work is spread over every card of the lab at once.

The Artist can finish an upscale with a painter's pass: the picture's own Qwen-Image 2512 painter, adapters, prompt and seed paint over the upscaled picture. SeedVR2 is offered as a pass of the upscale, and «Advanced: a size of my own» shows what your card needs as the sides change.

The compare window plays First against Second from any two versions (up to four), with an A–B loop that holds the playhead through every switch, and it now shares one clock and one sound with the player.

The Musician is built for long hours: a wider take frame, two equal columns that scroll on their own, a faint live spectrum behind the player's buttons, the vocal line's octave beside the Style, and «worn words», the clichés of each language underlined in the lyrics (each list is yours to edit). A song longer than the sound half's window is now split into two even pieces that meet in a crossfade, and the sound no longer drops after the seam.

The Trainer has a dataset doctor that looks at a folder before a run: versions and duplicates, length, MP3 and highs cut at 16 kHz, low rates, mono, clipping, silence at the ends, loudness and the tempo's spread.

The engine runs on ggml 0.29.0 with our CUDA flash-attention fix carried over: the same speed and sound on NVIDIA cards, and the Intel Arc engine is built on it too.

Safety. The Studio and its lab answer only localhost, the addresses of your local networks and the names you list in RUACH_HOSTS; a name that merely looks private (.local, .lan, a name of one label) is refused. The https door speaks HTTP/2 and answers 400 to a request whose framing could be read two ways. A plugin's MIDI script runs fenced off from the Studio and can no longer read it.

Saying so instead of showing nothing. Many rooms used to show an empty list when the lab could not be read. The Refiner, the Artist, the Trainer, the Librarian and the Videographer now say that the lab did not answer, instead of looking empty.

What comes next: 2.0.8

  • Higgs Audio v3 (Boson AI) as the Narrator's second engine, beside Drama 3. Its weights come from Boson's own source under Boson's licence and are fetched by your own hand; we never mirror them.
  • The Videographer's own tracks, with designed templates for titles and karaoke (the karaoke itself came in 2.0.7).
  • Russian stresses for the Narrator from A. A. Zaliznyak's Grammatical Dictionary (gramdict's data, CC BY-NC 4.0) as an extra, and numbers written in figures said in words in the case the sentence asks (Russian, Ukrainian, Greek).

How to update

Thanks

To m-a-p for YuE2 and its Standard decoder, which ours grow from; to ServeurpersoCom for yue2.cpp and ggml-org for ggml 0.29; to Fish Audio for Drama 3 (Built with Fish Audio) and to the authors of audio.cpp; to lang-uk for ukrainian-word-stress and to ULIF for «Словники України»; to anime-song for SheetSage2-Refined; and to everyone who opens an issue or a pull request.

Questions and findings about this release are welcome in its announcement, in Discussions and in Issues.