Repository navigation
Releases: jplenio/Plenio-Music-Production-System
Release list
Plenio Music Production System
Changelog
All notable changes of the current version and the one before. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 1.0.1): the changelog of 1.0.2 (1.0.1), the changelog of 1.0.1 (1.0.0), the changelog of 1.0.0 (0.8.0), the changelog of 0.8.0 (0.7.0), the changelog of 0.7.0 (0.6.1), the changelog of 0.6.0 (0.5.0 and 0.6.0), the changelog of 0.4.4 (0.2.0 to 0.4.4) and the GitHub releases.
1.1.0 - 2026-10-23
Audio HQ, a new ear for the lyrics, and the score in and out. Every take now goes through Audio HQ before the EQ: Stereo Cleanup calms the unsteady stereo shimmer of AI renders and Regenerate Highs lets UniverSR generate fresh highs above 8.2 kHz - presets that follow the song's genre, in every template's Master block and in Enhance & Master. UniverSR about doubles a song's time, so it runs only with the HQ Mastering switch at the top of every template on (off by default). The lyrics are heard by Qwen3-ASR and timed word by word by Qwen3-ForcedAligner, for covers and for the lyrics subtitles; faster-whisper stays as the fallback for other languages. The System Check says where every model file and asset goes.
- Audio HQ: HQ 1 · Stereo Cleanup on, HQ 2 · Regenerate Highs with HQ mastering on (off by default), HQ 3 · De-Reverb bypassed; presets auto (from the brief's genre), standard, gentle, strong, wide, custom; about 1.5 s per second of music for HQ 2 on an RTX 5060 Ti.
- Qwen3-ASR with its forced aligner is the lyrics ASR (Transcribe Lyrics, subtitles); Plenio carries its inference code and installs nothing.
- All audio work after the render lives in the Master block; the REFINE block left the templates; the UniverSR file (229 MB) is needed only for HQ mastering.
- System Check: folders, download links and the Plenio assets with their folders.
- MusicXML round trip: Import MusicXML… reads back what Export MusicXML wrote - with the lyrics on their notes, also after a script changed them; other MusicXML is refused.
- A whole track an octave down or up; the bass and the vocals of saved stems as MIDI; covers of one song get titles of their own; the Plenio Player follows the score's times where a song has no measured lyrics times, and says why.
Added
- Audio HQ: three refinement stages before the EQ, in every template (owner's request, after a listening test of the Plenio-AudioHQ v3.0 proposal on YuE2 takes). Inside the Plenio · Master block the take now runs through HQ 1 · Stereo Cleanup (a high-cut and a spectral cleanup of the side signal above 2 kHz - the unsteady stereo shimmer of AI renders - and a little 2x oversampled harmonic warmth; the middle is not filtered), HQ 2 · Regenerate Highs (erase and regenerate: the UniverSR model generates new highs from the song without its top octaves, and above 8.2 kHz they replace most of the original's at the original's level; below the crossover nothing changes - with the HQ Mastering switch on, see below) and HQ 3 · De-Reverb (the short metallic room and a phase lock - bypassed: it also lowers the highs by 3-4 dB), then the EQ and Loudness & Dynamics as before. 4 · Enhance & Master has the three stages as plain nodes, with their presets in App mode. Every stage has the same presets - auto (the default: the brief's genre picks the profile), standard - pop, hip-hop, soul, world, gentle - classical, jazz, folk, strong - rock, metal, punk, wide - electronic, dance, ambient - and custom for its fields; the summary says which profile ran and why (
strong (auto: genre 'thrash metal' (metal))). HQ 2 regenerates from 8.2 kHz in every preset - the setting the owner listened to (a first build let gentle start at 12.2 kHz, and the templates' default singer-songwriter song changed too little to hear). standard is the proposal the owner listened to - HQ 2 with UniverSR, which sounded better than the proposal's FlashSR (Plenio offers no FlashSR); the other profiles are marked provisional. The code follows the proposal's DSP (checked to -140 dB) without its whole-song soft clipper and without its silent fallback for a missing model (it cut the highs by 15 dB). Time: HQ 2 takes about 1.5 s per second of music on an RTX 5060 Ti - UniverSR in bfloat16, and the 40 ms level envelope as an FFT convolution (it took 19 of 21 seconds per 30 s of music); its advanced model steps trade highs for time (3: about 1.1 s, 2: about 0.75 s). Guide: Audio HQ; measurements: test report. - Qwen3-ASR is the lyrics ASR (owner's request): Qwen3-ASR 1.7B hears the sung words and Qwen3-ForcedAligner 0.6B gives every word its time - in Transcribe Lyrics (covers with the original lyrics, Check sung lyrics) and in Export Release's lyrics subtitles, so the subtitles take the aligner's exact times instead of Whisper's corrected ones. The two models run one after the other in Plenio's ASR worker (about 4 GB of VRAM at a time; a four-minute song in about half a minute on an RTX 5060 Ti) and come as Plenio assets (Apache-2.0, 4.1 + 1.8 GB, fetched on first use). transformers supports the model only from 5.13 on and ComfyUI ships an older 5.x, so Plenio carries its inference code (
plenio/third_party/qwen3_asr, vendored from transformers 5.17 bytools/vendor_qwen3_asr.py; the same words and times as transformers 5.17 on a test song) and installs nothing. faster-whisper large-v3 stays as the fallback: for a language the aligner does not know (it times English, German, French, Spanish, Italian, Portuguese, Russian, Chinese, Cantonese, Japanese and Korean) Whisper takes over by itself and the summary says so; Transcribe Lyrics still offers it, so workflows saved with it keep running. Word confidence (the editor's unsure words) comes from the transcription's token probabilities. - Import MusicXML… in the score editor (a user's request: export, let a script put the lyrics note by note, import again). It reads only Plenio's own MusicXML - the file Export MusicXML wrote, changed or not - and refuses any other (a notation program's, a third part, chords inside a part, a second voice, grace notes, tuplets,
<backup>, a bar that does not hold its meter, entity declarations ...) with the bar and the reason. The score comes back exactly (also its line groups and section names); when the file's words are the sheet's, the lyrics stay as they are and every line is sung on the notes the file gives it, else the lyrics are written from the file's lines and blocks. The export now marks the lyrics' line and block ends and block tags (<end-line/>,<end-paragraph/>,<lyric name>) and keeps the line groups and section names. A lyrics line placed by hand can carry the onset of every syllable (or word) after its span - the lyrics lane keeps them while the line stays where it is. Measured on the owner's 2230 scores: every score, its ABC text and every lyrics line's placement came back exactly. - A whole Vocal or Instrument track an octave down or up (a user's request; until now only the selected notes): Whole score in the palette and −8va / +8va in the DAW layout's track headers - one undo step, the chord symbols and keys stay.
- The bass and the vocals as MIDI (a user's request: "more MIDI tracks - bass or other lead instruments"): a saved bass or vocals stem is also written as
bass.mid/vocals.midnext to its FLAC - the notes where the stem plays them (pitch by YIN in the instrument's range, a new note at every attack), at the song's tempo. Measured on five renders: 93-100 % of the bass notes' time on a tone of the score's chord. Experimental; the drums and the other stem (several notes at once) get none. - Covers of one song get titles of their own (a user's report: in the player every cover was titled the same): with collision: number Export Release also numbers a title another song of the folder has - Yesterday (2) in the tags, the record and the file name. The Plenio Player shows songs exported earlier with one title as (2), (3) … in the order they were made; they stay takes of one song.
- The Plenio Player follows the score where no lyrics times were measured (a user's report: "This song was exported without lyrics times"): a song with a score follows the score's times where the player finds the score in the recording (half the lines within 0.15 s, 83 % within a second of the measured times), and the page says why the song has no times of its own - the release record now says whether subtitles were asked for and why they were not made.
- The HQ Mastering switch (owner's request: UniverSR about doubles a song's time - measured on 1 · YuE2 · Song: 97 s of music in 280 s with it, about 130 s without; 103 s of music in 260 s, 157 s of them UniverSR): a node at the top of every template, off by default, its labels say what it does (on: less AI shimmer, 2× time). On, HQ 2 · Regenerate Highs runs in the Master block; off, HQ 2 passes the song unchanged and its model is not even loaded - HQ 2 asks for it only when on, and Load Audio Model accepts a file that...
Plenio Music Production System
Changelog
All notable changes of the current version and the one before. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 1.0.0): the changelog of 1.0.1 (1.0.0), the changelog of 1.0.0 (0.8.0), the changelog of 0.8.0 (0.7.0), the changelog of 0.7.0 (0.6.1), the changelog of 0.6.0 (0.5.0 and 0.6.0), the changelog of 0.4.4 (0.2.0 to 0.4.4) and the GitHub releases.
1.0.2 - 2026-10-19
Creativity, one slider. Song Brief and Cover Brief get a slider from 0 steady to 100 experimental. At 50 everything stays exactly as before - also in every workflow and song made earlier - and away from it the writer writes plainer or bolder lyrics and a more specific style, while YuE2 plans and performs more steadily or more freely. The Plenio Player shows each song's creativity and the sampling it gave, and filters by it. ComfyUI 0.41.0 is now the version Plenio is tested against.
- Creativity: 0 steady, 50 the reference, 100 experimental - the writer's rules and temperature, a creative mode's plan, YuE2's plan and takes; moderate ends, the repetition penalties untouched.
- A more varied style: for YuE2 the same short line made more specific (YuE2 sings long style prose), for MiniMax Music 3 a caption that tells an arc of contrasts.
- In the player: the creativity and the sampling on a song's page, a Creativity filter and
creativity:>60in the search. - ComfyUI 0.41.0 is the reference; 0.37.0 stays the minimum.
Added
- Creativity (owner's request: a very simple way to more creative songs): one slider on Song Brief and Cover Brief from 0 steady to 100 experimental; 50 is the reference - the writer's prompt, every temperature and YuE2's sampling exactly as before, the brief's fingerprint too - and a workflow saved before the slider (or an older API prompt) keeps 50. Away from 40-60 the writer gets rules for the lyrics and the style by level (steady, restrained, varied, experimental): plain and typical at the low end; at the high end fresher images, varied lines, and a more varied style - for YuE2 the same short descriptor line made more specific (named instruments and playing styles, a production colour, words for contrast and movement; YuE2 sang longer style prose), for MiniMax Music 3 a caption whose Arrangement part tells an arc of contrasts; experimental adds one unexpected but fitting colour and may add one contrasting section. The temperature of the writer's first draft (0.6-0.8-1.0) and of a creative mode's plan (0.55-0.7-0.9) follow it, and in the templates YuE2's plan (temperature 0.55-0.7-0.92, top-p 0.85-0.9-0.95, top-k 20-30-50) and takes (0.9-1.0-1.1, 0.92-0.95-0.97, 60-100-150) - moderate ends, unchanged repetition penalties, MiniMax's own sampling unchanged. A new node Plenio · Creativity turns the value into one stage's sampling inside the template blocks; YuE2 Plan, Render and Takes have a creativity input linked from the brief; the slider is in App mode;
{creativity}for tags. In the player (owner's request): a song's Details show the creativity and the sampling it gave (the writer's and a creative mode's temperature, YuE2's plan and take - marked where they are the reference), and the filters have a Creativity row (steady, restrained, balanced, varied, experimental) and the searchcreativity:>60,creativity:varied; songs made before the slider count as 50 (balanced). Guide: Creativity; research and decisions: creativity.md.
Changed
- ComfyUI 0.41.0 is the reference (owner's decision): the CI's contract and host tests run against it, the node snapshot is taken from it, and the templates carry its Generate Text with the new
system_promptinput andthinkingoutput (unused). 0.37.0 stays the minimum: the contract and host tests pass against it too.
1.0.1 - 2026-10-18
The player at home and at the party. Two days after 1.0, the Plenio Player opens to every device in your home network - ComfyUI with it -, puts the live playlist on the guests' phones and the visual on the big screen, makes videos and shared players in the background while you listen, shares a library of any size (in parts for a phone), finds a song by every value it has and by tags of your own, and changes from one visual to the next softly. A song's video gets the cover all the way through, the lyrics word by word and lines that come in on the beat, and five new Plenio Drop presets draw the song itself. The song templates get a Plan seed and a Cover seed.
- The player in your network: a link with a code of its own (and a QR code) opens the whole player on the phone, the tablet or another computer at home - and ComfyUI too, when it runs; a browser without the link does not get in.
- Guests at the party: the live playlist on the guests' phones - to look at, or to change and wish for songs; Show the visual puts it on the big screen with their QR code over it.
- In the making: videos and shared players made in the background, one after the other, in a list that shows how far each is - with Stop.
- Large shared players: a file of 2.6 GB (365 songs) shows its songs in under a second and holds about 150 MB once open; parts of 250 MB, 500 MB or 1 GB for phones.
- Find any song: every value in the filters, numbers that follow the filters, songs left out with a right click, suggestions as you type, saved filters - and tags of your own.
- Soft changes between visuals: Morph, Melt, a soft fade, a zoom, a slide or a flash on the beat, over 0.5 to 8 seconds.
- More for a song's video: the cover all the way through (also as a spinning record), the lyrics word by word, in places of their own and coming in on the beat; Cover Galaxy, Title Smoke, Lyric Tunnel, Album Kaleido and Cover Echo draw the cover, the title and the words into the picture.
Added
- Guests in your network (owner's request): in Live Play, Let guests see the live playlist gives everyone on the same network (the party's Wi-Fi) a page of their own on the phone - the song that plays, what comes next, what played. The host chooses whether guests only look or change it: move songs up and down, take them out, and add songs from the library next or at the end. The way in is a QR code and an address with a random part; New address makes another at any time and the old one leads nowhere. The screen shows the QR code, the address, both or nothing - as a card in Live Play and in Now playing, and Show it big over everything. The access is a small server of its own on port 8770 that serves only the guests' page, the playlist with titles and covers and, in change mode, the library's titles - no audio, no files, no paths; the player itself still answers this computer only (
plenio/player/guest.py,guest_page.html; the page carries out the wishes,frontend/src/player/guests.ts; QR codes by an encoder of Plenio's own,qr.ts, checked against OpenCV's decoder for every version it makes).--guests-hostsets where it listens. - Every field of the brief on a song's page (owner's request): Details > The song lists the work mode, template, genre, mood, tempo, key, meter, length and target length, vocals, language, voice, lyrics theme (or melody and lead instrument), a cover's harmony and closeness sliders, the arrangement, genre closeness and lines under the singing - a field left empty with the brief's default and (default), or open - the writer chose; a template's value with (from the template).
- The player's version at the top of Settings (owner's request), and a note when the page open is from another version.
- In the making: videos and shared players in the background (owner's request): Make the video and Make the player put them in a queue - each kind one after the other, a video and a shared player side by side - and In the making in the sidebar lists them with how far each is, Stop, and the files when done. Videos are drawn by the page and go on with it in the background (at full speed: the drawing pauses no longer wait for the browser's timers, which it holds back in a background tab; the page asks before it closes while one is made); shared players are made by the player and go on when the page closes (
GET /api/package-jobs,POST /api/package/<job>/cancel). - Large shared players open, also on a phone (owner's request: a 2 GB file on a smartphone): the file is laid out to be read from the top (
plenio.portable/2) - the songs' list and the player first, which start at once, then each song's page, the covers and the sound in pieces the page turns into files of the browser's own and lets go. Measured on 365 songs (2.6 GB): the list shows after 0.7 s, every song has arrived after 9-15 s and plays as soon as its sound is there, and the page holds about 150 MB afterwards (the first format: 9 GB while opening, 6.9 GB after). A browser holds an HTML file in memory while it reads it - 2.8 GB for a few seconds for that file - so a large share can be made in parts of at most 250 MB, 500 MB or 1 GB, each a whole player of its songs, sharing the listener's favourites and playlists (a 500 MB part opens with under 600 MB). The file is written a...
Plenio Music Production System
Changelog
All notable changes of the current version and the one before. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 0.8.0): the changelog of 1.0.0 (0.8.0), the changelog of 0.8.0 (0.7.0), the changelog of 0.7.0 (0.6.1), the changelog of 0.6.0 (0.5.0 and 0.6.0), the changelog of 0.4.4 (0.2.0 to 0.4.4) and the GitHub releases.
1.0.1 - 2026-10-18
The player at home and at the party. Two days after 1.0, the Plenio Player opens to every device in your home network - ComfyUI with it -, puts the live playlist on the guests' phones and the visual on the big screen, makes videos and shared players in the background while you listen, shares a library of any size (in parts for a phone), finds a song by every value it has and by tags of your own, and changes from one visual to the next softly. A song's video gets the cover all the way through, the lyrics word by word and lines that come in on the beat, and five new Plenio Drop presets draw the song itself. The song templates get a Plan seed and a Cover seed.
- The player in your network: a link with a code of its own (and a QR code) opens the whole player on the phone, the tablet or another computer at home - and ComfyUI too, when it runs; a browser without the link does not get in.
- Guests at the party: the live playlist on the guests' phones - to look at, or to change and wish for songs; Show the visual puts it on the big screen with their QR code over it.
- In the making: videos and shared players made in the background, one after the other, in a list that shows how far each is - with Stop.
- Large shared players: a file of 2.6 GB (365 songs) shows its songs in under a second and holds about 150 MB once open; parts of 250 MB, 500 MB or 1 GB for phones.
- Find any song: every value in the filters, numbers that follow the filters, songs left out with a right click, suggestions as you type, saved filters - and tags of your own.
- Soft changes between visuals: Morph, Melt, a soft fade, a zoom, a slide or a flash on the beat, over 0.5 to 8 seconds.
- More for a song's video: the cover all the way through (also as a spinning record), the lyrics word by word, in places of their own and coming in on the beat; Cover Galaxy, Title Smoke, Lyric Tunnel, Album Kaleido and Cover Echo draw the cover, the title and the words into the picture.
Added
- Guests in your network (owner's request): in Live Play, Let guests see the live playlist gives everyone on the same network (the party's Wi-Fi) a page of their own on the phone - the song that plays, what comes next, what played. The host chooses whether guests only look or change it: move songs up and down, take them out, and add songs from the library next or at the end. The way in is a QR code and an address with a random part; New address makes another at any time and the old one leads nowhere. The screen shows the QR code, the address, both or nothing - as a card in Live Play and in Now playing, and Show it big over everything. The access is a small server of its own on port 8770 that serves only the guests' page, the playlist with titles and covers and, in change mode, the library's titles - no audio, no files, no paths; the player itself still answers this computer only (
plenio/player/guest.py,guest_page.html; the page carries out the wishes,frontend/src/player/guests.ts; QR codes by an encoder of Plenio's own,qr.ts, checked against OpenCV's decoder for every version it makes).--guests-hostsets where it listens. - Every field of the brief on a song's page (owner's request): Details > The song lists the work mode, template, genre, mood, tempo, key, meter, length and target length, vocals, language, voice, lyrics theme (or melody and lead instrument), a cover's harmony and closeness sliders, the arrangement, genre closeness and lines under the singing - a field left empty with the brief's default and (default), or open - the writer chose; a template's value with (from the template).
- The player's version at the top of Settings (owner's request), and a note when the page open is from another version.
- In the making: videos and shared players in the background (owner's request): Make the video and Make the player put them in a queue - each kind one after the other, a video and a shared player side by side - and In the making in the sidebar lists them with how far each is, Stop, and the files when done. Videos are drawn by the page and go on with it in the background (at full speed: the drawing pauses no longer wait for the browser's timers, which it holds back in a background tab; the page asks before it closes while one is made); shared players are made by the player and go on when the page closes (
GET /api/package-jobs,POST /api/package/<job>/cancel). - Large shared players open, also on a phone (owner's request: a 2 GB file on a smartphone): the file is laid out to be read from the top (
plenio.portable/2) - the songs' list and the player first, which start at once, then each song's page, the covers and the sound in pieces the page turns into files of the browser's own and lets go. Measured on 365 songs (2.6 GB): the list shows after 0.7 s, every song has arrived after 9-15 s and plays as soon as its sound is there, and the page holds about 150 MB afterwards (the first format: 9 GB while opening, 6.9 GB after). A browser holds an HTML file in memory while it reads it - 2.8 GB for a few seconds for that file - so a large share can be made in parts of at most 250 MB, 500 MB or 1 GB, each a whole player of its songs, sharing the listener's favourites and playlists (a 500 MB part opens with under 600 MB). The file is written as it is made (it was put together in memory: 2.6 GB took as much), and the MP3s are made in up to eight threads (365 songs in about five minutes instead of twenty). - Soft changes between visuals, to choose (owner's request: not a sudden start - and one that brings both together, organic and soft whatever the kind): both visuals play on while they change, over 0.5-8 seconds (3 by default) - Morph (both together, each as bright as the other half way, melting into one another), Melt (soft drifting blots, like ink in water), Soft fade, Zoom through, Slide (behind a soft edge), Flash on the beat, A different one each time, or Cut; every soft change swirls the frame before over the new one, so they flow into each other like smoke. Between Plenio Drop visuals the glide takes as long, and a Drop visual that starts after another kind starts from black (it showed an old picture). In the visuals' settings and in a song's video (
visuals/mixer.ts). - More for a song's video (owner's request: the cover always, more lively text animations in time with the music and in places of their own, more MilkDrop-like visuals with the text and the cover in them): the cover all the way through - in a corner, at a side, in the middle or drifting slowly, its size, rounded/square/round or a spinning record, pulsing with the beat; the lyrics word by word (the word sung now large, popping in on a little tilt, the ones before it smaller above), subtitles and karaoke where you want them (bottom, middle, top, or a new place every line, never the one before, slightly tilted), each line coming in with a fade, a rise, a zoom, a drop with a bounce, a blur, a wipe or a glitch (or a different one every line), on the beat (in one beat of the song's tempo, the lyrics pulsing with it); into the visual: the title at the start, the line sung and the cover drawn into a Plenio Drop visual's smoke, melting and swirling with it (a glow over a classic one).
- The song in Plenio Drop (owner's request): presets draw pictures (
sprites) into the feedback - the song'scover, itstitle, thelineand thewordsung - with the new formula namessongtime,line_on,line_age; five new presets use them, in the player and in videos: Cover Galaxy, Title Smoke, Lyric Tunnel, Album Kaleido, Cover Echo (21 presets). The guide has a section on pictures. - The party on the big screen (owner's request): Show the visual in Live Play opens the visual on the whole screen; the guests' QR code over it is a choice of its own (on by default), with its corner and size (large for a room to scan) - in Live Play's guests' settings and in the visuals' settings.
- The player in your network, and ComfyUI (owner's request: a simple link to the whole player from the home network, shown in the player; ComfyUI in the browser when it runs): Settings > In your network opens the whole player to every device in the home network by a link with a code of its own (a QR code) - the browser that opened it once comes in by the address alone, nobody else does, and New link shuts every other one out. ComfyUI too, by a second link, when it runs on the computer (it need not listen on the network itself; its WebSocket goes through; Open in ComfyUI works from there). From the network the player does all but choose its folders, stop, open folders on the computer's screen and delete songs for good. Two small gateways of the player's own on ports 8780-8789; the player still answers the computer only (
plenio/player/network.py,--network-host). ComfyUI ↗ in the sidebar op...
Plenio Music Production System
Changelog
All notable changes of the current version and the one before. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 0.7.0): the changelog of 0.8.0 (0.7.0), the changelog of 0.7.0 (0.6.1), the changelog of 0.6.0 (0.5.0 and 0.6.0), the changelog of 0.4.4 (0.2.0 to 0.4.4) and the GitHub releases.
1.0.0 - 2026-10-16
Plenio 1.0. The whole way from an idea to a song people listen to, on your own computer and free: a local language model writes the song (or you compose it yourself), YuE2 or MiniMax Music 3 performs it, Plenio masters it and exports it with its tags, its lyrics as subtitles and its whole project - and now the Plenio Player plays it, shows it and shares it. After fourteen published versions in three weeks, the templates, the nodes and the release record have settled: 1.0.0 is the version to build on, and saved workflows and release records keep working in every 1.x version. (0.8.1 was not published; everything it had is in 1.0.0.)
- The Plenio Player: your songs in the browser, without ComfyUI - one click from ComfyUI, search, a page per song, the lyrics lit up as they are sung and the sheet music following the music, playlists, Winamp-style visuals.
- Plenio Drop: MilkDrop-style visuals of Plenio's own on the graphics card - 16 presets, one made up anew each time, and presets of your own as a short JSON file.
- Live Play: a playlist for a party that you change while it plays; the songs you make in ComfyUI join it as soon as they are exported.
- A song as a video: an MP4 of the visual with the lyrics (subtitles or karaoke), the notation following the music and a title card - Full HD, 4K, square or upright for Shorts.
- Share your songs as a player: one HTML file with the player and the songs as MP3 - anyone double-clicks it and listens, with lyrics, notation and visuals, no install.
- Lyrics subtitles timed by listening, tags filled from the brief with variables, seeds with one plain switch, wider briefs and short tooltips beside the node.
Added
- Plenio Player (owner's request): a local website for the songs you made -
python plenio_player.py(orpython -m plenio.player) with ComfyUI's Python opens it athttp://127.0.0.1:8765/, ComfyUI need not run. It reads every release record below ComfyUI's output folder (--folderfor others); playlists, favourites, play counts and settings live in~/.plenio/player.- Library: a featured song, search over titles, lyrics, genres, moods and briefs with field filters (
genre:jazz,bpm:>110,key:Am,model:yue2,lang:german,is:fav,has:pdf,"phrases",-word...), filter chips for the common genres, moods, models, languages and creative modes, eight sorts, grid or list; songs without a cover get artwork from their colours. - A song's page: it follows the music (the next song's page on the same tab, Back unchanged); the lyrics (click a line to hear it, the line sung now stays in view), the notation following the music (the line of music sounding now stays in view, also after a jump; the cursor at the notes sounding - at the bar's chord only in a bar with no note, one note or only a rest; click a note to jump), the sheet music PDF, every detail (the brief, model and writer, loudness, the seeds with a copy button, the tags, the cover's prompt), all files to download, the song's other takes and songs alike.
- Now playing: Stage, Lyrics (karaoke, syllable by syllable), Notation (the notes sounding light up, the sheet scrolls along) and Visual (the visual full screen, the lyrics as subtitles, the controls fading away); the sections as chips to jump to; the waveform as the seek bar with the sections and, under the mouse, the line sung there; a title card per song. Crossfades between songs, A/B with the unmastered take (in step, no gap), speed 0.75-1.25× keeping the pitch, resume where you stopped, the system's media keys.
- Visuals after Winamp, MilkDrop and AVS: 13 visuals (Classic Bars, Oscilloscope, Stereo Vectorscope, Radial Bloom, Feedback Tunnel, Hyperspace, Plasma, Inferno, Kaleidoscope, Beat Fountain, Spectrum Ridges, Ripples, Retro Grid) drawn from the spectrum, the waveform, the stereo image and the beats. Modes: match the music (by genre, mood and tempo), random from the visuals you tick, cycle, fixed; a visual of its own per song and per playlist (the song's wins, then the playlist's); a change with every song, at every section, every few seconds or when the music drops in; five colour looks and a sensitivity.
- Plenio Drop (owner's request: visuals like Winamp's MilkDrop, made anew): a renderer of Plenio's own on the graphics card (WebGL2) with MilkDrop's feedback loop - every frame draws the last one again, zoomed, turned, bent by one of six patterns (swirl, waves, tunnel, kaleidoscope, ripple), fading - and the music on top (waves, shapes, motion vectors), then echo, mirrors and colour effects. 16 presets (Nebula Swirl, Star Gate, Kaleido Bloom, Shockwave, Ink in Water ...) and Drop · Random, a new one each time; a change of preset glides, the picture stays. They are visuals like the others (same modes, per song, per playlist, all/none per group); a quality setting (Fast, Balanced, Sharp); 60 frames a second on an ordinary graphics card, the same speed at any frame rate.
- Presets of your own (owner's request: a format simple to understand and well documented): a preset is a short JSON file of numbers and small formulas (
"zoom": "1.01 + 0.02 * bass"), read by the player's own calculator - never run as script, so a shared preset can only draw. Put it in~/.plenio/player/visuals; Edit a copy saves the visual that plays there to change; a saved file changes on screen within three seconds; a mistake is shown with where and why. Guide with every parameter, the music's names, the functions and recipes: Plenio Drop: visuals of your own. - The visual on the whole screen: Shift+F, a double-click on the visual, full screen in the visuals' settings, or the button on the bar's small visual.
- Several folders, and other music (owner's request): Settings > Songs lists the folders the player reads; Add a folder… chooses one with a folder browser, × stops reading one, and they are kept with the player (
library.json), also when ComfyUI starts it. Per folder, also other music plays the audio files not made with Plenio (FLAC, MP3, WAV, OGG, Opus, M4A) - clearly marked (other music on the card and the page, the filter Made with,is:other), with what their files have: title, artist, album, genre and year from the tags, the embedded or the folder's cover, the lyrics from the tags, and timed lyrics word by word from an.lrcbeside the file. No notation, brief or Open in ComfyUI - that needs a release record. A Plenio song's files (audio, unmastered take, stems) always stay its own. - One click from ComfyUI (owner's request): Plenio Player in ComfyUI's action bar beside Run, in a new Plenio menu and the command palette, and ▶ Open in the Plenio Player on Export Release (at the song just exported). ComfyUI does not serve the player: it finds the one running on this computer or starts it - as a program of its own, which keeps running when ComfyUI stops (
POST /plenio/player/open). Without ComfyUI: double-clickPlenio Player.bat(plenio_player.sh). - Open in ComfyUI (owner's request): a song's page opens the song's workflow in ComfyUI to work on it - its brief, lyrics, score and settings, as Continue a Plenio song restores them; the record goes from the player to the ComfyUI tab.
- Settings that last, and say so (owner's request): everything the page remembers is kept by the player on this computer (
~/.plenio/player/state.json), also the last view of Now playing, a song page's last tab and the library's search and filter chips (per view, with a Filtered row and Reset filters; the library keeps its place in the list when you come back), saved half a second after a change and when the page closes. A Settings page says what is kept and where, when it was saved, and offers a backup, a restore and a fresh start; it also shows where Open in ComfyUI goes and has Stop the player. - The song's page easier to find: a click on a card opens it (▶ plays), ⓘ in the bar and in Now playing, the key I.
- Remove a song (owner's request): 👎 Remove… on its page or in its menu lists the song's files and moves them to the retired songs (
_retiredin the library folder, which the player does not read; move them back to have the song again) or deletes them for good after asking once more. The song leaves the queue, the playlists and the favourites; only the files in the song's own folder are touched. - Live Play (owner's request: make songs at a party and they play): a live playlist that plays while you change it - drag to reorder, play now, play next, take out, add from the library, save as a playlist - and the songs ComfyUI makes join it as soon as Export Release has written them: next, at the end or anywhere at random (or only announced). A message and a red new mark show each arrival. At its end it starts again from the top or waits for the next new song and plays it at once. Start it with the queue, a playlist, the newest songs or empty; it stays on when the page is opened again (`GET /api/new...
- Library: a featured song, search over titles, lyrics, genres, moods and briefs with field filters (
Plenio Music Production System
Changelog
All notable changes of the current version and the one before. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 0.6.1): the changelog of 0.7.0 (0.6.1), the changelog of 0.6.0 (0.5.0 and 0.6.0), the changelog of 0.4.4 (0.2.0 to 0.4.4) and the GitHub releases.
0.8.0 - 2026-10-15
The song's FLAC carries its whole project: drop it onto ComfyUI - or open it in Continue a Plenio song - and you are back in the workflow it was made with. A free cover gets a new melody over the writer's chords: below song flow closeness 80 the melody follows the new harmony - from 50 the notes that clash move, below 50 Plenio writes the melody anew in its old rhythm. The writer sees every note of a bar, the harmony guard knows more clashes, and motifs move along the key's scale.
Added
- The project inside the FLAC (GitHub issue #9): Export Release's new project in FLAC (on by default) writes the release record - the workflow, the approved Song Sheets, score, lyrics, style, seeds and settings - into the song's FLAC, gzip-compressed in a metadata block of its own that players skip (a FLAC APPLICATION block, id
PLNO, layoutplenio.project/1): about 25 KB for a typical record of 300 KB (at most 35 KB in 856 songs measured). File > Continue a Plenio song… opens a song from its FLAC (Open a record or FLAC…), and so does a FLAC dropped onto the empty canvas - the browser reads the record from the file's metadata, nothing is uploaded; a FLAC without a record, one dropped onto a node or with Shift held goes to ComfyUI as before. The.plenio.jsonnext to the song stays. A file cannot hold its own hash: the record lists a FLAC that carries it with the size and SHA-256 it has without the record ("project": "embedded"), so the copy in the FLAC and the.plenio.jsonare the same record, and two renders with the same audio and tags list the same hash; every FLAC entry also hasaudio_md5, the MD5 of the decoded audio from the file's STREAMINFO. Secrets stay redacted as in the record; turn the option off for files you share without their making-of (ComfyUI's--disable-metadataturns it off too).
Changed
- A cover's melody follows the new chords (owner's decision): below song flow closeness 80 the melody no longer stays frozen while the writer re-harmonises. From 50 a melody note that clashes with a new chord moves onto it (the nearest chord tone on a strong beat or held for a beat, a step otherwise); below 50 Plenio writes the melody anew over the chords - chord tones on the accents, small steps, phrases that end on a chord tone, near the old line at 49 and freer down to 0 (the arrangement seed picks the phrase shape). A sung melody keeps its rhythm, so its syllables stay on their notes; an instrumental's lead line may also get new rhythms below 45 (from 20 its first bar keeps its rhythm). The lower the closeness, the less the old melody holds the writer's chords back - at 20 they win nearly everywhere. The form always stays; from 80, and in songs, the melody stays as before.
- The writer sees the whole bar's melody: the score table of Compose Arrangement and the re-ask showed only the notes on beats 1 and 3, while the harmony guard weighs every note of the bar - now every note on a beat or an eighth long is shown, those on a strong beat marked (
E* G A* B). - More clashes recognised: the harmony guard also rejects a melody note a half step under a chord's major seventh (Bb against Cmaj7), the #4 beside a chord's fifth (F# over C) and, on a strong beat or held, a minor third over a major triad - blues, rock and metal keep their blue third as a short passing note, and over a dominant seventh chord (the blues' I7) also held. The instrument lines follow the same rules.
- Motifs move along the key's scale: a motif figure moved onto another chord keeps its scale steps (C E G over C becomes A C E over Am - before, it moved by semitones and sang A C# E), takes the chord's own tone where the chord alters the scale (G# over E in A minor), and no motif, line or countermelody note clashes on beats 2 and 4 any more.
- Rests in the notation: the score editor and the sheet music draw a rest that runs over the middle of an even bar as two (
c2z6z6z2instead of a dotted half rest hiding beat 3). The score YuE2 reads keeps its own way of writing rests.
0.7.0 - 2026-10-12
More creative modes, no key change unless you ask for one, and instrumentals with more sections to vary.
Added
- Seven new creative modes (owner's request), so the arrangement list runs from simple to rich: unplugged (intimate and acoustic - fingerpicked broken chords, soft pads, low energy), call and response (the instruments answer the melody in the gaps between its phrases, the same answer in every chorus), signature motif (one short figure opens the song, returns in every chorus and closes it - Plenio keeps the plan's first figure in every section that plays it, as a mode file's new
motif: onesays), hypnotic (one riff or arpeggio over few chords, changing little by little - trance, minimal, krautrock), breakdown (full sections, a drop to almost nothing, a build into a big final section), jazz colours (seventh chords throughout, ii-V turns before a section changes, a mellow countermelody and a solo) and key change (standard plus one lift of the final chorus by a half or whole step, led in by chords). The list is ordered from standard, sterile and unplugged to jazz colours, fantasy and key change. - The arrangement field's tooltip (Song Brief and Cover Brief) lists every mode with what it does - your own mode files too.
- Checked with a real writer model (Qwen 3.5 9B, held to the plan's format) on two sung songs and two instrumentals of the owner's demos, every mode (52 plans, October 2026): no key change in the twelve modes that keep the key; key change lifted the final section (or the last two) in all four songs; and the modes keep their character - sterile silence and pads at energy 1-3, unplugged broken chords at 2-3, breakdown its drop to energy 1 before the finale, dramatic a rising arc, hypnotic one riff or arpeggio, jazz colours new seventh chords in every section, signature motif and call and response one figure for the whole song (Plenio keeps the plan's first figure in every section that plays it - the writer had varied it).
Changed
- No key change but in the mode key change (owner's request): the writer's plans lifted the key in nearly every song - with standard in all 80 sung songs of the owner's demos, mostly a half step in the last chorus - and it rarely suited the song. Every other mode now keeps the key (standard, varied, fantasy, many instruments and dramatic allowed a lift before; fantasy also a key change in the bridge), their texts no longer suggest one, and the arrangement prompt says that 0 is the right key shift for almost every section. A plan that asks for a lift anyway keeps the key (the plan's format allows no other value).
- Instrumental songs get more sections (owner's request): YuE2 planned 1-3 sections in 44 % of the owner's 110 instrumental demos - mostly an intro and one interlude of 50-120 bars - although its planner read eight section tags, so the arrangement had one or two sections to vary. prepare from brief (Score Tools) now splits a section of more than 16 bars into parts of 8 bars (16 when it is longer than 48) at the nearest barline no melody note is held across, and names them by their music: the first part keeps the section's name (an outro its last part), a part that repeats an earlier one takes its name, a part with new music the next of verse, chorus, bridge, break, solo, interlude. Only section starts are added - the notes stay. On the owner's 110 instrumental scores: no score with fewer than 4 sections (before: 48), most with 6 to 11, notes, chords and length unchanged in every one.
- standard, varied, fantasy, sterile, many instruments and dramatic keep their names (saved workflows go on working); their descriptions say more clearly what they do.
Plenio Music Production System
Changelog
All notable changes of the current version and the one before. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 0.6.0): the changelog of 0.6.0 (0.5.0 and 0.6.0), the changelog of 0.4.4 (0.2.0 to 0.4.4) and the GitHub releases.
0.7.0 - 2026-10-12
More creative modes, no key change unless you ask for one, and instrumentals with more sections to vary.
Added
- Seven new creative modes (owner's request), so the arrangement list runs from simple to rich: unplugged (intimate and acoustic - fingerpicked broken chords, soft pads, low energy), call and response (the instruments answer the melody in the gaps between its phrases, the same answer in every chorus), signature motif (one short figure opens the song, returns in every chorus and closes it - Plenio keeps the plan's first figure in every section that plays it, as a mode file's new
motif: onesays), hypnotic (one riff or arpeggio over few chords, changing little by little - trance, minimal, krautrock), breakdown (full sections, a drop to almost nothing, a build into a big final section), jazz colours (seventh chords throughout, ii-V turns before a section changes, a mellow countermelody and a solo) and key change (standard plus one lift of the final chorus by a half or whole step, led in by chords). The list is ordered from standard, sterile and unplugged to jazz colours, fantasy and key change. - The arrangement field's tooltip (Song Brief and Cover Brief) lists every mode with what it does - your own mode files too.
- Checked with a real writer model (Qwen 3.5 9B, held to the plan's format) on two sung songs and two instrumentals of the owner's demos, every mode (52 plans, October 2026): no key change in the twelve modes that keep the key; key change lifted the final section (or the last two) in all four songs; and the modes keep their character - sterile silence and pads at energy 1-3, unplugged broken chords at 2-3, breakdown its drop to energy 1 before the finale, dramatic a rising arc, hypnotic one riff or arpeggio, jazz colours new seventh chords in every section, signature motif and call and response one figure for the whole song (Plenio keeps the plan's first figure in every section that plays it - the writer had varied it).
Changed
- No key change but in the mode key change (owner's request): the writer's plans lifted the key in nearly every song - with standard in all 80 sung songs of the owner's demos, mostly a half step in the last chorus - and it rarely suited the song. Every other mode now keeps the key (standard, varied, fantasy, many instruments and dramatic allowed a lift before; fantasy also a key change in the bridge), their texts no longer suggest one, and the arrangement prompt says that 0 is the right key shift for almost every section. A plan that asks for a lift anyway keeps the key (the plan's format allows no other value).
- Instrumental songs get more sections (owner's request): YuE2 planned 1-3 sections in 44 % of the owner's 110 instrumental demos - mostly an intro and one interlude of 50-120 bars - although its planner read eight section tags, so the arrangement had one or two sections to vary. prepare from brief (Score Tools) now splits a section of more than 16 bars into parts of 8 bars (16 when it is longer than 48) at the nearest barline no melody note is held across, and names them by their music: the first part keeps the section's name (an outro its last part), a part that repeats an earlier one takes its name, a part with new music the next of verse, chorus, bridge, break, solo, interlude. Only section starts are added - the notes stay. On the owner's 110 instrumental scores: no score with fewer than 4 sections (before: 48), most with 6 to 11, notes, chords and length unchanged in every one.
- standard, varied, fantasy, sterile, many instruments and dramatic keep their names (saved workflows go on working); their descriptions say more clearly what they do.
0.6.1 - 2026-10-11
Bugfixes from GitHub issues: Stems load on ComfyUI Desktop, and GGUF language models kept in text_encoders can write the songs.
Changed
- GGUF language models in
text_encoders(GitHub issue): Writer Choice and Local LLM also list the GGUF language models in ComfyUI'stext_encodersfolder (and the oldclip, with theirextra_model_paths.yamllines) asmodels/text_encoders · …- where ComfyUI-GGUF's CLIPLoaderGGUF finds them; before, they were offered only after a[llm.folders]line inconfig.toml. Plenio reads each file's GGUF header and lists only what llama.cpp can let write: the T5, UMT5 and CLIP encoders of image and video models and the parts ComfyUI-GGUF converts without a tokenizer (Flux 2's Mistral encoder) stay out. A folder also named in[llm.folders]keeps its own label, and its files are not listed twice.
Fixed
- Stems on ComfyUI Desktop (GitHub issue): Load Audio Model refused the released BS-RoFormer checkpoint - does not match the BS-RoFormer architecture: Unexpected key(s) in state_dict: ...rotary_embed.freqs - wherever the Python package
rotary-embedding-torchis not installed (ComfyUI Desktop ships without it; other custom nodes often bring it, so it did not show here). Plenio's stand-in for the package kept no frequencies, which the checkpoint carries, and turned the two halves of each head instead of neighbouring pairs, as the package does. It is now the package's rotation rebuilt: bit-identical in a test againstrotary-embedding-torch, and the stems of a real song separated with the released checkpoint are bit-identical with either. A package version that keeps the standard frequencies out of the weights no longer stops the checkpoint either.
Plenio Music Production System
Changelog
All notable changes of the current version and the one before. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 0.5.0): the changelog of 0.5.0 and the changelog of 0.4.4 and the GitHub releases.
0.6.1 - 2026-10-11
Bugfixes from GitHub issues: Stems load on ComfyUI Desktop, and GGUF language models kept in text_encoders can write the songs.
Changed
- GGUF language models in
text_encoders(GitHub issue): Writer Choice and Local LLM also list the GGUF language models in ComfyUI'stext_encodersfolder (and the oldclip, with theirextra_model_paths.yamllines) asmodels/text_encoders · …- where ComfyUI-GGUF's CLIPLoaderGGUF finds them; before, they were offered only after a[llm.folders]line inconfig.toml. Plenio reads each file's GGUF header and lists only what llama.cpp can let write: the T5, UMT5 and CLIP encoders of image and video models and the parts ComfyUI-GGUF converts without a tokenizer (Flux 2's Mistral encoder) stay out. A folder also named in[llm.folders]keeps its own label, and its files are not listed twice.
Fixed
- Stems on ComfyUI Desktop (GitHub issue): Load Audio Model refused the released BS-RoFormer checkpoint - does not match the BS-RoFormer architecture: Unexpected key(s) in state_dict: ...rotary_embed.freqs - wherever the Python package
rotary-embedding-torchis not installed (ComfyUI Desktop ships without it; other custom nodes often bring it, so it did not show here). Plenio's stand-in for the package kept no frequencies, which the checkpoint carries, and turned the two halves of each head instead of neighbouring pairs, as the package does. It is now the package's rotation rebuilt: bit-identical in a test againstrotary-embedding-torch, and the stems of a real song separated with the released checkpoint are bit-identical with either. A package version that keeps the standard frequencies out of the weights no longer stops the checkpoint either.
0.6.0 - 2026-10-11
Go on with a song where you stopped: its release record opens it again, in the workflow it was made with. The stems you save in the Stem Mixer stay with their song, covers of songs longer than 5:00 work on a 16 GB card, a Song Sheet document can always go back to automatic, the section tags go where the cursor is, and Plenio finds its model folders next to the ones of extra_model_paths.yaml.
Added
- Continue a song (owner's request): File > Continue a Plenio song… lists the release records of the output folder, newest first, with cover, date, length and version (search, listen, Open a record file… for another folder); dropping a
<name>.plenio.jsononto ComfyUI does the same - ComfyUI alone took it for a workflow and loaded nothing. The song opens in a new workflow tab in the workflow it was made with, and its title, style, lyrics and score go into the Song Sheets as manual: the next run keeps them, a new take seed gives new takes of the same song, the score editor changes it, Back to auto hands a document back to the writer or the plan. An approval stays valid while the documents are the approved ones. Records made before this version open in today's template of their kind with the song's settings and seeds, found by what each node is (Take seed, Song Sheet · Text ...) although the templates' node ids changed between versions, a block's settings on the block's own fields, blocks the song ran turned on; nodes today's template no longer has are named. Checked on the owner's 420 records: 418 open in their template, with at most three nodes unplaced; a workflow of one's own from before gives its documents to the open workflow's Song Sheets (guide). - The release record keeps the workflow the run was queued with (
workflow, secrets redacted like the prompt) - the lyrics lines placed by hand and the Guide notes included; the record schema knows it.
Changed
- Stems next to the song (owner's request): the strips marked save in the Stem Mixer are written by Export Release next to the song, into a folder named after it with
-stems- foroutput/plenio/My Song.flacthe stems areoutput/plenio/My Song-stems/drums.flac,vocals.flac... (a batch of takes:drums take 1.flac...), 24-bit FLAC with the song's tags and the title My Song (drums). The folder takes the song's number with it (My Song (2)-stems), so nothing is overwritten, and the release record lists every stem file. The templates need no change: the Stem Mixer's report already goes into the export. In a workflow without an Export Release that takes the mixer's report the stems go tooutput/plenio/stemsas before. - Section tags at the cursor (GitHub issue #3): the tag buttons under the lyrics editor insert the tag as its own line where the cursor is - after a blank line between sections; inside a line they break it there - and leave the cursor where the section's first line goes. Before you click into the text they append at the end, as before. A tag can be added more than once (a second [Verse]). New button [Instrumental]: a section without words between the sung ones.
- The style's length is a hint, not a limit (GitHub issue #3): YuE2's style aims at about 40 words - the target the writer is given. A longer style is used: above 60 words the sheet warns, only above 120 words is it an error. The messages now say so (a hint, not a limit: up to 120 are accepted); the error read keep it under 120 (target 40).
Fixed
- A manual document could not go back to automatic (GitHub issue #3): Use draft in the Song Sheet editor stayed greyed out while no draft was known - and the node computes no draft for a manual document, nor before its first run - so a text once made manual (or edited before the first run) stayed for good. The button is now Back to auto then: the text is discarded on Apply and the next run computes the document again (the writer, the plan or the transcription).
- Models beside the folders of
extra_model_paths.yaml(a user's report): the stem model in a newaudio_separationfolder next to the other model folders of anextra_model_paths.yamllocation was found only after it was copied into ComfyUI's ownmodelsfolder - ComfyUI searches a folder of such a location only when the file names it, and no one's file names Plenio's folders. Plenio now searches its own folders (audio_separation,audio_sr,LLM) beside every model folder ComfyUI knows; a folder made while ComfyUI runs counts after pressing R. ComfyUI's own folders (audio_encoders,diffusion_models...) keep ComfyUI's rule; when a model file the templates load lies in one without its line, the System Check names it and the line to add. - Covers of songs longer than 5:00 (owner's report): Transcribe Score refused a source of 5:15 on a 16 GB card ("needs a second pass, which does not fit this GPU"). That limit came from a measurement without inference mode; run as ComfyUI runs its nodes, SheetSage2 reads a 5:16 song - two 300-second windows - in under 40 s with about 2 GB of GPU memory, with the full beat grid for the lyrics. The node no longer refuses long sources.
- The release record's schema (
resources/schemas/record-1.schema.json) knows the sheet music (itssheet_musicentry, the PDF among the files) and the stems (role:sheet_music,stem): a record with sheet music did not pass it. All 408 records of the owner's songs pass it now.
Plenio Music Production System
Changelog
All notable changes of the current version and the one before. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 0.4.4): the changelog of 0.4.4 and the GitHub releases.
0.6.0 - 2026-10-11
Go on with a song where you stopped: its release record opens it again, in the workflow it was made with. The stems you save in the Stem Mixer stay with their song, covers of songs longer than 5:00 work on a 16 GB card, a Song Sheet document can always go back to automatic, the section tags go where the cursor is, and Plenio finds its model folders next to the ones of extra_model_paths.yaml.
Added
- Continue a song (owner's request): File > Continue a Plenio song… lists the release records of the output folder, newest first, with cover, date, length and version (search, listen, Open a record file… for another folder); dropping a
<name>.plenio.jsononto ComfyUI does the same - ComfyUI alone took it for a workflow and loaded nothing. The song opens in a new workflow tab in the workflow it was made with, and its title, style, lyrics and score go into the Song Sheets as manual: the next run keeps them, a new take seed gives new takes of the same song, the score editor changes it, Back to auto hands a document back to the writer or the plan. An approval stays valid while the documents are the approved ones. Records made before this version open in today's template of their kind with the song's settings and seeds, found by what each node is (Take seed, Song Sheet · Text ...) although the templates' node ids changed between versions, a block's settings on the block's own fields, blocks the song ran turned on; nodes today's template no longer has are named. Checked on the owner's 420 records: 418 open in their template, with at most three nodes unplaced; a workflow of one's own from before gives its documents to the open workflow's Song Sheets (guide). - The release record keeps the workflow the run was queued with (
workflow, secrets redacted like the prompt) - the lyrics lines placed by hand and the Guide notes included; the record schema knows it.
Changed
- Stems next to the song (owner's request): the strips marked save in the Stem Mixer are written by Export Release next to the song, into a folder named after it with
-stems- foroutput/plenio/My Song.flacthe stems areoutput/plenio/My Song-stems/drums.flac,vocals.flac... (a batch of takes:drums take 1.flac...), 24-bit FLAC with the song's tags and the title My Song (drums). The folder takes the song's number with it (My Song (2)-stems), so nothing is overwritten, and the release record lists every stem file. The templates need no change: the Stem Mixer's report already goes into the export. In a workflow without an Export Release that takes the mixer's report the stems go tooutput/plenio/stemsas before. - Section tags at the cursor (GitHub issue #3): the tag buttons under the lyrics editor insert the tag as its own line where the cursor is - after a blank line between sections; inside a line they break it there - and leave the cursor where the section's first line goes. Before you click into the text they append at the end, as before. A tag can be added more than once (a second [Verse]). New button [Instrumental]: a section without words between the sung ones.
- The style's length is a hint, not a limit (GitHub issue #3): YuE2's style aims at about 40 words - the target the writer is given. A longer style is used: above 60 words the sheet warns, only above 120 words is it an error. The messages now say so (a hint, not a limit: up to 120 are accepted); the error read keep it under 120 (target 40).
Fixed
- A manual document could not go back to automatic (GitHub issue #3): Use draft in the Song Sheet editor stayed greyed out while no draft was known - and the node computes no draft for a manual document, nor before its first run - so a text once made manual (or edited before the first run) stayed for good. The button is now Back to auto then: the text is discarded on Apply and the next run computes the document again (the writer, the plan or the transcription).
- Models beside the folders of
extra_model_paths.yaml(a user's report): the stem model in a newaudio_separationfolder next to the other model folders of anextra_model_paths.yamllocation was found only after it was copied into ComfyUI's ownmodelsfolder - ComfyUI searches a folder of such a location only when the file names it, and no one's file names Plenio's folders. Plenio now searches its own folders (audio_separation,audio_sr,LLM) beside every model folder ComfyUI knows; a folder made while ComfyUI runs counts after pressing R. ComfyUI's own folders (audio_encoders,diffusion_models...) keep ComfyUI's rule; when a model file the templates load lies in one without its line, the System Check names it and the line to add. - Covers of songs longer than 5:00 (owner's report): Transcribe Score refused a source of 5:15 on a 16 GB card ("needs a second pass, which does not fit this GPU"). That limit came from a measurement without inference mode; run as ComfyUI runs its nodes, SheetSage2 reads a 5:16 song - two 300-second windows - in under 40 s with about 2 GB of GPU memory, with the full beat grid for the lyrics. The node no longer refuses long sources.
- The release record's schema (
resources/schemas/record-1.schema.json) knows the sheet music (itssheet_musicentry, the PDF among the files) and the stems (role:sheet_music,stem): a record with sheet music did not pass it. All 408 records of the owner's songs pass it now.
0.5.0 - 2026-10-09
The writer model can plan the arrangement: creative modes for songs and covers - experimental, made for trying out - with closeness sliders, chords that carry the melody, instrument lines that leave room for the voice and key lifts that are led in. Your own local LLMs write songs and arrangements. New cover lyrics fit the melody line by line, covers keep their verses over long rests and are named after their source, and YuE2's song form follows the lyrics. Every export can bring its sheet music as a PDF - in four sizes, with the words where YuE2 sings them and no lyrics lost. Every field in the templates explains itself in a tooltip. Two new tutorials show the creative modes; the others were recorded again.
Added
Local language models as writers
- Local LLM (new node, Plenio/Text): one prompt in, one answer out, with the language models already on the machine - GGUF files from ComfyUI's
models/LLMfolder (andextra_model_paths.yaml), LM Studio's download folder, the Hugging Face cache (Unsloth Studio,llama-server -hf), llama.cpp's cache and GPT4All, or the models of a running LM Studio, Ollama, llama.cpp, vLLM, Jan, KoboldCpp, text-generation-webui, GPT4All or Unsloth Studio. One list; press R after adding a model. A GGUF file runs in a llama.cpp server started for the call (llama-serverfrom the PATH, Unsloth Studio, winget, Homebrew orPLENIO_LLAMA_SERVER; llama-cpp-python as the fallback): ComfyUI frees the GPU memory it needs first, and all of it is free again when the server stops. Thinking on/off with the thoughts on their own output, a fixed seed, context, keep loaded, system prompt, an optional JSON schema the model is held to while it writes (GGUF files, LM Studio, Ollama, vLLM), and an answer cache (reuse answers): the same request to the same model is answered fromuser/plenio/cache/llmwithout a call, also after a restart. No new Python packages, no stored keys (guide, ADR-0010). - Writer model (node Writer Choice, in every song template): one list of ComfyUI's text models (native Generate Text, Gemma 4 E4B by default) and every Local LLM model for Write Song and Arrange; a switch runs only the chosen writer, so the other model is never loaded and a GGUF writer needs no Gemma file. Both writers answer with up to 6144 tokens (room for a reasoning model's thoughts).
config.toml[llm]: the llama-server program, extra GGUF folders and servers, other apps on/off;PLENIO_LLAMA_SERVER,PLENIO_LLM_OTHER_APPS. The System Check lists the Local LLM models per source and the runtime for GGUF files.
Creative modes (experimental)
- arrangement in the Song Brief and the Cover Brief: off (default) leaves the music to the music model, as always; standard, varied, fantasy, sterile, many instruments and dramatic add their hints to the writing prompt and - in 1 · YuE2 · Song and 2 · YuE2 · Cover - let the writer model plan every section of YuE2's score: chords, what the instrument line plays (pad, arpeggio, riff, countermelody, solo, octave, motif, none), energy, key lifts and the tempo. The writer answers a small JSON plan, never notes: Plenio writes every note with the checked score operations, keeps the melody and the form, and checks the result (YuE2's parser, read back, the score editor, YuE2's context). A plan it cannot use leaves the score as it was, and Song Sheet · Score says why. Own modes are Markdown files in
user/plenio/arrangement(guide, ADR-0011). - Closeness sliders: genre closeness (songs: 100 strictly typical ... 0 any style), song flow closeness (covers: 100 exactly the original - no plan, no writer call - ... 0 only a hint) and lyrics closeness (new cover lyrics: 0 without the source's text ... 100 its meaning line by line; above 0 the source's lyrics are transcribed for the writer).
- **Compose ...
Plenio Music Production System
Changelog
All notable changes of the current version. Versions follow semantic versioning; published Registry versions are immutable. Earlier versions (0.2.0 to 0.4.4): the changelog of 0.4.4 and the GitHub releases.
0.5.0 - 2026-10-09
The writer model can plan the arrangement: creative modes for songs and covers - experimental, made for trying out - with closeness sliders, chords that carry the melody, instrument lines that leave room for the voice and key lifts that are led in. Your own local LLMs write songs and arrangements. New cover lyrics fit the melody line by line, covers keep their verses over long rests and are named after their source, and YuE2's song form follows the lyrics. Every export can bring its sheet music as a PDF - in four sizes, with the words where YuE2 sings them and no lyrics lost. Every field in the templates explains itself in a tooltip. Two new tutorials show the creative modes; the others were recorded again.
Added
Local language models as writers
- Local LLM (new node, Plenio/Text): one prompt in, one answer out, with the language models already on the machine - GGUF files from ComfyUI's
models/LLMfolder (andextra_model_paths.yaml), LM Studio's download folder, the Hugging Face cache (Unsloth Studio,llama-server -hf), llama.cpp's cache and GPT4All, or the models of a running LM Studio, Ollama, llama.cpp, vLLM, Jan, KoboldCpp, text-generation-webui, GPT4All or Unsloth Studio. One list; press R after adding a model. A GGUF file runs in a llama.cpp server started for the call (llama-serverfrom the PATH, Unsloth Studio, winget, Homebrew orPLENIO_LLAMA_SERVER; llama-cpp-python as the fallback): ComfyUI frees the GPU memory it needs first, and all of it is free again when the server stops. Thinking on/off with the thoughts on their own output, a fixed seed, context, keep loaded, system prompt, an optional JSON schema the model is held to while it writes (GGUF files, LM Studio, Ollama, vLLM), and an answer cache (reuse answers): the same request to the same model is answered fromuser/plenio/cache/llmwithout a call, also after a restart. No new Python packages, no stored keys (guide, ADR-0010). - Writer model (node Writer Choice, in every song template): one list of ComfyUI's text models (native Generate Text, Gemma 4 E4B by default) and every Local LLM model for Write Song and Arrange; a switch runs only the chosen writer, so the other model is never loaded and a GGUF writer needs no Gemma file. Both writers answer with up to 6144 tokens (room for a reasoning model's thoughts).
config.toml[llm]: the llama-server program, extra GGUF folders and servers, other apps on/off;PLENIO_LLAMA_SERVER,PLENIO_LLM_OTHER_APPS. The System Check lists the Local LLM models per source and the runtime for GGUF files.
Creative modes (experimental)
- arrangement in the Song Brief and the Cover Brief: off (default) leaves the music to the music model, as always; standard, varied, fantasy, sterile, many instruments and dramatic add their hints to the writing prompt and - in 1 · YuE2 · Song and 2 · YuE2 · Cover - let the writer model plan every section of YuE2's score: chords, what the instrument line plays (pad, arpeggio, riff, countermelody, solo, octave, motif, none), energy, key lifts and the tempo. The writer answers a small JSON plan, never notes: Plenio writes every note with the checked score operations, keeps the melody and the form, and checks the result (YuE2's parser, read back, the score editor, YuE2's context). A plan it cannot use leaves the score as it was, and Song Sheet · Score says why. Own modes are Markdown files in
user/plenio/arrangement(guide, ADR-0011). - Closeness sliders: genre closeness (songs: 100 strictly typical ... 0 any style), song flow closeness (covers: 100 exactly the original - no plan, no writer call - ... 0 only a hint) and lyrics closeness (new cover lyrics: 0 without the source's text ... 100 its meaning line by line; above 0 the source's lyrics are transcribed for the writer).
- Compose Arrangement and Apply Arrangement (new nodes, Plenio/Score) in the block Plenio · Arrange, with an arrangement seed for another plan of the same song. Apply's answer is lazy: with arrangement off nothing before it runs.
- Harmony guard: the writer's chords stand only where they belong to the section's key or to the genre's usual borrowings (eleven genre families) and carry the melody of the whole bar; elsewhere the nearest fitting chord is chosen and the sheet says why. A gate per section puts back a section that would clash more than before. Where the guard had to repair much, the writer is asked once more about those sections, and the better plan is used.
- Instrument lines that fit the voice: by default a line plays only where the voice rests - fills and answers, as in YuE2's own scores; the brief's lines under the singing (experimental) lets it sound under the voice too, calm, below it and never a minor second against it. Every line note follows the chord sounding at it.
- Key lifts that are led in and hold: a lift holds to the end of the song and is prepared by chords as in a textbook modulation (Cm - D7 -> Gm, Eb - F -> Gm), over the last bars before it as far as the melody allows.
- Harmony check in Apply Arrangement's summary, the Song Sheet's arrangement details and the release record: the melody on chord tones, accented clashes with a chord, clashes between voice and line, chords in the key - before and after. Song Sheet has a new optional input arrangement for it.
Lyrics and song form
- Lyrics that fit the melody (new node Fit Lyrics, three of them inside Write Song): new cover lyrics are first put in the score's song form, then every line is counted against the notes of its phrase. Lines that do not fit go back to the same writer - only those lines, with their syllable targets, at most twice; when the draft fits, no second writer call is made. The last round shortens lines one or two syllables too long with the contractions a singer uses (I'm, gonna); shorter lines are sung as a melisma. In study A2 new lyrics fit 97-100 % of their phrases with a local writer held to the schema (drafts 21-56 %).
- The song form follows the lyrics (new node Match Song Form inside YuE2 Plan): the plan's sung sections are put in the lyrics' order or named after them; only when neither works, YuE2 plans once more with the next seed and the better plan wins. A plan that sings two blocks in one section (the chorus and the outro) stays as it is, and an intro whose only note is the verse's first word is no sung intro. On the owner's 200 sung songs the sung form matched the lyrics in 52 % with YuE2's own plan, 96 % with this. Plenio now has 25 nodes.
- Syllable counter for English and German with its own rules (silent e, -ed, -le, German onsets ...), used by the lyrics checks, the writer's line targets and the score editor's lyrics layout.
Covers
- Covers keep their lyrics in place over long rests: a rest of 4 bars or more inside a sung section becomes an interlude section of its own, so YuE2 sings the section on instead of starting the next lyrics there (a verse lost, the chorus twice).
- Covers are named after their source: with an empty title the Cover Brief takes the source recording's title tag - else its file name - with
-cover. New optional input source on the Cover Brief (connected in 2 · YuE2 · Cover). - Whisper's subtitle inventions leave the lyrics: Transcribe Lyrics drops the sentences Whisper learnt from subtitled video ("Untertitel ...", "Vielen Dank fürs Zuschauen", "Amara.org", "Thanks for watching" ...) and reports them.
Sheet music
- Sheet music with every export (Export Release, new option sheet music: off, PDF (A4), PDF (Letter); A4 in the YuE2 templates): the final score - both voices, chord symbols, sections and the lyrics under the notes - as
<name>.pdfnext to the audio. An open ComfyUI page draws it with the score editor's Export notation… code - whichever workflow it shows - and Plenio saves it (a one-time token per export); a run that ended without an open page gets its PDF when the next page opens or comes back to the front (for up to 24 hours, while ComfyUI runs). Lyrics lines placed by hand come from the workflow the run was queued with. The release record lists the file. - Notation size: standard (default, about 3 bars a line and 4 pages a song), smaller, compact and large - in Export notation… and Export Release's new sheet music size.
- No lyrics lost in the notation: lyrics that no note sings follow the music as text; German lyrics are split by the German rules; a line over several phrases breaks at a word; a phrase with more syllables than notes lets neighbouring syllables share notes. On the owner's 237 sung songs the lines missing from the sheet music went from 589 to 0.
Help and videos
- Every field explains itself: every input and output of the Plenio nodes and of the 13 blueprints has a tooltip - the blueprints' (and two native fields' that ComfyUI ships without one) come from
locales/en/nodeDefs.json. - Tutorials 6 and 7: YuE2 · Song · Creative modes and YuE2 · Cover · Creative modes; tutorials 0-5 recorded again. The README opens with the new spot (Your idea. Your song. Your control.).
- Studies A1 (local LLMs as arrangers), G1, A2 and E7 (A1, G1, A2, E7).
...
Plenio Music Production System
Changelog
All notable changes are listed here. Versions follow semantic versioning; published Registry versions are immutable.
0.4.4 - 2026-10-03
The score editor plays like a small DAW: record a melody with a MIDI keyboard, hear every track in a sound of its own, export the sheet music as PDF - and for covers, the original recording and the sung pitch right under the notes.
Added
-
The source recording as a track (score editor, covers). The roll shows the source's waveform in a lane under the chord and lyrics lanes, bar by bar where the transcription puts it, and the transport plays it together with the notes on one clock - every bar as long as the recording's bar, so notes, metronome and recording stay together where the singer drifts, and an arranged cover's copied chorus plays the source's chorus again. hear: both / notes / source and A/B switch at once while it plays; a slider sets the source's level. 2 · YuE2 · Cover now connects the source to Song Sheet · Text too, so the words can be checked against the singing there.
-
DAW habits in the piano roll: a click on the empty grid in draw mode inserts a note of the last drawn length; Shift+drag pulls a frame in draw mode; Alt+drag copies notes; a note's end stops at the next note instead of being refused (Alt: over it); Ctrl+wheel and G / H zoom along the bars (never the browser page); a click on the keyboard plays its pitch, and drawn, grabbed and moved notes are heard (hear in the roll's toolbar); notes wide enough show their pitch (
E5). -
Transport: a click in the ruler (or on a section) while it plays jumps there; loop repeats the selected notes' bars (loop bars 12-13), else the cursor's section.
-
Sung Pitch (new node, covers): the source's vocals - separated with the Stems model - as a pitch curve, every 20 ms with the intonation (a YIN tracker in NumPy: on the example song it agrees with Praat in 93 % and with WORLD Harvest in 91 % of the sung frames). The score editor draws it as a pink curve over the notes, in the notes' octave when the transcription writes the melody an octave away from the singing (sung +8va). 2 · YuE2 · Cover runs it once per source and connects it to both sheets; without the separation model the node finishes anyway and the editor says why there is no curve. Plenio now has 19 nodes.
-
⇆ align (covers): the source recording moved against the bars by a beat or in 10 ms steps when the transcription's beat grid was off; waveform, playback, A/B and the sections' source times follow, and the shift is kept with the sheet.
-
Piano roll: quantize (Q: the selected notes' starts on the grid, all notes when none is selected; Shift+Q: the lengths too), vertical zoom (↕−/↕+, Shift+G / H, Alt+wheel) and a follow switch (the roll pages along with the playback, or stays where you look).
-
⌨ keys in the view tools: every key and mouse gesture of the score editor at a glance.
-
Inspector: chord symbols transposed from their panel (−1 / +1), also several at once; the note panel's pitch buttons move selected chord symbols too.
-
Recording with a MIDI keyboard (score editor, Web MIDI in Chrome and Edge). ● rec (Shift+R) records into the roll's draw into voice from the cursor after a count-in on the song's beats: the keys show as red notes while they are played, timed as they were heard (the audio output's latency is taken out); Space, ■ stop or rec again keep the take as one undo step, Esc throws it away. The take becomes one line on the quantize grid (keys pressed together: the highest; legato cut; a key let go a little early still reaches the next note), and replace or merge decide what happens to the notes that were there. step input writes a note of the step length at the cursor with every key (rest ▶ skips a step). 🎹 holds the keyboard choice (a keyboard plugged in later is found at once), hearing the keys, count-in, quantize, mode, muting the voice's old notes and the step length; a key held while its keyboard is unplugged ends there.
-
Export notation… (score editor): the sheet music as PDF (A4 or Letter, 300 dpi pages with page numbers), PNG, SVG or Print… (the browser's dialog, also a vector PDF) - both voices, chord symbols, sections and the lyrics, with the song's title. No new dependency: abcjs draws the pages, a small PDF writer packs them.
-
Sounds per track: ♫ sounds in the transport (and the DAW layout's track headers) gives Vocal, Instrument, Chords and Guide a sound each - Plain, Soft lead, Piano, Electric piano, Strings, Pad, Organ, Flute, Voice “ah”, Pluck, Synth lead, Bass, Mallets - synthesized in the browser (offline, no download), levelled to the same loudness; ▶ previews a track's sound. Drawn notes and the MIDI keys are heard in the draw into track's sound.
-
Presets of the basic settings: built in by kind of song (Pop, Ballad, Rock, Electronic, Acoustic, Jazz, Orchestral ...) and way of working (Composing with a MIDI keyboard, Cover: check the transcription, Cover: free arrangement); save current as preset… keeps your own in ComfyUI's user data (
plenio/score-editor-presets.json), so they are there in every browser. -
wave in the roll's toolbar (covers): the source's waveform lane can be hidden, like the sung pitch - for covers far from the original.
-
The sheet warns about an octave slip in the vocal melody (below E2 or above C7 as written) - a MIDI keyboard played an octave off; the text stays valid ABC.
-
README: new screenshots of the score editor - the DAW layout with the tracks' sounds, the sounds and presets, a page of the notation's PDF, a cover with its waveform and sung pitch, and a MIDI recording.
Changed
- Tutorials 1, 2 and 5: the score editor part recorded again - a tour of every area first, then the details: notes, playback, the tracks' sounds and presets, arranging, recording with a MIDI keyboard, the files with the notation's PDF, and for a cover the original under the notes, its sung pitch, wave and align. The promo follows.
- Esc in the score lets the selection go and no longer closes the editor (it closes it from outside the score, as before).
- Space plays and stops also right after a click on a transport button or checkbox (it toggled the checkbox instead); only text fields keep it.
- The transport's ▶ play replaces ▶ notes and ▶ source; with a source, hear chooses what plays.
- The project file also keeps the editor's settings - the tracks' sounds, the metronome, the cover's view of its source, the recording settings and the paper - and opening it restores them (the field is optional: older files and older versions work as before).
- Playback lasts to the end of the score (or of the loop's bars), also through bars of rests at the end; it stopped with the last note, and a loop over bars ending in rests came round early.
0.4.3 - 2026-10-03
The lyrics lane places lines by hand like notes, chord symbols move by semitones, and the cover template starts with the original lyrics on a pop style.
Added
-
Lyrics lines placed by hand (score editor). In the roll's lyrics lane a line is handled like a note: click to select it (Ctrl / Shift+click: more), drag to move it, drag its start or end to make it longer or shorter, Del deletes it, Ctrl+C / Ctrl+X / Ctrl+D copy, cut and duplicate, Ctrl+V pastes at the cursor; ← / → move by the grid. A section with a line placed by hand keeps every line's span, and the syllables take the notes inside it; a line moved past another is sung after it. The spans are kept with the sheet (node property
plenio_lyric_spans), follow arranged sections and bars, go into the project file and the MusicXML export, and each edit is one undo step. -
Transpose chord symbols: ↑ / ↓ in the roll and the palette's −1 / +1 move the selected chord symbols by a semitone - one or many, alone or together with selected notes, in one undo step. Each is spelled for the key where it stands (F + 1 in C major: F#); an octave leaves a chord symbol as it is.
Changed
- 2 · YuE2 · Cover starts with the style template pop/dance-pop-vocal, original lyrics (the language detected from the singing) and keep original chords; genre and mood are empty, so they come from the style template. App mode shows the original lyrics' language and voice.
Fixed
- Use template choices in the Cover Brief set vocals to sung and offered a length - words of the Song Brief. It now speaks the cover's: a sung style template turns an instrumental cover into one with the original lyrics (and leaves original or new lyrics alone), an instrumental one sets instrumental and its melody, and there is no length. Template fills names only the fields a cover takes from a template (no tempo, key, meter or language).
0.4.2 - 2026-10-02
The score editor arranges single bars the way it arranges sections, and the transport moves next to the piano roll.
Added
- Arrange single bars (score editor). The bar strip under the sections now selects one or more bars (click, Ctrl+click, Shift+click) and duplicates, copies, moves or deletes them, with buttons right above it, the keys of the section list (Ctrl+D, Ctrl+C, Ctrl+X, Ctrl+←/→, Del) and drag and drop (Alt copies). The Guide track, the lyrics and a cover's words follow, as they follow arranged sections; each arrangement is one undo step that says what it did (deleted bars 10-13).
Changed
- The transport (play, loop, metronome, voices, speed) sits between the piano roll and the notation, in reach of both (Cubase: the transport under the key editor); before, it was at the bottom of the editor.
- The navigator column scrolls as a whole: in the DAW layout the track panel and the lyrics box had squeezed the sections and the bar strip out of reach...