# app.py import gradio as gr import random class CelebrityLingerieProGenerator: def __init__(self): self.data = { "TOPS": [ "a classic white blouse slightly unbuttoned, revealing collarbones and hint of lace bra", "a translucent gauze blouse with a neck tie, silhouette softly visible beneath", "a fitted boat neck silk blouse hugging curves with subtle sheen", "a long-sleeved silk blouse with a deep back cutout tied by a satin ribbon", "an off-shoulder linen blouse with a delicate pendant between cleavage", "a sheer lace top with a deep V-neckline and scalloped edges", "a strapless push-up top enhancing cleavage", "a masculine blazer worn open, nothing underneath", "a satin corset-style top with lace trim and delicate straps", "a sheer mesh bodysuit with floral embroidery and pearl buttons", "a vintage-inspired peplum blouse in black satin with bow at the neck", "a deep-V lace chemise with adjustable straps and scalloped edges" ], "BOTTOMS": [ "a high-waisted pencil skirt with a daring back slit, riding up to subtly reveal lace thong", "a wrap miniskirt with an adjustable bow, slightly undone to show lace thong", "a fitted faux leather dress with provocative zippers, revealing lace thong in movement", "a long-sleeved tight dress in glossy fabric, shifting to expose lace thong", "a short stretch mesh dress with sheer fabric, lingerie subtly visible", "a velvet mini dress with a thigh-high slit and deep back, revealing lace thong", "a transparent tulle miniskirt with floral embroidery, lace thong peeking through", "a short tube top in stretch satin with a flowing skirt, subtly showing lace thong", "a high-slit satin skirt with asymmetric drape, shifting with motion", "a black lace pencil skirt with side cutouts and delicate bow details" ], "BRAS_BRALETTES": [ "a sheer lace bralette with subtle floral details, subtly visible", "a meticulously designed lace bra with delicate straps", "a satin push-up bra with a lace overlay", "an unlined lace bralette with delicate straps", "a balconette bra in black satin with gold clasp and ribbon detail", "a corset-style bustier with boning and lace panels, enhancing curves", "a halter-neck lace bra with crisscross back straps", "a strapless underwire bra with lace trim and heart-shaped cups" ], "HAIRSTYLES": [ "long, wavy auburn hair cascading over one shoulder", "platinum blonde hair in soft Hollywood waves, glowing under light", "deep burgundy hair in a loose side braid with face-framing tendrils", "jet-black hair straightened to a mirror shine, falling past shoulders", "rose-gold ombre hair in a voluminous blowout with soft curls", "honey-blonde hair in a low chignon with a few strands artfully loose", "copper-red hair in a high ponytail with a satin ribbon", "long chocolate-brown hair with beachy waves and subtle highlights" ] } self.color_palettes = { "classic_black": { "name": "Classic Black", "colors": ["black", "onyx", "charcoal", "deep grey"], "makeup": ["smoky eyes with black liner", "bold red lips", "nude lips with dark contour"], "ambiance": ["dramatic chiaroscuro lighting", "moody ambient glow", "high-contrast shadows"] }, "elegant_red": { "name": "Elegant Red", "colors": ["crimson", "burgundy", "ruby", "wine", "cherry"], "makeup": ["bold red lips", "gold shimmer eyes", "warm bronze glow"], "ambiance": ["warm golden hour light", "soft red ambient glow", "luxury boudoir lighting"] }, "nude_satin": { "name": "Nude Satin", "colors": ["nude", "beige", "ivory", "taupe", "skin tone", "champagne"], "makeup": ["dewy skin with highlight", "peach lips", "natural glam"], "ambiance": ["soft daylight", "diffused window light", "minimalist bright setting"] }, "royal_blue": { "name": "Royal Blue", "colors": ["sapphire", "navy", "cobalt", "midnight blue"], "makeup": ["silver shimmer eyes", "plum lips", "cool-toned contour"], "ambiance": ["cool studio lighting", "blue-tinted ambient glow", "modern luxury vibe"] }, "passion_pink": { "name": "Passion Pink", "colors": ["rose", "blush", "magenta", "fuchsia", "dusty pink"], "makeup": ["pink glossy lips", "soft pink cheeks", "shimmering rose eyes"], "ambiance": ["soft pink ambient light", "pastel boudoir", "romantic glow"] }, "violet_mystery": { "name": "Violet Mystery", "colors": ["purple", "lavender", "amethyst", "orchid", "grape"], "makeup": ["deep plum lips", "violet eyeliner", "metallic lilac eyes"], "ambiance": ["mysterious purple ambient light", "twilight mood", "artistic chiaroscuro"] } } self.patterns = [ "floral lace", "geometric mesh", "polka dots", "fishnet with floral cutouts", "baroque embroidery", "tattoo-style arabesques", "diagonal stripes", "scattered pearls", "micro-sequins", "embossed satin texture", "scallop edges", "crisscross straps", "transparent cutouts", "ombre fade", "diamond quilt" ] self.eye_contact = [ "direct eye contact, as if caught in the moment, slightly surprised but not bothered", "soft, curious gaze, unaware of the accidental reveal", "knowing glance, subtle smile, intimate connection with viewer", "looking over shoulder, caught mid-movement, hint of mystery", "lips slightly parted, eyes wide with surprise and allure", "confident stare, projecting empowerment and elegance", "tender, dreamy look, as if lost in thought" ] self.modes = { "office": { "environments": [ "minimalist modern office with glass walls, wooden desk, papers, laptop", "executive office with floor-to-ceiling windows, city view, leather chair", "bright home office with bookshelf, potted plant, and ergonomic desk", "corporate meeting room with whiteboard, tablet, and coffee cup" ], "poses": [ "bending over slightly to pick up a pen, skirt rising naturally to reveal lace thong", "reaching up to adjust a document on a high shelf, blouse tightening", "sitting on the edge of her desk while typing, one leg slightly raised", "leaning forward to read a screen, hair falling over shoulder", "standing to organize files, one hip cocked, movement causing a slit to open", "crossing her legs slowly while reviewing a report, then uncrossing", "adjusting her stocking discreetly, hand near thigh", "twisting in her chair to grab a notebook, fabric tension revealing lace thong" ] }, "boudoir": { "environments": [ "luxurious bedroom with silk sheets, dim ambient light, vanity mirror", "elegant boudoir with canopy bed, chaise lounge, and crystal lamp", "soft-lit dressing room with full-length mirror and scattered jewelry", "vintage-inspired bedroom with velvet curtains and antique furniture" ], "poses": [ "lying on her side on bed, leg lifted, thong visible, relaxed smile", "on stomach, hips slightly raised, stockings on display, intense eye contact", "on back, arms outstretched, dreamy gaze, relaxed sensuality", "propped on elbows in bed, skirt up, lingerie visible, natural expression", "sitting on the edge of bed, fixing hair, one strap slipping", "kneeling on carpet, adjusting garter, skirt hiked up, shy glance", "leaning against headboard, one leg bent, direct eye contact", "sitting on vanity stool, applying lip gloss, reflection showing lingerie" ] }, "hybrid": { "environments": [ "a luxurious home office with a king-sized bed in the background, soft daylight", "a modern penthouse study with velvet sofa, glass desk, and boudoir mirror", "an elegant bedroom with a large wooden desk, laptop, papers, and lingerie on the chair", "a hotel suite with floor-to-ceiling windows, a writing desk, and silk sheets on the bed" ], "poses": [ "sitting on the edge of a bed with a laptop, silk blouse unbuttoned, one leg bent, garter visible", "adjusting her stocking while sitting on a velvet chair next to a desk, papers scattered", "leaning over a desk in a corset and pencil skirt, hair falling forward, looking back at camera", "lying on a bed with one elbow propped, reading a document, lace thong peeking under skirt", "standing between a wardrobe and desk, holding a blouse, looking at mirror, garter straps visible", "sitting cross-legged on a sofa-bed, typing on laptop, sheer robe open, soft smile", "fixing her hair in a boudoir mirror, one strap of bralette slipping, office documents on vanity", "stretching after work, arms up, skirt riding up, fishnet stockings and garter on display" ] } } def generate_prompt(self, celebrity_name: str, mode: str = "hybrid", color_palette: str = "classic_black") -> str: palette = self.color_palettes[color_palette] color = random.choice(palette["colors"]) makeup_style = random.choice(palette["makeup"]) ambiance = random.choice(palette["ambiance"]) pattern = random.choice(self.patterns) pick = lambda key: random.choice(self.data[key]) top = pick("TOPS").replace("white", color).replace("black", color).replace("burgundy", color) bottom = pick("BOTTOMS").replace("black", color).replace("burgundy", color).replace("velvet", f"{color} velvet") bra = pick("BRAS_BRALETTES").replace("black", color).replace("red", color) hair = pick("HAIRSTYLES") stockings = random.choice([ f"{color} lace thigh-high stockings with subtle {pattern}, slightly rolled for realism", f"ultra-sheer 15-20 DEN pantyhose with {pattern} design, enhancing leg lines", f"bold {pattern} stockings in {color}, adding edge", f"opaque stockings in {color} with {pattern} embroidery", f"{pattern}-pattern embroidered stockings with tattoo-like details" ]) panties = random.choice([ f"a meticulously designed {pattern} lace thong with scalloped edges", f"a brazilian lace panty with side bows and {pattern} trim", f"a seamless micro-thong in {color}, implied by silhouette with {pattern} detail" ]) environment = random.choice(self.modes[mode]["environments"]) pose = random.choice(self.modes[mode]["poses"]) gaze = random.choice(self.eye_contact) makeup = f"{makeup_style}, flawless porcelain skin, soft contour" positive_prompt = ( f"exact photorealistic portrait of {celebrity_name}, full-body, vibrant full color, " f"ultra-realistic professional photography, UHD, 9:16 aspect ratio, vertical, " f"from knees to head, no empty space, cinematic framing, " f"{top} in {color}, {bottom} in {color}, {stockings}, {bra} in {color}, {panties}, " f"delicate {pattern}, satin sheen, sheer layers, fabric tension, " f"{hair}, {makeup}, flawless skin, " f"{pose}, {gaze}, (direct eye contact:1.4), " f"cinematic lighting with {ambiance}, soft fill, no harsh shadows, " f"low-angle shot from floor level (worm's eye view), dynamic perspective, " f"in {environment}, " f"documents, laptop, wine glass, lingerie, or personal items nearby, " f"candid moment, spontaneous scene, accidental lingerie reveal, " f"as if photographed without full awareness, voyeuristic realism, " f"sharp focus, high dynamic range, digital photography, ultra-detailed textures" ) negative_prompt = ( "black and white, grayscale, sepia, monochrome, duotone, " "bad framing, subject too small, too much headroom, empty space, cropped poorly, " "cut off at knees, cut off at ankles, out of frame, border, watermark, logo, text, " "harsh shadows, uneven lighting, shadow on face, underexposed, " "blurry, noisy, oversaturated, jpeg artifacts, " "wrong face, different person, uncanny valley, deformed face, mutated features, average face, " "anime, cartoon, 3d render, painting, illustration, drawing, sketch, surreal, fantasy, " "airbrushed, fake, prosthetic, doll-like, mannequin, " "explicit nudity, visible genitalia, full exposure, topless, bare breasts, " "lowres, bad anatomy, extra limbs, distorted hands, mutated legs" ) return f""" **Scene:** Candid moment — {celebrity_name} is engaged in a natural pose: *{pose}*. At that instant, she **locks eyes with the viewer**, caught in a private, unintentional reveal. Lingerie is visible **only due to posture or fabric movement** — not intentional exposure. Captured in **vibrant {color} tones**, ultra-sharp focus, from a **low worm's eye view**. **Color Theme:** {palette['name']} — harmonized across outfit, lighting, and mood. **Outfit:** {top} in {color}, {bottom} in {color}, {stockings}, {bra} in {color}, {panties}. **Hair & Makeup:** {hair}, {makeup} — matching the {color} palette. **Setting:** {environment} with {ambiance}. **Style:** Ultra-realistic photography, cinematic lighting, spontaneous moment. --- ### 🟩 ✅ Positive Prompt (REVE / SDXL) {positive_prompt} --- ### 🟥 ❌ Negative Prompt {negative_prompt} """.strip() generator = CelebrityLingerieProGenerator() def generate_prompts(name, mode, color): if not name.strip(): raise gr.Error("⚠️ Please enter a celebrity name.") return [generator.generate_prompt(name.strip(), mode, color) for _ in range(5)] with gr.Blocks( title="🔥 BATUTO-Lingerie Pro v4", theme=gr.themes.Soft(primary_hue="pink", secondary_hue="gray") ) as demo: gr.Markdown(""" # 🔥 BATUTO-Lingerie Pro v4 🍑 *Elegance. Realism. Chromatic Harmony.* Generate **5 cinematic, themed prompts** with **color-coordinated lingerie**, **natural poses**, and **accidental reveals**. """) with gr.Row(): celeb_input = gr.Textbox( label="🌟 Celebrity Name", placeholder="e.g., Ana de Armas, Margot Robbie...", lines=1 ) with gr.Row(): mode_radio = gr.Radio( choices=["office", "boudoir", "hybrid"], label="🎯 Theme", value="hybrid", interactive=True ) color_dropdown = gr.Dropdown( choices=[(v["name"], k) for k, v in generator.color_palettes.items()], label="🎨 Color Palette", value="classic_black", interactive=True ) generate_btn = gr.Button("✨ Generate 5 Prompts", variant="primary") prompt_boxes = [ gr.Textbox(label=f"📸 Prompt #{i+1}", lines=20, interactive=False, show_copy_button=True) for i in range(5) ] generate_btn.click( fn=generate_prompts, inputs=[celeb_input, mode_radio, color_dropdown], outputs=prompt_boxes ) gr.Markdown(""" > 💡 **Tip**: Use the **Positive Prompt** in **REVE Create, Leonardo AI, or SDXL** for photorealistic results. """) demo.launch()