{"release_id":"01a1998d-9802-0000-b0f7-33a23307f4ed","chunk_id":"01a1998d-9931-7222-b6f6-3034fb9331e3","file":"DXPh_bgD.mjs","mappings":"w5BAAA,KAmBCA,EAAGC,EAAA,EACFC,IADDF,CAAG,EAEDG,IADDD,CAAM,EAEJE,EAAAC,EADDF,CAAG,EACFG,EAAAD,EAAAD,EAAA,EAAA,EAAAG,EAAAH,CAAA,SADDD,CAAG,IADJD,CAAM,UAANA,EAAM,CAAA,wBADPF,CAAG,YAMEQ,CAAY,CAAA,MANjBR,CAAG,CAFI,CCyBD,MAAMS,EAAkB,aAElBC,EAA+B,CAC3C,CACC,GAAI,MACJ,MAAO,MACP,MAAO,cACP,MACC,+LACD,QAAS,CACR,CACC,GAAI,oBACJ,KAAM,wLAAA,EAEP,CACC,GAAI,uBACJ,KAAM,oJAAA,EAEP,CACC,GAAI,kBACJ,KAAM,8IAAA,EAEP,CACC,GAAI,iBACJ,KAAM,+IAAA,EAEP,CACC,GAAI,qBACJ,KAAM,2JAAA,EAEP,CACC,GAAI,uBACJ,KAAM,wJAAA,EAEP,CACC,GAAI,oBACJ,KAAM,qIAAA,CACP,CACD,EAED,CACC,GAAI,UACJ,MAAO,UACP,MAAO,sBACP,MACC,uIACD,QAAS,CACR,CACC,GAAI,qBACJ,KAAM,oIAAA,EAEP,CACC,GAAI,mBACJ,KAAM,sJAAA,EAEP,CACC,GAAI,uBACJ,KAAM,4JAAA,EAEP,CACC,GAAI,iBACJ,KAAM,uIAAA,EAEP,CACC,GAAI,kBACJ,KAAM,oIAAA,EAEP,CACC,GAAI,sBACJ,KAAM,wIAAA,EAEP,CACC,GAAI,sBACJ,KAAM,yHAAA,CACP,CACD,EAED,CACC,GAAI,QACJ,MAAO,aACP,MAAO,oCACP,MACC,iIACD,QAAS,CACR,CACC,GAAI,aACJ,KAAM,qHAAA,EAEP,CACC,GAAI,iBACJ,KAAM,2HAAA,EAEP,CACC,GAAI,cACJ,KAAM,0HAAA,EAEP,CACC,GAAI,wBACJ,KAAM,kJAAA,EAEP,CACC,GAAI,gBACJ,KAAM,qIAAA,EAEP,CACC,GAAI,qBACJ,KAAM,yHAAA,EAEP,CACC,GAAI,wBACJ,KAAM,kHAAA,EAEP,CACC,GAAI,kBACJ,KAAM,sGAAA,CACP,CACD,EAED,CACC,GAAI,UACJ,MAAO,UACP,MAAO,wBACP,MACC,iIACD,QAAS,CACR,CACC,GAAI,iBACJ,KAAM,yIAAA,EAEP,CACC,GAAI,yBACJ,KAAM,qGAAA,EAEP,CACC,GAAI,uBACJ,KAAM,yHAAA,EAEP,CACC,GAAI,sBACJ,KAAM,iIAAA,EAEP,CACC,GAAI,kBACJ,KAAM,0HAAA,EAEP,CACC,GAAI,wBACJ,KAAM,+HAAA,EAEP,CACC,GAAI,4BACJ,KAAM,kIAAA,EAEP,CACC,GAAI,qBACJ,KAAM,+GAAA,EAEP,CACC,GAAI,wBACJ,KAAM,kGAAA,CACP,CACD,EAED,CACC,GAAI,OACJ,MAAO,OACP,MAAO,eACP,MACC,yFACD,QAAS,CACR,CACC,GAAI,oBACJ,KAAM,iIAAA,EAEP,CACC,GAAI,qBACJ,KAAM,oHAAA,EAEP,CACC,GAAI,oBACJ,KAAM,+HAAA,EAEP,CACC,GAAI,kBACJ,KAAM,iHAAA,CACP,CACD,EAED,CACC,GAAI,UACJ,MAAO,UACP,MAAO,0BACP,MACC,yGACD,QAAS,CACR,CACC,GAAI,kBACJ,KAAM,6HAAA,EAEP,CACC,GAAI,sBACJ,KAAM,8FAAA,EAEP,CACC,GAAI,qBACJ,KAAM,8HAAA,EAEP,CACC,GAAI,wBACJ,KAAM,6HAAA,EAEP,CACC,GAAI,wBACJ,KAAM,sHAAA,CACP,CACD,EAED,CACC,GAAI,MACJ,MAAO,MACP,MAAO,sBACP,MACC,iGACD,QAAS,CACR,CACC,GAAI,mBACJ,KAAM,qGAAA,EAEP,CACC,GAAI,oBACJ,KAAM,iHAAA,EAEP,CACC,GAAI,kBACJ,KAAM,uHAAA,EAEP,CACC,GAAI,gBACJ,KAAM,+FAAA,EAEP,CACC,GAAI,iBACJ,KAAM,uGAAA,EAEP,CACC,GAAI,oBACJ,KAAM,yHAAA,CACP,CACD,EAED,CACC,GAAI,OACJ,MAAO,OACP,MAAO,eACP,MAAO,iDACP,QAAS,CACR,CACC,GAAI,qBACJ,KAAM,8EAAA,EAEP,CACC,GAAI,mBACJ,KAAM,iHAAA,EAEP,CACC,GAAI,qBACJ,KAAM,kGAAA,EAEP,CACC,GAAI,mBACJ,KAAM,2GAAA,CACP,CACD,CAEF,EAEaC,EAAeD,EAAc,OAAO,CAACE,EAAGC,IAAMD,EAAIC,EAAE,QAAQ,OAAQ,CAAC,EAI3E,SAASC,EAAWR,EAAsB,CAChD,MAAO,YAAY,mBAAmBA,CAAI,CAAC,EAC5C,CAEA,MAAMS,EAAU,OAAO,KAAKC,CAAiB,EAC3C,IAAI,MAAM,EACV,KAAK,CAACZ,EAAGa,IAAMb,EAAIa,CAAC,EAGTC,EAA0D,CACtE,CACC,MAAO,wBACP,KAAM,+KAAA,EAEP,CACC,MAAO,wBACP,KAAM,eAAeH,EAAQ,CAAC,CAAC,OAAOA,EAAQA,EAAQ,OAAS,CAAC,CAAC,yHAAA,EAElE,CACC,MAAO,sBACP,KAAM,kIAAA,EAEP,CACC,MAAO,2BACP,KAAM,oHAAA,EAEP,CACC,MAAO,sBACP,KAAM,8FAAA,EAEP,CACC,MAAO,8BACP,KAAM,qIAAA,CAER,EAKaI,EAAqG,CACjH,OAAQ,kBACR,MAAO,CACN,CACC,MAAO,kBACP,KAAM,sBACN,IAAK,uHAAA,EAEN,CACC,MAAO,0BACP,KAAM,kBACN,IAAK,8FAAA,EAEN,CACC,MAAO,+CACP,KAAM,mBACN,IAAK,6EAAA,EAEN,CACC,MAAO,+BACP,KAAM,aACN,IAAK,4DAAA,EAEN,CACC,MAAO,wBACP,KAAM,QACN,IAAK,yDAAA,CACN,CAEF,EAOaC,EACZ,ukBAIYC,EACZ,yQAEYC,EAAkD,CAC9D,CACC,EAAG,yCACH,EAAG,4HAAA,EAEJ,CACC,EAAG,6CACH,EAAG,+OAAA,EAEJ,CACC,EAAG,oCACH,EAAG,yKAAA,EAEJ,CACC,EAAG,uCACH,EAAG,8IAAA,EAEJ,CACC,EAAG,uCACH,EAAG,sJAAA,CAEL","names":["div","root","header","div_1","a","$.child","text","$.reset","STUDIO_BRAND","PROMPTS_UPDATED","PROMPT_GROUPS","PROMPT_COUNT","n","g","promptHref","LENGTHS","TOKENS_BY_SECONDS","b","PROMPT_TIPS","PROMPT_ANATOMY","PROMPT_OTHER_MODELS","PROMPT_HARDER","PROMPT_FAQ"],"sources":["../../../../../../src/lib/components/studio/StudioPage.svelte","../../../../../../src/lib/studio-prompts.ts"],"sourcesContent":["<script lang=\"ts\">\n\t/** The frame PornPilot's own pages are drawn in (RAT-632): /prompts and\n\t *  /prompts/generator. The studio's palette and its buttons, under the\n\t *  studio's own names (routes/studio/+page.svelte, `.studio`), and its kind\n\t *  of header — the name is the way home, and the one filled button opens the\n\t *  studio — so a page beside the product reads as part of it rather than a\n\t *  brochure. ratemyd's nav is hidden on these routes (isStudioPage).\n\t *\n\t *  Two departures from the studio's tokens, both for reading: its --st-muted\n\t *  is #737373, 4.1:1 on this background — fine for a label, too faint for\n\t *  paragraphs people are meant to read — so body copy gets a step of its own\n\t *  (--st-body), and the quiet and secondary labels use --st-faint, which\n\t *  clears 4.5:1 on their fills. */\n\timport type { Snippet } from 'svelte';\n\timport { STUDIO_BRAND } from '$lib/studio-host';\n\n\tlet { children }: { children: Snippet } = $props();\n</script>\n\n<div class=\"pp min-h-[100dvh]\">\n\t<header class=\"sticky top-0 z-40 border-b border-[var(--st-line)] bg-[var(--st-bg)]\">\n\t\t<div class=\"mx-auto flex h-12 max-w-3xl items-center justify-between gap-3 px-5\">\n\t\t\t<a\n\t\t\t\thref=\"/\"\n\t\t\t\tclass=\"font-display text-[1.0625rem] font-semibold tracking-[-0.02em] transition-opacity hover:opacity-70\"\n\t\t\t\t>{STUDIO_BRAND}</a\n\t\t\t>\n\t\t\t<a href=\"/\" class=\"btn btn-sm btn-primary\">Open the studio</a>\n\t\t</div>\n\t</header>\n\t{@render children()}\n</div>\n\n<style>\n\t.pp {\n\t\t--st-bg: var(--color-bg);\n\t\t--st-surface: var(--color-surface);\n\t\t--st-surface-2: var(--color-surface-2);\n\t\t--st-line: var(--color-border);\n\t\t--st-text: var(--color-text);\n\t\t--st-faint: var(--color-faint, #86868b);\n\t\t--st-body: #a1a1a6;\n\t\t--st-accent: var(--st-text);\n\t\t--st-accent-strong: #fff;\n\t\t--st-on-accent: var(--st-bg);\n\t\tbackground: var(--st-bg);\n\t\tcolor: var(--st-text);\n\t\tfont-family: var(--font-body);\n\t}\n\t.pp :global(.btn) {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tgap: 0.5rem;\n\t\tmin-height: 2.25rem;\n\t\tpadding-inline: 1.125rem;\n\t\tborder-radius: 9999px;\n\t\tfont-family: var(--font-body);\n\t\tfont-size: 0.875rem;\n\t\tfont-weight: 500;\n\t\twhite-space: nowrap;\n\t\tcursor: pointer;\n\t\ttransition: background-color 0.2s cubic-bezier(0.32, 0.72, 0, 1);\n\t}\n\t.pp :global(.btn:focus-visible) {\n\t\toutline: 2px solid var(--st-text);\n\t\toutline-offset: 2px;\n\t}\n\t.pp :global(.btn-sm) {\n\t\tmin-height: 2rem;\n\t\tpadding-inline: 0.875rem;\n\t\tfont-size: 0.8125rem;\n\t}\n\t.pp :global(.btn-primary) {\n\t\tbackground: var(--st-accent);\n\t\tcolor: var(--st-on-accent);\n\t\tfont-weight: 600;\n\t}\n\t.pp :global(.btn-primary:hover) {\n\t\tbackground: var(--st-accent-strong);\n\t}\n\t.pp :global(.btn-secondary) {\n\t\tbackground: var(--st-surface-2);\n\t\tcolor: var(--st-faint);\n\t}\n\t.pp :global(.btn-secondary:hover) {\n\t\tbackground: var(--st-line);\n\t\tcolor: var(--st-text);\n\t}\n\t.pp :global(.btn-quiet) {\n\t\tbackground: none;\n\t\tcolor: var(--st-faint);\n\t}\n\t.pp :global(.btn-quiet:hover) {\n\t\tbackground: var(--st-surface);\n\t\tcolor: var(--st-text);\n\t}\n</style>\n","/** PornPilot's prompt library: the words behind /prompts (RAT-632).\n *\n *  Every prompt here is ours, written for this page. None is a member's: the\n *  render log holds what people typed, and that stays where it is. What the\n *  log did decide is which kinds of scene are worth a prompt at all. Of the\n *  clips people rated in the studio (kept or rejected, 755 by 2026-10-31),\n *  38% were kept; POV missionary was kept 55% of the time, breasts in play\n *  54%, sex with moaning 55%, a scene with no act adapter at all 47%, a\n *  blowjob 37%, deepthroat 33%, and a finish 30% — the weakest. So the groups\n *  run in roughly that order, deepthroat and finishes get no prompt, and the\n *  guide says why.\n *\n *  Each prompt is written the way the studio's writer reads best (tunables.ts,\n *  loras.ts): third person, everyone given an adult age, one action, a place\n *  and a light, the camera named where it matters, the sound written in. The\n *  test beside this file runs every one through the studio's own under-age\n *  gate and the Epic D word list, so a prompt that would be refused at the\n *  press, or that names something this page must not, does not ship.\n *\n *  The text is explicit at the register of the studio's own three examples on\n *  its front page, and no further; there are no pictures and no video here.\n *  Change PROMPTS_UPDATED (and the sitemap's lastmod for /prompts) whenever the\n *  words change. */\nimport { TOKENS_BY_SECONDS } from '$lib/studio/pricing';\n\nexport interface LibraryPrompt {\n\t/** The anchor: /prompts#id. Stable once published — links point at it. */\n\tid: string;\n\ttext: string;\n}\n\nexport interface PromptGroup {\n\tid: string;\n\t/** The word on the jump row. */\n\tshort: string;\n\t/** The section's heading, which is also what a search for it would say. */\n\ttitle: string;\n\tintro: string;\n\tprompts: LibraryPrompt[];\n}\n\n/** The day these words last changed. The sitemap carries the same date. */\nexport const PROMPTS_UPDATED = '2026-10-31';\n\nexport const PROMPT_GROUPS: PromptGroup[] = [\n\t{\n\t\tid: 'pov',\n\t\tshort: 'POV',\n\t\ttitle: 'POV prompts',\n\t\tintro:\n\t\t\t'POV is one of the most reliable shots in the studio: the camera is his eyes, so he stays out of frame and the picture stays on her. Say POV, say the position, and say where she is looking.',\n\t\tprompts: [\n\t\t\t{\n\t\t\t\tid: 'pov-hotel-morning',\n\t\t\t\ttext: 'POV, missionary: a brunette in her late twenties on her back on white hotel sheets, looking up into the camera and gasping softly as he slides into her, morning light from the window'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'pov-couch-from-above',\n\t\t\t\ttext: 'POV from above: a redhead in her thirties lying on a leather couch, her breasts moving with every slow thrust, holding eye contact with the camera'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'pov-candlelight',\n\t\t\t\ttext: 'POV, missionary on a bed lit by candles: a woman in her twenties with long black hair pulls him closer by the hips and whispers \"don\\'t stop\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'pov-cabin-rain',\n\t\t\t\ttext: 'POV in a wooden cabin with rain on the window: a blonde woman in her thirties on her back on a sheepskin rug, moaning as he enters her slowly'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'pov-rooftop-daybed',\n\t\t\t\ttext: 'POV, missionary on a rooftop daybed at sunset: a woman in her thirties with short blonde hair, her breasts moving as he thrusts, looking up at the camera'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'pov-afternoon-sheets',\n\t\t\t\ttext: 'POV, missionary on crumpled white sheets in the afternoon: a redhead in her twenties biting her lip and holding his gaze as he moves slowly inside her'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'pov-yacht-lounger',\n\t\t\t\ttext: 'POV from above on a yacht deck lounger: a tanned woman in her late twenties with her hands above her head, moaning as he enters her'\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tid: 'breasts',\n\t\tshort: 'Breasts',\n\t\ttitle: 'Breast play prompts',\n\t\tintro:\n\t\t\t'Breasts touched, kissed or moving are among the shots people keep most often. Say who touches them and with what: hands, mouth, oil.',\n\t\tprompts: [\n\t\t\t{\n\t\t\t\tid: 'breasts-pool-night',\n\t\t\t\ttext: \"two women in their twenties in a heated pool at night, one kissing and licking the other's wet breasts under the underwater lights\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'breasts-warm-oil',\n\t\t\t\ttext: 'a woman in her thirties lying topless on a massage table while a man in his thirties rubs warm oil into her breasts, slow and close, soft lamp light'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'breasts-glass-shower',\n\t\t\t\ttext: 'a woman in her twenties in a steamy glass shower, soaping her breasts and squeezing them as the water runs down her body, the camera close at chest height'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'breasts-riding',\n\t\t\t\ttext: 'a woman in her twenties riding a man in his thirties on a hotel bed, her breasts bouncing, his hands on her waist, shot from the side'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'breasts-hot-tub',\n\t\t\t\ttext: 'a woman in her thirties in a hot tub at night, a man in his thirties behind her cupping her wet breasts as steam rises around them'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'breasts-morning-bed',\n\t\t\t\ttext: \"two women in their twenties on a bed, one slowly kissing and licking the other's breasts while she arches her back, soft morning light\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'breasts-sun-terrace',\n\t\t\t\ttext: 'a woman in her twenties topless on a private terrace at sunset, rubbing oil into her breasts, the camera close and slow'\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tid: 'sound',\n\t\tshort: 'With sound',\n\t\ttitle: 'Prompts with moaning and dialogue',\n\t\tintro:\n\t\t\t'Every clip comes back with sound. Say who moans and how, or put a line in quotes and it is spoken, with the lips moving to it.',\n\t\tprompts: [\n\t\t\t{\n\t\t\t\tid: 'sound-sofa',\n\t\t\t\ttext: 'a woman in her thirties riding a man in his thirties on a sofa, moaning louder as she speeds up, warm evening light'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sound-spooning',\n\t\t\t\ttext: 'a man and a woman in their twenties having slow sex spooning under white sheets; she moans quietly and says \"right there\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sound-sauna',\n\t\t\t\ttext: 'a man and a woman in their thirties having sex on the top bench of a wooden sauna, both breathing hard, steam in the air'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sound-kitchen-counter',\n\t\t\t\ttext: 'a woman in her twenties sitting on a kitchen counter with her legs wrapped around a man in his twenties, moaning into his shoulder as he thrusts'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sound-skyline',\n\t\t\t\ttext: 'a woman in her twenties riding a man in his thirties in a dark bedroom lit by the city skyline, moaning softly as she grinds slowly'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sound-sofa-whisper',\n\t\t\t\ttext: 'a man and a woman in their thirties having slow sex on a sofa; she straddles him and whispers \"slower\", warm lamp light'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sound-couch-afternoon',\n\t\t\t\ttext: 'a man and a woman in their twenties having sex spooning on a couch in the afternoon; she moans and says \"harder\"'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sound-two-women',\n\t\t\t\ttext: \"two women in their twenties kissing in bed, one squeezing the other's breasts while she moans softly\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tid: 'sensual',\n\t\tshort: 'Sensual',\n\t\ttitle: 'Slow, sensual prompts',\n\t\tintro:\n\t\t\t'No explicit act needed. Kissing, undressing and slow touch render cleanly, and they make good opening clips for a longer film.',\n\t\tprompts: [\n\t\t\t{\n\t\t\t\tid: 'sensual-mirror',\n\t\t\t\ttext: 'a woman in her twenties slowly undressing in front of a full-length mirror in a dim hotel room, looking at the camera over her shoulder'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sensual-candlelit-bath',\n\t\t\t\ttext: 'a man and a woman in their thirties in a candlelit bath, kissing slowly, her back against his chest'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sensual-velvet-couch',\n\t\t\t\ttext: \"two women in their late twenties kissing on a velvet couch, one sliding the strap of the other's dress off her shoulder\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sensual-oil-massage',\n\t\t\t\ttext: 'a man in his thirties giving a woman in her thirties a slow oil massage on a bed; she turns over and pulls him down to kiss her'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sensual-rooftop',\n\t\t\t\ttext: 'a man and a woman in their twenties on a private rooftop at sunset; he unzips her dress and kisses his way down her back'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sensual-shirt-buttons',\n\t\t\t\ttext: \"a woman in her thirties slowly unbuttoning a man's shirt in a dim hotel room, both in their thirties, kissing between buttons\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sensual-candlelit-kitchen',\n\t\t\t\ttext: 'a man in his twenties kissing a woman in her twenties down her neck in a candlelit kitchen, his hands at the zipper of her dress'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sensual-pool-steps',\n\t\t\t\ttext: 'a woman in her late twenties climbing out of a pool at night in a wet white shirt, looking back at the camera'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'sensual-two-men-couch',\n\t\t\t\ttext: \"two men in their thirties kissing slowly on a couch, one pulling the other's shirt over his head\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tid: 'oral',\n\t\tshort: 'Oral',\n\t\ttitle: 'Oral prompts',\n\t\tintro:\n\t\t\t'Say who kneels, where they are, and where the camera is: from the side, or from above.',\n\t\tprompts: [\n\t\t\t{\n\t\t\t\tid: 'oral-bedside-lamp',\n\t\t\t\ttext: 'a woman in her twenties kneeling on a bed, giving a man in his thirties a slow blowjob and looking up at him, soft bedside lamp'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'oral-steamy-shower',\n\t\t\t\ttext: 'a woman in her thirties giving a man in his thirties a blowjob in a steamy shower, water running over both of them'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'oral-topless-side',\n\t\t\t\ttext: 'a brunette in her twenties, topless, on her knees in a dim bedroom giving a man in his thirties a blowjob, shot from the side'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'oral-hotel-sofa',\n\t\t\t\ttext: 'a woman in her thirties, topless, giving a man in his thirties a blowjob on a hotel sofa, the camera from above'\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tid: 'lesbian',\n\t\tshort: 'Lesbian',\n\t\ttitle: 'Lesbian AI porn prompts',\n\t\tintro:\n\t\t\t'Tell the two women apart by hair, build or what they wear, so the studio keeps track of who does what.',\n\t\tprompts: [\n\t\t\t{\n\t\t\t\tid: 'lesbian-morning',\n\t\t\t\ttext: \"two women in their twenties in bed, a redhead kissing her way down a brunette's stomach, morning light through the curtains\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'lesbian-bubble-bath',\n\t\t\t\ttext: \"two women in their thirties sharing a bubble bath, kissing and touching each other's breasts\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'lesbian-white-sofa',\n\t\t\t\ttext: \"a blonde and a brunette in their twenties kissing on a white sofa, the blonde sliding her hand into the brunette's underwear\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'lesbian-candlelit-tub',\n\t\t\t\ttext: 'two women in their thirties in a candlelit bathtub, one sitting behind the other, kissing her neck and stroking her breasts'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'lesbian-hotel-undress',\n\t\t\t\ttext: 'a redhead and a brunette in their twenties on a hotel bed, the redhead slowly undressing the brunette between kisses'\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tid: 'gay',\n\t\tshort: 'Gay',\n\t\ttitle: 'Gay AI porn prompts',\n\t\tintro:\n\t\t\t'Tell the two men apart by age, hair or build, and give them a place: a shower, a couch, a bed.',\n\t\tprompts: [\n\t\t\t{\n\t\t\t\tid: 'gay-hotel-shower',\n\t\t\t\ttext: \"two men in their thirties in a hotel shower, kissing under the water, one stroking the other's cock\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'gay-leather-couch',\n\t\t\t\ttext: 'a man in his twenties giving a bearded man in his thirties a slow blowjob on a leather couch, looking up at him'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'gay-locker-room',\n\t\t\t\ttext: 'two athletic men in their twenties alone in a gym locker room after a workout, one jerking the other off on the bench'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'gay-lamplight',\n\t\t\t\ttext: 'two men in their thirties having sex on a bed, one on his back, both moaning, warm lamp light'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'gay-steam-room',\n\t\t\t\ttext: 'two men in their thirties in a steam room, one kneeling to give the other a blowjob, steam in the air'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'gay-evening-hotel',\n\t\t\t\ttext: 'a muscular man in his twenties and a bearded man in his thirties having sex on a hotel bed, both moaning, evening light'\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tid: 'solo',\n\t\tshort: 'Solo',\n\t\ttitle: 'Solo prompts',\n\t\tintro: 'One person, a slow pace, and the camera close.',\n\t\tprompts: [\n\t\t\t{\n\t\t\t\tid: 'solo-leather-couch',\n\t\t\t\ttext: 'a man in his thirties jerking off on a leather couch, slow, the camera close'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'solo-morning-bed',\n\t\t\t\ttext: 'a woman in her thirties in bed, playing with her breasts and moaning softly, morning light through the curtains'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'solo-steamy-shower',\n\t\t\t\ttext: 'a muscular man in his twenties stroking himself in a steamy shower, water running down his chest'\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'solo-bubble-bath',\n\t\t\t\ttext: 'a woman in her twenties in a bubble bath, touching her breasts and moaning softly, candles around the tub'\n\t\t\t}\n\t\t]\n\t}\n];\n\nexport const PROMPT_COUNT = PROMPT_GROUPS.reduce((n, g) => n + g.prompts.length, 0);\n\n/** The studio with a prompt in its composer. It fills the box and nothing\n *  else: the studio never sends on its own (see `?prompt=` in its page). */\nexport function promptHref(text: string): string {\n\treturn `/?prompt=${encodeURIComponent(text)}`;\n}\n\nconst LENGTHS = Object.keys(TOKENS_BY_SECONDS)\n\t.map(Number)\n\t.sort((a, b) => a - b);\n\n/** How to write one — what the writer and the adapters actually reward. */\nexport const PROMPT_TIPS: readonly { title: string; body: string }[] = [\n\t{\n\t\ttitle: 'Say who, and how old.',\n\t\tbody: 'Everyone in a clip is an adult, and the studio wants it said: \"a woman in her twenties\", \"a man in his thirties\". Leave the age out and the writer adds an adult one for you.'\n\t},\n\t{\n\t\ttitle: 'One shot, one action.',\n\t\tbody: `A clip runs ${LENGTHS[0]} to ${LENGTHS[LENGTHS.length - 1]} seconds: one thing happening, start to finish. Write the next beat as its own clip and carry the first one on into it.`\n\t},\n\t{\n\t\ttitle: 'Put them somewhere.',\n\t\tbody: 'A place and a light — a pool at night, a hotel room in the morning — does more for the picture than adjectives about the people.'\n\t},\n\t{\n\t\ttitle: 'Say where the camera is.',\n\t\tbody: 'POV, from the side, from above, close on a face. In a POV shot the camera is his eyes, so he will not be in frame.'\n\t},\n\t{\n\t\ttitle: 'Write the sound in.',\n\t\tbody: 'Moans, breathing, a whispered line. Words in quotes are spoken, and the lips move with them.'\n\t},\n\t{\n\t\ttitle: 'Third person, even for you.',\n\t\tbody: 'Write \"a man\", not \"me\": the model cannot see who is typing. To be in a scene yourself, build a character from a photo of yourself.'\n\t}\n];\n\n/** One prompt from the library taken apart, piece by piece, in the order the\n *  writer reads it. The pieces are quoted from the prompt itself, so the test\n *  can check they are still in it. */\nexport const PROMPT_ANATOMY: { prompt: string; parts: readonly { quote: string; name: string; why: string }[] } = {\n\tprompt: 'pov-candlelight',\n\tparts: [\n\t\t{\n\t\t\tquote: 'POV, missionary',\n\t\t\tname: 'Camera and position',\n\t\t\twhy: 'Said first, because the adapter for this shot owns the camera: he stays behind the lens and the picture stays on her.'\n\t\t},\n\t\t{\n\t\t\tquote: 'on a bed lit by candles',\n\t\t\tname: 'Place and light',\n\t\t\twhy: 'One place and one light. They set the picture more than any adjective about the people does.'\n\t\t},\n\t\t{\n\t\t\tquote: 'a woman in her twenties with long black hair',\n\t\t\tname: 'Who, and how old',\n\t\t\twhy: 'An adult age for everyone in the shot, and one detail that tells her apart.'\n\t\t},\n\t\t{\n\t\t\tquote: 'pulls him closer by the hips',\n\t\t\tname: 'One action',\n\t\t\twhy: 'What happens in these seconds: one thing, start to finish.'\n\t\t},\n\t\t{\n\t\t\tquote: 'whispers \"don\\'t stop\"',\n\t\t\tname: 'Sound',\n\t\t\twhy: 'A line in quotes is spoken, with the lips moving to it.'\n\t\t}\n\t]\n};\n\n/** Where else these prompts go, and what they meet there. Only what holds\n *  across sources as of October 2026: the mainstream video models refuse\n *  explicit prompts, Grok Imagine's spicy mode stops short of explicit sex,\n *  and an open-weight model does what its owner runs it to do. Third-party\n *  rules move; reread them before changing this. */\nexport const PROMPT_OTHER_MODELS =\n\t'These prompts are plain English, so they carry over to other tools, but each draws its line somewhere else. Mainstream video generators such as Sora, Veo and Kling refuse explicit prompts outright. Grok Imagine has a spicy mode for suggestive scenes, and it still blocks explicit sex and anything about a real person. Open-weight models such as Wan 2.2 take them if you run the model yourself, in ComfyUI on your own GPU. PornPilot is built for explicit scenes between adults, comes back with sound, and keeps the same people from clip to clip — so these are written for it first.';\n\n/** What does not land yet, said plainly: a library that only shows the easy\n *  shots sends people to the hard ones unprepared. */\nexport const PROMPT_HARDER =\n\t'Doggy style and standing positions have no dedicated adapter yet, so they come out less reliably than missionary. Squirting is beyond the model for now. And a finish is the hardest shot of all: make it a second clip, carried on from a first one you already like.';\n\nexport const PROMPT_FAQ: readonly { q: string; a: string }[] = [\n\t{\n\t\tq: 'Are these AI porn prompts free to use?',\n\t\ta: 'Yes. Copy them, change them, use them anywhere. Writing in the studio is free too; a clip costs tokens when you render it.'\n\t},\n\t{\n\t\tq: 'Do they work in other AI video generators?',\n\t\ta: 'They are plain English, so they are a good starting point anywhere. They are written for PornPilot, which reads a prompt through a writer that adds the direction, the cast and the sound, so another tool may need more of that spelled out.'\n\t},\n\t{\n\t\tq: 'Why does every prompt say an age?',\n\t\ta: 'Because everyone in a clip has to be an adult, and the studio checks. A prompt with no age gets an adult one added; a prompt that describes anyone under 18 is refused.'\n\t},\n\t{\n\t\tq: 'Can a prompt be about a real person?',\n\t\ta: 'No. Characters are invented, or built from a photo of yourself. Real people, celebrities and anyone who has not agreed to it are off limits.'\n\t},\n\t{\n\t\tq: 'How do I turn a prompt into a video?',\n\t\ta: 'Tap Open in studio. The prompt lands in the composer; change anything you like, pick the length, and send it. Rendering needs an account and tokens.'\n\t}\n];\n"],"version":3}