A generative music studio by Flip Engineering, powered by YuE2 and audio.cpp. Start with a feeling, a lyric sheet, a score, or an empty page. Make short studies, shape the composition, and collect the takes you want to keep.
Current implementation, research and creative work is tracked in the Riff project todo.
The Apple Silicon desktop installer is available in the release assets. Its flow is open Riff Setup → Install → Open Riff. It includes the application runtime, Metal engine, media tools and local writer, downloads the required models with resumable progress, and adds Riff to Applications. Subsequent updates belong to the app. Web previews use ad-hoc signatures. Organization signing and notarization remain separate improvements; available builds appear in the release assets.
The current source distribution supports Apple Silicon Metal, Linux NVIDIA CUDA, and CPU. Developer setup and the existing source installer are documented in installation and updates. See desktop delivery for packaging and acceptance details.
Model terms: Riff's application code is MIT licensed. The separately downloaded YuE2 weights use CC BY-NC 4.0. The application license does not change the model's terms.
- An open starting point. Free play, instrumental direction, supplied lyrics, or an original surprise song. Hold the words or sound while exploring the other. Write with optional local AI, OpenRouter, or instant phrase suggestions. AI writers work with the complete generation recipe: words, sound, score, planning, sampling and acoustic controls. Variations include the source score and listening notes; the result fills editable controls with a complete Undo.
- Composition. Generate YuE2's symbolic plan before rendering music. Edit its melody and harmony in a score workspace, change tempo/meter/key, transpose, edit notes, audition tones, and import/export ABC or MIDI. Describe a musical change to an optional OpenRouter composer and preview its proposed score. Reuse an unchanged score directly; editing its notation starts a new composition input, and Undo restores the original attachment.
- Short studies. Select a few lyric lines and try a brief take while retaining the full draft. Duration and quality shortcuts stay editable.
- Compare takes. Switch A/B at the same listening position, loop a passage, and see which musical inputs changed. Reorder waiting takes with keyboard controls.
- Shape a performance. Save its phrasing and score before rendering audio, or return to a completed stage after an interruption. Explore acoustic variations from the same performance, with an editable draft and undo. Once synthesis is saved, Finish audio completes the recording without repeating it. Open Audio refinement to adjust the decoder while keeping the music and seed.
- Granular control. Melody/chord planning, supplied ABC, guidance, seeds, semantic and planning sampling, repetition controls, acoustic solver steps, and a multistep synthesis method that reuses earlier velocity estimates. Blank optional controls retain the runtime defaults.
- Listening and library. Playback, seeking, a measured waveform, sculptural seed artwork with an immersive sound view, favorites, notes, search, reversible archiving, and animated MP4, WAV, and PNG artwork exports. Share a complete song or a marked passage with its living artwork, with 4K/60 fps export and editable framing. Adjust surface, movement, color and texture in the sound view. Restore any recording's recipe and make a variation.
- Producer review. Optional direct audio review through OpenRouter, informed
by the recording's recipe and actual YuE2 score. Each review returns a complete
recommended take: lyrics, direction, score, duration, seed, and sampling settings.
Generate it directly, edit it in the studio, or export the recipe. The default model is
google/gemini-3.8-flash; the studio never silently substitutes a model. Producer variations retain the source seed and can reuse the saved score, performance or synthesis; the corresponding controls remain editable. - Saved sounds. Browse, create, edit, and remove reusable sound prompts. Adapter research distinguishes these from learned LoRAs.
- Keep creating. The desktop runtime can write a new idea while music renders when memory permits. Each operation keeps its own progress and cancellation.
Lyrics, structure, and musical direction are optional. A score guides generation; its notes and timings are not a promise of exact audio reproduction. Instrumental requests can still produce vocal textures. Model capabilities describes the controls and current runtime boundaries.
Open Review settings to save an OpenRouter key and select a model. Keys use
macOS Keychain or Linux Secret Service (secret-tool); there is no plaintext key
fallback. Requests send only the material described beside the action. Provider
usage charges apply. Audio review directly assesses music; no ASR pipeline runs.
Installed releases keep the library, models and recordings in a persistent
workspace outside versioned app files. Updates are verified and staged before
activation. Automatic checks are enabled; preparing updates while idle is opt-in.
Source checkouts remain under Git control. Back up the workspace's data/ and
outputs/ together; credentials are managed separately by the OS.
git clone https://github.com/Flip-Engineering/riff.git
cd riff
python3 studio.pyCore studio operation uses Python's standard library and static web assets; it needs no frontend build or npm installation. Start setup from the app, or run:
python3 setup_engine.py --backend metal # or cuda / cpu
python3 run.py --free --steps 8 --max-seconds 28The optional Apple Silicon writer is installed with ./setup-writer.sh using
uv. OpenRouter writing and phrase suggestions work on both supported platforms.
Q4 weights, memory mapping, direct cache writes and explicit graph lifetimes reduce native inference memory. Earlier 12–30 second M4 previews measured around 2.7 GiB of process footprint. A 201.5-second saved-performance render measured 3.39 GB after the synthesis cache rewrite, down from 6.59 GB with identical audio. Fresh generation also includes semantic sampling and needs more memory; its full input baseline measured 10.41 GB. The engine exits after each take. Validation records the settings and separates inference measurements from build and browser checks.
See contributing, design, and third-party notices.

