Spaces:
Sleeping
Sleeping
| # 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() |