# Movie Musical Generator https://movie-musical-generator.skillsafe.ai/ Give it a premise - the unlikelier the better - and it returns a movie musical. First the picture: a title, a logline, the world, the cast, the act structure beat by beat, and a song list saying where every number falls, who sings it, what musical form it takes, what job it is doing and what is different once it is over. Then, for any number on that list, a full lyric sheet with the rhyme scheme it was written to, the syllable shape a melody would sit on, where the number turns, and what the camera is doing under it. Everything it emits is newly written. It does not reproduce the words of an existing song. ## What it is for Writing a musical starts with two questions that are easy to confuse: what is the picture, and what is each song *for*. Most tools answer the first and hand you songs as decoration. This one insists that every number in the list state a change - something the audience knows, believes, fears or wants afterwards that they did not before - and then checks, in your browser and for free, whether the model actually did that. ## The two stages, and why it is two The output is a treatment plus a song list plus a set of lyric sheets, and that does not fit inside one reply from any model. Worse, a model asked for more than it can produce does not truncate politely - it fails. So the work is split at the natural gate in the craft itself: 1. `task: treatment` - the picture and the running order. 2. `task: number` - one song from that running order, written properly. Stage two receives a plain-text digest of stage one and the single song-list row it is writing, so it stays consistent with a show it did not itself invent. A button on every row of the song list carries you from one to the other with the fields already filled in. ## The free lane Two checks run entirely in your browser, cost nothing, and run on every result. **Over a song list.** Does every number name a change, or does a row describe a mood and hope nobody notices? Are the slot numbers continuous? Has an act been left with no song in it, or fewer than three beats? Does a number sit in an act that does not exist? Do two numbers describe their job in the same words - a shared run of six or more? Do two share a title? Does a reprise answer anything that already happened? Do three numbers in a row go to the same voice? Does somebody sing who never made the cast list? Is a named character silent for the whole show? Does half the song list describe its function with the same two opening words? Does anything set up in act one come back later? **Over a lyric.** The rhyme scheme of each section, named by its letter pattern. Syllable counts line by line, and whether the lines in a section are singable against one another. A line that rhymes with itself. A refrain that comes back word for word. A section left with one line under its heading. All four craft notes present and in order. **And a third report, kept deliberately separate.** Thirteen grammatical constructions that a very large share of popular songwriting is built on, counted across the lyric. A hit says the line's *construction* is well travelled. It does not say the line already exists, and the app cannot make that second claim: there is no corpus of anybody's lyrics in this bundle, on purpose. The two findings are reported under different headings and in different words, because merging them would accuse a merely ordinary sentence of being a borrowed one. ## What it will not write, and how that is enforced The app writes original material. Four rules bind every character of every reply - lyric lines, titles, act beats, song titles, craft notes and prose alike. 1. **It will not reproduce the words of an existing song.** Not a chorus, not a couplet, not a memorable half-line, from a stage musical, a screen musical or the popular repertoire. Rewording is not a fix: a synonym swapped into a known chorus, a pronoun flipped, the clauses moved, a refrain built on a famous refrain's metrical skeleton - each hands back a line that belongs to somebody else. A title one word away from a famous title on the same subject is a collision, not an homage. 2. **Where a premise names a real film or a real musical, it writes an original show.** That request is legitimate and well served - it is most of what people ask for. What comes back is a new show riffing on the situation, never the real work's plot beats in order, character names, song titles, act breaks or curtain line, and never that structure with the nouns changed. 3. **It will not attribute anything to a real writer, composer, lyricist or performer.** No signature, no "as X sang", no character who is a thinly-veiled version of a named artist. Asked for a named person's style it writes to the **genre and the era** instead and says so: the conventions of a form are public, an individual writer's voice is not. A real name may appear only as a production or arrangement reference with no words attached. 4. **It will not build a show on a living person's private life.** A named living person becomes a fictional character in the same situation, under a different name, and the note says so. A historical figure with a long public record may appear by name, with every claim resting on that record and anything invented marked as imagined. A public role performed in public is not a private life, and refusing to mention a public figure at all would be an over-refusal rather than a safety measure. Each of those four is written to the same four-part shape - the thing, the route to the thing, a statement that taking the route counts exactly the same, and the defeater the honest case needs - because a probe lands on whichever rule is phrased more weakly than its neighbours. **Two layers, and only one of them generalises.** The rules above live in the system prompt, and that is the boundary. A small filter also runs over what you type before any credit is spent; it is a pre-flight filter, not the boundary, and it is the only layer that can stop a billed run. Its measured performance is published below rather than implied. ## Measured, not asserted - **Syllable counter: 97.8% exact** on a 46-word set (45/46). It is a spelling model, not a pronouncing dictionary; it is right on ordinary English and wrong on some of what English borrowed. The remaining miss is left in rather than tuned away. - **Rhyme detection reads spelling, not sound.** It under-reports a rhyme spelled two ways and over-reports an eye-rhyme. Said here rather than discovered by a user. - **Request guard: measured against a blind corpus, and reported PER CLASS.** An independent agent wrote the corpus without being allowed to read the guard, because a corpus written by whoever wrote the fix measures the fix rather than the guard. Scored once, on a set the guard had never seen: | What it is meant to stop | Caught | | --- | --- | | Reproducing the words of an existing work | 11/12 (92%) | | Sexual material involving a child (the floor) | 6/6 (100%) | | Extracting a work a piece at a time | 7/8 (88%) | | Invented claims about a real living person | 19/26 (73%) | | Output presented as a named person's work | 8/8 (100%) | | **Overall** | **51/60 (85%)** | | Legitimate requests wrongly refused | **0/60 (0%)** | A single aggregate would hide which sixth is missing, so there isn't one here. The weakest column is the one to read: **invented claims about real living people at 73%** is the guard's honest remaining exposure, and it is a different kind of risk from the rest - fabricated fact about an identifiable person rather than somebody else's words. The seven that got through mostly identify their subject by description rather than by name, which is the hardest case: no list of names can close it, and the app leans on the model's own knowledge there. Two earlier corpora scored 32% and 84%; the 32% was before the fixes and the 84% was against a corpus that had by then seen the guard, which is why neither is quoted as the headline. Three things that number does NOT mean. It is not the app's safety boundary - the system prompt is, and it has world knowledge this filter cannot. It is not stable against an attacker who reads this page. And the classes are not equally serious: the floor is absolute and sits at 100%, while the attribution column is a notice rather than a refusal, because writing in a named person's style is legitimate and refusing it would be the defect. - **Structural check, proved rather than assumed:** the checks are tested by taking a known-good show, breaking it one specific way, and requiring the right check to catch it - 18 such sabotages, plus controls that must NOT fire. ## The API Full worked examples in eight languages at https://movie-musical-generator.skillsafe.ai/api.html Base URL `https://api.skillsafe.ai/v1/app-api`. Every response is `{"data": ...}` or `{"error": {...}}`. Model `gpt-terra` (currently `gpt-5.6-terra`), owner markup 1000 bps. Input is a flat object of scalars - there is no nesting anywhere in it. Route on `task`. Every request carries `task`, `stance`, `stance_wants`, `stance_overrides`, `idiom`, `idiom_conventions`, `idiom_overrides`, `audience` and `avoid`. `task: treatment` adds `premise`, `acts` (2 or 3) and `numbers` (6, 8, 10 or 12). `task: number` adds `show_context`, `number_brief` and `length` (`short` or `full`). Output is plain labelled lines rather than JSON, because each line completes on its own: a reply cut at sixty per cent still yields sixty per cent of a show, where a truncated JSON object yields nothing. The treatment labels are TITLE, TAGLINE, LOGLINE, WORLD, SCORE, CAST, ACT, BEAT, SONG and NOTE. The number labels are NUMBER, PLACEMENT, FORM, JOB, SECTION, LYRIC, CRAFT and NOTE. Multi-part values are separated by a vertical bar in a fixed order. A whole-request refusal is a single REFUSED line - far rarer than a full result carrying a NOTE line that says what was changed and why. Three things about this platform that published samples get wrong, and that cost real debugging: the model's text lives at `data.output.output`, one level deeper than it looks; the SSE frame format is a named `event:` line followed by a `data:` line and a blank line, not a `{"type":"delta"}` object; and `/estimate` performs no body validation whatsoever, so a clean estimate proves the model binding and nothing at all about your input shape. ## Cost Free to open, free to read, free to run the bundled examples, free to run both browser-side checks. Generating a show or a lyric spends credits from your own SkillSafe balance. The price shown before a run is a reservation against the full output cap; the settled charge is usually far lower and is shown afterwards. ## Provenance Independent. Not affiliated with, endorsed by or derived from any other site, tool or service. The idea of a machine that writes a musical is old and belongs to nobody; every line of the implementation, the prompt, the checks and this page was written for this app.