ComfyUI Node

MultiLine Prompt

A glorified text box, and that's the point

By billwuhao·Created about a year ago·Updated about a year ago· 56
MultiLine Prompt
    • prompt
    lyricsAnalyze the input audio and generate 6 description variants. Each variant must be <200 characters. Follow these exact definitions: 1. `simplified`: Use only one most representative tag from the valid set. 2. `expanded`: Broaden valid tags to include related sub-genres/techniques. 3. `descriptive`: Convert tags into a sensory-rich sentence based *only on the sound*. DO NOT transcribe or reference the lyrics. 4. `synonyms`: Replace tags with equivalent terms (e.g., 'strings' → 'orchestral'). 5. `use_cases`: Suggest practical applications based on audio characteristics. 6. `analysis`: Analyze the audio's genre, instruments, tempo, and mood **based strictly on the audible musical elements**. Technical breakdown in specified format. * For the `instruments` list: **Only include instruments that are actually heard playing in the audio recording.** **Explicitly ignore any instruments merely mentioned or sung about in the lyrics.** Cover all audibly present instruments. 7. `lyrical_rap_check`: if the audio is lyrical rap **Strictly ignore any information derived solely from the lyrics when performing the analysis, especially for identifying instruments.** **Json Output Format:** {"simplified": <str>, "expanded": <str>, "descriptive": <str>, "synonyms": <str>, "use_cases": <str>, "analysis": { "genre": <str list>, "instruments": <str list>, "tempo": <str>, "mood": <str list>}, "lyrical_rap_check": <bool>}

    Let's be honest about this one: MultiLine Prompt is a text box that outputs what you type. The entire node is return (lyrics.strip(),). There's no model, no API, no processing - if you're looking for a prompt transformer, this isn't it.

    So why does it exist? Because of a ComfyUI ergonomics problem. The pack's Ke-Omni-R audio node has a prompt input that is forceInput - it can't accept typed text, only a wired connection. MultiLine Prompt is the text-source node you wire into it. And the clever part is the default: the lyrics field is pre-filled with the author's carefully engineered audio-analysis prompt - a long, exacting instruction that tells the Ke-Omni-R model to produce a strict JSON schema with six description variants (simplified, expanded, descriptive, synonyms, use_cases, an analysis object with genre/instruments/tempo/mood, plus a lyrical_rap_check flag), and explicitly warns the model to judge instruments from the sound, not from the lyrics.

    That prompt is the real product here. It's the difference between an audio model rambling about a song's lyrics and one that emits structured, training-ready tags - the same discipline the KB's lora-training.md preaches about caption quality. This node is a tidy way to store, edit, and reuse that prompt across workflows instead of re-typing it or burying it in a config file.

    How it works

    It has exactly one required input, lyrics (STRING, multiline, defaulted to the Ke-Omni-R analysis prompt), and one output, prompt (STRING). It strips whitespace and passes the text through unchanged. That's the whole mechanism - and the whole point: a stable, discoverable home for a big prompt you don't want to lose. Edit the lyrics field to change what Ke-Omni-R asks for; the prompt output feeds the audio node's forceInput socket.

    The inputs that matter

    • lyrics (multiline) - the text you want to carry. The default is the Ke-Omni-R JSON-analysis prompt; replace it with anything you like. The field name is a misnomer left over from the author's audio workflow - it's just text, and nothing about "lyrics" constrains what you put there.

    Output: prompt (STRING), wired into KeOmniRRun.prompt.

    Installing it

    Part of ComfyUI_Prompt-All-In-One (billwuhao). ComfyUI Manager → search Prompt-All-In-One, or clone + pip install -r requirements.txt, then restart. Under 🎤MW/MW-Prompt-All-In-One. No models, no dependencies beyond the pack itself.

    Where people get burned

    There's basically nothing to break - the only failure mode is expecting it to do something. People who grab it thinking it's a multi-line prompt generator are disappointed; it's a multi-line prompt carrier. The other thing to know: because it just passes text through, it's a perfectly good general-purpose multi-line text source for any node with a forceInput STRING socket - you're not locked into the audio workflow. If you only use the API nodes in this pack and never touch Ke-Omni-R, this node is dead weight; skip it. But for anyone running the local audio tagger, it's the piece that makes the setup copy-pasteable - and that single well-written default prompt is worth keeping around on its own.

    Category🎤MW/MW-Prompt-All-In-One

    Inputs (1)

    NameTypeDefaultDescription
    lyricsSTRINGAnalyze the input audio and generate 6 description variants. Each variant must be <200 characters. Follow these exact definitions: 1. `simplified`: Use only one most representative tag from the valid set. 2. `expanded`: Broaden valid tags to include related sub-genres/techniques. 3. `descriptive`: Convert tags into a sensory-rich sentence based *only on the sound*. DO NOT transcribe or reference the lyrics. 4. `synonyms`: Replace tags with equivalent terms (e.g., 'strings' → 'orchestral'). 5. `use_cases`: Suggest practical applications based on audio characteristics. 6. `analysis`: Analyze the audio's genre, instruments, tempo, and mood **based strictly on the audible musical elements**. Technical breakdown in specified format. * For the `instruments` list: **Only include instruments that are actually heard playing in the audio recording.** **Explicitly ignore any instruments merely mentioned or sung about in the lyrics.** Cover all audibly present instruments. 7. `lyrical_rap_check`: if the audio is lyrical rap **Strictly ignore any information derived solely from the lyrics when performing the analysis, especially for identifying instruments.** **Json Output Format:** {"simplified": <str>, "expanded": <str>, "descriptive": <str>, "synonyms": <str>, "use_cases": <str>, "analysis": { "genre": <str list>, "instruments": <str list>, "tempo": <str>, "mood": <str list>}, "lyrical_rap_check": <bool>}

    Outputs (1)

    NameTypeDescription
    promptSTRING