On this page

skryba lyrics

Write song lyrics to a form that is counted, not judged. A form says how many lines a stanza has and which of them rhyme, how many syllables each line may have, how many syllables of sound rhyming lines must share, which endings carry no rhyme of their own, how many rhymes a line holds inside itself, where its stresses fall and after how many syllables it pauses. check measures any lyrics against a form; compose has the selected model route write lyrics, measures every draft the same way, sends each draft back with the counts it broke, and returns only lyrics every count passes. How syllables and rhymes are counted is lyric form.

Invocation

skryba lyrics form list
skryba lyrics form show <NAME>
skryba lyrics form add <NAME> --scheme <SCHEME> --syllables-min <N> --syllables-max <N> --rhyme-syllables <N> [--internal-rhymes <N>] [--refuse-ending <ENDING>]... [--meter <MARKS>] [--caesura <N>]
skryba lyrics form edit <NAME> [--scheme <SCHEME>] [--syllables-min <N>] [--syllables-max <N>] [--rhyme-syllables <N>] [--internal-rhymes <N> | --no-internal-rhymes] [--refuse-ending <ENDING>... | --no-refused-endings] [--meter <MARKS> | --no-meter] [--caesura <N> | --no-caesura]
skryba lyrics form remove <NAME>
skryba lyrics check [<INPUT> | --draft <ID>] --form <NAME> [--keep <PHRASE>]... [--stanzas <N>]
skryba [--brama-url <URL> | --model-service-url <URL>] --model <MODEL> lyrics compose [<INPUT> | --draft <ID>] --form <NAME> [--style <NAME>] [--language <NAME>] [--keep <PHRASE>]... --stanzas <N> --candidates <N> --revisions <N> --temperature <T> [--output <PATH>] [--report <PATH>] [--json]
  • --scheme has one character per stanza line. Lines that share a capital letter rhyme with one another; - marks a line that rhymes with nothing. AABB, ABAB, AAAA (every line rhymes with every other) and AA-A are schemes. Every letter must name at least two lines.
  • --syllables-min and --syllables-max bound every line; the least cannot exceed the most. --rhyme-syllables is how many syllables of sound two rhyming lines share from the end, and never fewer than from the stressed syllable of the last word on. --internal-rhymes is how many pairs of the line's own words must rhyme the same way. Every one of these takes a number you state; --syllables-max, --rhyme-syllables, --internal-rhymes, --caesura, --stanzas and --candidates refuse 0.
  • --refuse-ending names an ending, in lowercase letters, that carries no rhyme: when both rhyming words end in it, it is removed and what is left must rhyme. Repeat it for each ending. On edit, the endings given replace the form's list; --no-refused-endings empties it and --no-internal-rhymes stops requiring internal rhymes.
  • --meter is the stress every line follows, one mark per syllable: / stressed, x unstressed (x/x/x/x/). Its length must lie between the syllable bounds. A word of two or more syllables is read stressed on its second-to-last syllable; a one-syllable word fits either mark. --caesura is how many syllables come before the pause every line makes: a word must end exactly there, so it must be below --syllables-min. On edit, --no-meter and --no-caesura stop requiring them. See lyric form.
  • INPUT is a file path, or - or nothing for stdin; --draft reads a retained draft. For check it is the lyrics; for compose it is the brief: what the lyrics are about, the story, the motifs.
  • --keep is a phrase that must appear in the lyrics word for word (case is ignored); repeat it for each. --stanzas is how many stanzas the lyrics hold.
  • compose takes --style and --language from the catalog, both preserve when omitted, so a register such as a melodic trap verse is a skryba style add away. --candidates is how many fresh drafts are written, --revisions how many times each draft is sent back with its broken counts (0 sends none back), and --temperature the sampling temperature of every draft, finite and at least zero.

Lyrics are read as stanzas separated by blank lines. A line written in square brackets, such as [REFREN], names a section and is not counted.

Effect on state

Forms are rows of the lyric_forms table of Skryba's fleet database, in schema skryba or the one SKRYBA_DATABASE_SCHEMA names. form add, edit and remove change that table; check and compose change nothing in it. compose writes the lyrics to --output when given and every draft with its measurements to --report when given, also when no draft met the form. No form command and no check reads a model credential; compose reads the model route's credential only after the form, style, language, brief and temperature were accepted.

Output

Every form command prints:

action    "list", "show", "add", "edit" or "remove"
store     stado://database/skryba/<SCHEMA>
form      {name, scheme, syllables_min, syllables_max, rhyme_syllables,
           internal_rhymes, refused_endings, meter, caesura, created_at,
           updated_at}; show, add, edit, remove; internal_rhymes, meter and
           caesura are absent when the form asks for none
forms     every form, alphabetical; list
changed   false when an edit changed nothing; edit only

check prints:

form        the form's name
scheme      its scheme
stanzas     [{lines: [{text, slot, syllables, stresses, unread, internal_rhymes: [Rhyme]}],
              rhymes: [{first_line, second_line, ...Rhyme}]}]
violations  one sentence per broken count, each quoting its line
passed      true when nothing broke
Rhyme       {first, second, ending, identical, syllables, required, rhymes}

slot is the line's scheme letter, stresses one mark per syllable as the line reads (/ stressed, x unstressed, ? a one-syllable word, which fits either), unread the characters no pronunciation rule reads (digits among them), first_line and second_line count from zero within the stanza, ending is the refused ending both words shared, syllables how many syllables of sound they share and required how many they had to. check exits 0 whether or not the lyrics pass: the verdict is passed.

compose prints the lyrics. With --json it prints the whole result instead, which is also what --report holds:

