|
|
|
|
|
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() |