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]
--schemehas 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) andAA-Aare schemes. Every letter must name at least two lines.--syllables-minand--syllables-maxbound every line; the least cannot exceed the most.--rhyme-syllablesis 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-rhymesis 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,--stanzasand--candidatesrefuse0.--refuse-endingnames 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. Onedit, the endings given replace the form's list;--no-refused-endingsempties it and--no-internal-rhymesstops requiring internal rhymes.--meteris the stress every line follows, one mark per syllable:/stressed,xunstressed (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.--caesurais how many syllables come before the pause every line makes: a word must end exactly there, so it must be below--syllables-min. Onedit,--no-meterand--no-caesurastop requiring them. See lyric form.INPUTis a file path, or-or nothing for stdin;--draftreads a retained draft. Forcheckit is the lyrics; forcomposeit is the brief: what the lyrics are about, the story, the motifs.--keepis a phrase that must appear in the lyrics word for word (case is ignored); repeat it for each.--stanzasis how many stanzas the lyrics hold.composetakes--styleand--languagefrom the catalog, bothpreservewhen omitted, so a register such as a melodic trap verse is askryba style addaway.--candidatesis how many fresh drafts are written,--revisionshow many times each draft is sent back with its broken counts (0sends none back), and--temperaturethe 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 — exit2.--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 commandand--model (or SKRYBA_MODEL) is required for this command— exit2,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>— orpass --report PATH to keep every draft and its measurementswhen 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.