form      the form
profile   {style, style_instruction, language, language_instruction}
keep      the kept phrases
stanzas   the stanzas asked for
passed    true when a draft met the form
text      the lyrics; absent when no draft met the form
attempts  [{candidate, revision, text, check}] for every draft, in order

When no draft meets the form, compose exits 1 with the refusal below and prints no lyrics.

Example: a chorus that cannot end on a grammatical rhyme

skryba style add melodic-trap --instruction "Melodic trap: short phrases, pauses, natural stress, multi-syllable and internal rhymes, a closing punchline."
skryba lyrics form add chorus --scheme AABB --syllables-min 10 --syllables-max 10 --rhyme-syllables 2 --refuse-ending ami --refuse-ending ach
skryba lyrics check chorus.txt --form chorus --stanzas 2 --keep "żona w Miu Miu"
skryba --brama-url "$BRAMA_URL" --model <MODEL> lyrics compose brief.txt --form chorus --style melodic-trap --language pl --keep "Tsunami cashu" --keep "żona w Miu Miu" --stanzas 2 --candidates 3 --revisions 4 --temperature 1 --report chorus-report.json --output chorus.txt

A line ending głodu under a line ending w środku is refused by check: the two share one syllable of sound, u, because otku is not odu, and the form asks for two.

Refusals

  • lyric form name <NAME> is not valid: use lowercase letters, digits or hyphens, starting with a letter.
  • lyric form <NAME> needs --scheme <SCHEME>, and the same for --syllables-min <N>, --syllables-max <N> and --rhyme-syllables <N> — add.
  • lyric form <NAME> needs a scheme: one capital letter or - per line.
  • scheme <SCHEME> of lyric form <NAME> holds <CHARACTER>: use capital letters for rhyming lines and - for a free line.
  • scheme <SCHEME> of lyric form <NAME> gives <LETTER> to one line only, and a rhyme needs two: give it a second line or write -.
  • lyric form <NAME> asks for at least <MIN> and at most <MAX> syllables per line; the least cannot exceed the most.
  • refused ending <ENDING> of lyric form <NAME> is not valid: write the ending's lowercase letters, such as ami.
  • meter <METER> of lyric form <NAME> holds <CHARACTER>: write one / for a stressed syllable or x for an unstressed one per syllable, such as x/x/x/x/.
  • meter <METER> of lyric form <NAME> has <N> syllables, but its lines have <MIN> to <MAX>; every line follows the meter, so give it a length the lines may have.
  • lyric form <NAME> pauses after <N> syllables, but a line may have as few as <MIN>; the pause must fall inside every line.
  • lyric form <NAME> already exists in <STORE>; change it with `skryba lyrics form edit <NAME>` .
  • lyric form <NAME> is not in <STORE>; held forms: <NAMES>; add it with `skryba lyrics form add <NAME> --scheme <SCHEME> --syllables-min <N> --syllables-max <N> --rhyme-syllables <N>` — show, edit, remove, check, compose.
  • lyric form edit needs --scheme, --syllables-min, --syllables-max, --rhyme-syllables, --internal-rhymes, --no-internal-rhymes, --refuse-ending, --no-refused-endings, --meter, --no-meter, --caesura or --no-caesura; nothing was asked to change.
  • invalid value '0' for '--rhyme-syllables <RHYME_SYLLABLES>' and the same for the other counts that refuse zero — exit 2.
  • --temperature must be finite and nonnegative, not <T> — compose.
  • the brief is empty: say what the lyrics are about, in a file, on stdin or as a draft — compose.
  • <STYLE OR LANGUAGE> <NAME> is not in <STORE>; available ... — the catalog's own refusal, compose.
  • --brama-url (or BRAMA_URL) ... is required for this command and --model (or SKRYBA_MODEL) is required for this command — exit 2, compose.
  • no lyrics met form <FORM>: <N> draft(s) were measured (<C> fresh, each sent back up to <R> time(s)); the closest draft (fresh draft <I>, revision <J>) still broke <K>: <VIOLATIONS>; every draft and its measurements are in <REPORT> — or pass --report PATH to keep every draft and its measurements when no report was asked for.

Violations check reports

  • the lyrics hold no line of verse: write stanzas of lines separated by blank lines.
  • the lyrics hold <N> stanza(s); <ASKED> were asked for.
  • the required phrase <PHRASE> does not appear.
  • the stanza [<LINES>] holds <N> line(s); scheme <SCHEME> needs <M>.
  • line <LINE> has <N> syllables; form <FORM> allows <MIN> to <MAX>.
  • line <LINE> holds no word.
  • line <LINE> holds characters no Polish pronunciation rule reads (<CHARACTERS>), so its count is not certain: spell them as they are said.
  • <WORD> (line <LINE>) and <WORD> (line <LINE>) end on the same word, which is no rhyme.
  • <WORD> (line <LINE>) and <WORD> (line <LINE>) rhyme on <N> syllable(s); they need <M>.
  • <WORD> (line <LINE>) and <WORD> (line <LINE>) rhyme on <N> syllable(s) before their shared ending -<ENDING>, which carries no rhyme; they need <M>.
  • line <LINE> holds <N> rhyme(s) between its own words; form <FORM> needs <M>.
  • line <LINE> reads <STRESSES>, <N> syllables, against the meter <METER> of form <FORM>, which has <M>.
  • line <LINE> reads <STRESSES> against the meter <METER> of form <FORM>: <WORD> is stressed where the meter wants no stress; <WORD> leaves unstressed a syllable the meter stresses — one clause per word that breaks it.
  • line <LINE> has no word ending after its first <N> syllables; form <FORM> pauses there.

Maintained as part of the website-owned Skryba documentation corpus.