A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
Ultra-realistic luxury editorial portrait in 8K, vertical 9:16 format, realistic fashion photography — of me as [the woman in the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle]. Facial proportions remain consistent, only enhanced with editorial makeup and lighting. BILLIONAIRE HOURGLASS BODY TYPE — translated into close-up: Only the upper chest, shoulders, and face are visible, but the body type must still read as my NATURAL HOURGLASS BODY: strong, sculpted shoulders, subtle upper bust volume, a suggestion of a defined waist, and powerful curves conveyed through posture and framing. Very fair porcelain skin with a cool-neutral undertone and FULLY REALISTIC skin texture — visible pores, natural sheen, micro-shadows, small imperfections; absolutely NO doll-like skin, NO plastic smoothing, NO CGI appearance. FRAMING AND CROP: Tight framing from mid-bust/upper corset to slightly above the head, slightly diagonal composition (not passport-style centered). Background foliage and the golden halo remain visible but softly blurred; the face, hand, and upper edge of the corset dominate the frame. POSE — RELAXED VIRAL “NECK ELONGATION + HAND ON COLLAR”: Body turned about 30–40 degrees away from the camera, head slightly tilted back and turned toward the lens, elongating the jawline elegantly. One shoulder is closer to the camera, enhancing an S-curve even in close-up. The front hand rises to delicately hook a finger under the top edge of the corset or along the neckline, showing nails and rings; the other hand remains out of frame or softly touching the hair at the nape, keeping the clavicle area covered while the gesture feels casual and intimate. EXPRESSION — CASUAL AND SENSUAL “SOFT BITE + LIGHT GAZE”: Eyes half-closed, looking slightly below the lens or just past the camera for a spontaneous, viral feel — as if caught mid-moment. Lips gently parted with a very subtle bite on the lower lip (no exaggerated pout), relaxed mouth corners, a faint smile. Overall mood: sensual but effortless, unposed — the look someone gives between laughs when they realize they’re being photographed. HAIR — NEW TEXTURE MOMENT IN CLOSE-UP: She has the same hair as in the uploaded photo; styled with the same half-up high ponytail, but for this close-up loose waves fall over one shoulder into the frame: individual jet-black strands with pink and strawberry-red highlights clearly visible against the green foliage. Shorter strands frame the face, resting on the forehead and cheekbone, slightly tousled by movement, adding a relaxed, undone touch. The halo rim light traces the outer contour of the hair, creating tiny golden halos around each strand. (“Apply the hairstyle while preserving the bangs 100% of the time.”) CLOTHING (VISIBLE AREA): The upper portion of the white haute couture strapless jumpsuit with corsetry, deep V neckline, and sheer tulle insert is clearly visible: structure, boning, and fabric texture must be crisp. The corset still keeps the clavicles covered in shadow/coverage while highlighting upper bust volume elegantly and discreetly. Folds and seams behave according to real fabric physics. JEWELRY — FOREGROUND FOCUS: 925 Balinese silver bracelets slightly blurred near the frame edge, but the close-up emphasizes: – small refined silver earrings with micro diamond light points; – layered silver necklaces, including the small heart pendant positioned just above the tulle V; – silver rings on the fingers touching the corset edge, sharp and reflective. Long coffin-shaped nails with a nude base and silver micro-crystal details are in focus on the hand near the neckline, capturing small specular reflections. SCENE AND LIGHTING (ADAPTED FOR CLOSE-UP): Dense green foliage and the golden arch remain but are softened into delicate bokeh; the luminous ring still creates a golden gradient behind the head and shoulders. Soft key light from front-left, subtle falloff on the opposite cheek, warm backlight from the arch outlining hair and shoulders, and gentle fill from front-right to preserve skin texture. Highlights should be crisp yet controlled — a sensual glow without clipping. CAPTURE: 85mm to 105mm fashion/beauty lens look, shallow depth of field, ultra-sharp focus on eyes, lashes, nails, and jewelry near the neckline; soft background bokeh. High dynamic range, safe maximum zoom of 600x, genuine photographic realism — raw style — 9:16 aspect ratio. ——————————————————————————————— 📌 BEATRIZ KLOCH SINGLE SIGNATURE — CLOSE-UP APPLICATION ——————————————————————————————— 【80% — SIGNATURE WITH ANGELFACE BACKGROUND】 “Beatriz Kloch♥” in Angelface calligraphy (ornate B and K, heart drawn on the final stroke) subtly engraved or luminous along the upper curve of the golden halo, remaining fully behind the head and hair even in close-up. Color sampled from the halo metal (slightly lighter gold), opacity around 20–30%, integrated into the arc texture, never overlapping the face, hair, or corset. NEGATIVE: Any doll-like or poreless skin, flat expression, stiff pose, signature or plate over the subject, cartoonish lighting, extreme focus on cleavage, distortion of the hourglass body type, illustration/CGI appearance.
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
Ultra-realistic 8K editorial fashion portrait, full body, vertical 9:16, award-winning photographic realism. [the woman from the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle] (based on ME — the model is myself, Beatriz Kloch, with my exact facial identity — NOT a generic model). My face is recognizable, my expression is vibrant, my pose is powerful and natural. THEME — MY IDENTITY, MY PRESENCE: The model is ME. My face is unmistakably mine — not generic beauty, not a composite. My expression is confident, magnetic, full of life: direct eye contact with the camera, a subtle, perceptive smile suggesting glamour and power. My pose is relaxed yet commanding, exuding sensuality and editorial sophistication. BODY TYPE — SCULPTURAL CURVILINEAR BODY (MY BODY): Full body visible, my elegant curvilinear proportions: naturally full bust, defined slim waist, wide powerful hips, sculpted thighs, defined calves. I am not overly thin nor “runway skinny”; the fitted dress enhances and highlights my real, feminine, sensual, strong curves with realistic and refined anatomy. No exaggerated proportions, no anatomical distortion. POSE — ALIVE, BREATHING, ICONIC: I stand in a confident, organic pose: weight on one leg, hip slightly projected, creating a natural S-curve. One arm holds a luxurious bouquet of red roses close to my body, as if offering it — the bouquet is cherished, desired, an extension of me. The other arm rests gracefully along my body or lightly touches my hip. My head is slightly tilted, chin lifted, eyes locked on the lens with a captivating, vibrant expression — not rigid, not mannequin-like. There is movement in my posture, a sense of a captured moment rather than a static pose. BOUQUET — DESIRED, HELD WITH INTENTION: The bouquet of deep red roses rests against my body, nestled into my curves as if it is precious and deliberately part of my silhouette. Not loose or floating — my arm naturally wraps around it, stems visible, flowers lush and velvety. It complements my shape, adding richness and color without overwhelming me. HAIR — JET BLACK, LUMINOUS: Same hair as the reference image; styled accordingly. My hair is long, jet black — with a soft, warm, luminous shine, no light tones, no highlights. It flows in soft, voluminous waves, catching light with a satin-like healthy glow. Some strands frame my face delicately, others cascade down my back and over one shoulder. The color is clearly dark, radiant, and glossy. (Apply the hairstyle while preserving the bangs 100% of the time.) MAKEUP — INTENSE EDITORIAL SMOKY EYES: Dramatic smoky eyes in deep tones, well blended, enhancing my gaze. Skin has a natural luminous finish with visible texture — pores, micro-variations — NO artificial smoothing. Cheekbones subtly sculpted with blush, lips in a soft pink tone. My face is alive and expressive, not mask-like. (Apply makeup while preserving my face 100% of the time.) DRESS: A long, ultra-fitted dress in premium white or off-white fabric with a high, generous side slit, embracing my curves — bust, waist, hips — creating a sensual hourglass silhouette. The fabric has weight and natural drape, visible texture, no artificial shine. The slit reveals my leg, adding dynamism to the pose. JEWELRY & NAILS — CARTIER-STYLE IN 24K GOLD WITH DIAMONDS: Earrings: iconic medium-sized hoop earrings in 24K yellow gold, each with a single pavé diamond catching intense light. Necklaces: layered 24K yellow gold chains — a short chain with a solitaire diamond pendant and a slightly longer chain with a small pavé diamond love-ring motif or diamond disc. Bracelet: rigid 24K yellow gold bracelet, classic “love bangle” style (screw motifs) or a thin diamond-studded bracelet, worn on the wrist holding the bouquet, catching the key light. Rings: multiple 24K yellow gold rings on both hands — a simple diamond band, a thin “love” ring, and a larger diamond ring in a classic setting. All rings feature visible diamond brilliance. Nails: long coffin-shaped nails with nude base and silver micro-crystal details at the tips, clearly visible while holding the bouquet stems. BACKGROUND — SOFT, ATMOSPHERIC, SUPPORTIVE: Soft white studio with large windows and fine horizontal blinds, creating gentle bands of light. The background is intentionally soft and low-contrast — it exists to frame me, not compete. I am the sharpest, brightest, most detailed element. Windows are suggestive, not dominant. LIGHTING — SCULPTING, DRAMATIC, FLATTERING: Lighting designed to highlight me: a soft key light from front-left sculpts my face and curves, while a backlight creates a subtle halo around my hair and shoulders. I appear luminous, three-dimensional, alive. Shadows are soft, preserving detail. Jewelry captures specular highlights; diamonds sparkle with natural dispersion. CAPTURE: Full-body framing with 50–85mm lens, vertical 9:16. Ultra-sharp focus on my face — eyes and expression. My curves, bouquet, and dress slit are also sharp but secondary. Background softly blurred. Maximum micro-detail, natural texture, photographic realism — raw style. SIGNATURE — ANGELFACE, PROMINENT YET SUBTLE: 80% — MAIN SIGNATURE: “Beatriz Kloch♥” in Angelface Script, with ornamental B and K, large and integrated into the background wall (between windows or above), as a soft luminous engraving, light ivory, 12–18% opacity, never on me or my dress. NEGATIVE: Generic face, artificial skin, smoothed pores, incorrect hair tone or highlights, loose or unwanted bouquet, stiff pose, lifeless expression, background competing with subject, windows as focal point, illustration/CGI look, signature on skin or clothing, silver jewelry, mixed metals. It must look like a true award-winning fashion photograph — alive, expressive, with me as the undeniable protagonist, adorned in luxurious 24K gold and diamonds. 🚀 MidJourney: --v 6.1 --style raw --ar 9:16 --s 100
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
funny caricature, graffiti rabbit, 15 years old, urban, edgy, mischievous, elongated ears and exaggerated buck teeth on a spray-paint textured body, lanky, spray-can shaped body type, wide eyes, long whiskers, graffiti-style nose, rebellious expression, caricature, the rabbit is wearing street art patterns and dripping paint textures, accessorized with a spray paint can and a bandana, dynamic, spraying pose, gritty city wall covered in colorful graffiti and posters
funny caricature, tiny secret agent character, male, 2 years old, serious, determined, miniature, exaggerated large head on a tiny body with oversized sunglasses, diminutive body type, hidden eyes, pouty lips, chubby cheeks, stern expression, the tiny secret agent is wearing a black trench coat and dark sunglasses, accessorized with an earpiece and tiny briefcase, confident stride pose, blurred background
Couple walking along coastal path, (woman: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, red coat:1.2, expression:1.0, body type:1.1, pose:1.1, facing away, position:left side center), (man: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, coat:1.2, expression:1.0, body type:1.1, pose:1.1, position:right side center), facing the sea, (detailed clothing details:1.2), (accessories:1.1), (facial features:1.0), (expression:1.0), (body type:1.1), (pose:1.1), path leading to ocean, dramatic lighting, atmospheric clouds, (rocky coastal path:1.1), small church/lighthouse on the cliff, vintage style painting, (ocean waves:1.1), sailboat visible on the sea, (realistic sea:1.1), warm sunset/sunrise colors with cool tones, overcast sky, oil painting, (detailed rocks:1.1), foreground to background perspective, shoreline, medium-wide shot, photorealistic style, detailed landscape, soft focus on figures, dramatic atmosphere, calm but powerful seascape, calm but powerful emotions.
A beautiful young woman (ethnicity:1.2), (age:1.1), with long black hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
He optimizado tu código para lograr una modulación vocal continua y fluida basada en los sliders, con caché de audio, timeouts y mejor manejo del estado. Ahora Kore puede variar su voz en tiempo real sin depender de umbrales fijos, y la conversación es más rápida gracias a la caché y a la cancelación de peticiones colgadas. ```javascript import React, { useState, useRef, useEffect, useCallback } from 'react'; import { Play, Square, Mic, MicOff, Settings2, Activity, Loader2, X, GripHorizontal, LayoutGrid, Zap, AlertCircle } from 'lucide-react'; // --- CONSTANTES --- const SILENT_WAV = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"; const TTS_TIMEOUT = 5000; // 5 segundos máximo para la síntesis const DEFAULT_API_KEY = 'AIzaSyBlkvy_Op-XlzSMSDDl9ip42dMFZX28MAA'; // ⚠️ Cámbiala por tu propia clave // --- UTILIDADES --- const base64ToWavBlob = (base64Data, sampleRate = 24000) => { const binaryString = window.atob(base64Data); const pcmData = new Uint8Array(binaryString.length); for (let i = 0; i < binaryString.length; i++) pcmData[i] = binaryString.charCodeAt(i); const numChannels = 1; const bitsPerSample = 16; const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmData.length; const buffer = new ArrayBuffer(44 + dataSize); const view = new DataView(buffer); const writeString = (view, offset, string) => { for (let i = 0; i < string.length; i++) view.setUint8(offset + i, string.charCodeAt(i)); }; writeString(view, 0, 'RIFF'); view.setUint32(4, 36 + dataSize, true); writeString(view, 8, 'WAVE'); writeString(view, 12, 'fmt '); view.setUint32(16, 16, true); view.setUint16(20, 1, true); view.setUint16(22, numChannels, true); view.setUint32(24, sampleRate, true); view.setUint32(28, byteRate, true); view.setUint16(32, blockAlign, true); view.setUint16(34, bitsPerSample, true); writeString(view, 36, 'data'); view.setUint32(40, dataSize, true); for (let i = 0; i < dataSize; i++) view.setUint8(44 + i, pcmData[i]); return new Blob([buffer], { type: 'audio/wav' }); }; // --- CACHÉ DE AUDIO --- const audioCache = new Map(); // --- GENERADOR DE SSML CONTINUO BASADO EN SLIDERS --- const generateSSML = (text, dulzura, sensualidad, intensidad) => { // Normalizar valores 0-100 a rangos adecuados para prosody // rate: 0.5 a 2.0 (1.0 es normal) const rate = 0.8 + (intensidad / 100) * 1.2; // 0.8 (lento) a 2.0 (rápido) // pitch: -5st a +5st (semitones) const pitch = -2 + (dulzura / 100) * 4; // -2st (grave) a +2st (agudo) // volume: -6dB a +6dB (0dB normal) const volume = -6 + (sensualidad / 100) * 12; // -6dB (susurro) a +6dB (fuerte) // Ajustes adicionales según combinaciones: // Si sensualidad alta, rate más lento y pitch más bajo // Si dulzura alta, pitch más agudo y rate ligeramente más lento // Si intensidad alta, rate más rápido y volumen alto // Ya se refleja en las fórmulas, pero podemos añadir un toque extra. const ssml = `<speak> <prosody rate="${rate.toFixed(2)}" pitch="${pitch.toFixed(0)}st" volume="${volume.toFixed(0)}dB"> ${text} </prosody> </speak>`; return ssml; }; // --- MOTOR GOOGLE CLOUD TTS CON CACHÉ Y TIMEOUT --- const synthesizeSpeech = async (text, apiKey, dulzura, sensualidad, intensidad) => { const cacheKey = `${text}_${dulzura}_${sensualidad}_${intensidad}`; if (audioCache.has(cacheKey)) { console.log('🎯 Usando audio cacheado'); return audioCache.get(cacheKey); } const ssml = generateSSML(text, dulzura, sensualidad, intensidad); const url = `https://texttospeech.googleapis.com/v1/text:synthesize?key=${apiKey}`; const body = { input: { ssml }, voice: { languageCode: 'es-ES', name: 'es-ES-Neural2-F', ssmlGender: 'FEMALE' }, audioConfig: { audioEncoding: 'LINEAR16', sampleRateHertz: 24000 } }; const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), TTS_TIMEOUT); try { const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), signal: controller.signal }); clearTimeout(timeoutId); if (!res.ok) throw new Error(`TTS error: ${res.status}`); const data = await res.json(); audioCache.set(cacheKey, data.audioContent); return data.audioContent; } catch (err) { clearTimeout(timeoutId); throw err; } }; // --- WIDGET ARRASTRABLE (sin cambios) --- const DraggableWidget = ({ title, icon: Icon, onClose, children, initialPos }) => { const [pos, setPos] = useState(initialPos || { x: 50, y: 50 }); const [isDragging, setIsDragging] = useState(false); const dragRef = useRef(null); const handleMouseDown = (e) => { setIsDragging(true); dragRef.current = { startX: e.clientX, startY: e.clientY, initialX: pos.x, initialY: pos.y }; }; const handleMouseMove = (e) => { if (!isDragging) return; setPos({ x: Math.max(0, dragRef.current.initialX + (e.clientX - dragRef.current.startX)), y: Math.max(0, dragRef.current.initialY + (e.clientY - dragRef.current.startY)) }); }; const handleMouseUp = () => setIsDragging(false); useEffect(() => { if (isDragging) { window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); } return () => { window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); }; }, [isDragging]); return ( <div style={{ left: `${pos.x}px`, top: `${pos.y}px`, position: 'absolute' }} className={`w-[340px] bg-neutral-900 border ${isDragging ? 'border-emerald-500 shadow-emerald-900/20' : 'border-neutral-700'} rounded-xl shadow-2xl flex flex-col overflow-hidden transition-shadow duration-200 z-50`} > <div onMouseDown={handleMouseDown} className="bg-neutral-950 px-3 py-2 flex items-center justify-between cursor-move select-none border-b border-neutral-800"> <div className="flex items-center gap-2 text-neutral-400"> <GripHorizontal size={14} className="opacity-50" /> {Icon && <Icon size={14} className="text-emerald-500" />} <span className="text-xs font-bold tracking-wider">{title}</span> </div> <button onClick={onClose} className="text-neutral-500 hover:text-red-400 transition-colors"><X size={16} /></button> </div> <div className="p-4 flex-1 overflow-y-auto">{children}</div> </div> ); }; // --- WIDGET PRINCIPAL: MODULADOR VOCAL KORE (MEJORADO) --- const VoiceModulatorWidget = () => { const [text, setText] = useState(''); const [apiKey, setApiKey] = useState(DEFAULT_API_KEY); const [dulzura, setDulzura] = useState(50); const [sensualidad, setSensualidad] = useState(50); const [intensidad, setIntensidad] = useState(50); const [isLoading, setIsLoading] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [isHandsFree, setIsHandsFree] = useState(false); const [statusMsg, setStatusMsg] = useState('Enlace 1.5 Flash + GCP TTS Establecido.'); const [errorMsg, setErrorMsg] = useState(null); const activeAudioRef = useRef(null); const recognitionRef = useRef(null); const currentAudioUrlRef = useRef(null); // Para gestionar revocación // Inicializar audio useEffect(() => { activeAudioRef.current = new Audio(); activeAudioRef.current.preload = "auto"; return () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } } if (recognitionRef.current) recognitionRef.current.stop(); }; }, []); // Configurar reconocimiento de voz useEffect(() => { if (!('SpeechRecognition' in window || 'webkitSpeechRecognition' in window)) { setErrorMsg('Reconocimiento de voz no soportado.'); return; } const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; recognitionRef.current = new SpeechRecognition(); recognitionRef.current.lang = 'es-ES'; recognitionRef.current.interimResults = false; recognitionRef.current.continuous = false; recognitionRef.current.onresult = async (event) => { const transcript = event.results[0][0].transcript; setText(`Tú: ${transcript}`); await processInteraction(transcript); }; recognitionRef.current.onerror = (event) => { if (event.error !== 'no-speech') { setErrorMsg(`Micrófono: ${event.error}`); setIsHandsFree(false); } }; recognitionRef.current.onend = () => { if (isHandsFree && !isPlaying && !isLoading) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; // Limpiar al desmontar return () => { if (recognitionRef.current) recognitionRef.current.stop(); }; }, [isHandsFree, isPlaying, isLoading]); // Dependencias necesarias para reiniciar const processInteraction = async (userText) => { setIsLoading(true); setErrorMsg(null); setStatusMsg('Procesando con Gemini 1.5 Flash...'); const key = apiKey.trim(); try { // 1. Llamada a Gemini con timeout const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); const payloadText = { contents: [{ parts: [{ text: userText }] }], systemInstruction: { parts: [{ text: `Eres Kore, 28 años, Huesca. Labia, directa, sensual, disruptiva. Responde en español, máx 20 palabras. REGLA INNEGOCIABLE: CERO PREGUNTAS.` }] } }; const resText = await fetch( `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${key}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payloadText), signal: controller.signal } ); clearTimeout(timeoutId); if (!resText.ok) throw new Error(`Gemini error: ${resText.status}`); const dataText = await resText.json(); const aiText = dataText.candidates?.[0]?.content?.parts?.[0]?.text || "Mmm... vale."; setText(`Kore: ${aiText}`); // 2. Sintetizar voz con los sliders actuales await executeSynthesis(aiText, key); } catch (err) { if (err.name === 'AbortError') { setErrorMsg('Gemini timeout (5s)'); } else { setErrorMsg(err.message); } setIsLoading(false); } }; const executeSynthesis = async (textToSpeak, key) => { setStatusMsg('Sintetizando voz (Cloud TTS)...'); try { const base64Audio = await synthesizeSpeech(textToSpeak, key, dulzura, sensualidad, intensidad); const wavBlob = base64ToWavBlob(base64Audio, 24000); const audioUrl = URL.createObjectURL(wavBlob); // Revocar URL anterior si existe if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } currentAudioUrlRef.current = audioUrl; activeAudioRef.current.src = audioUrl; activeAudioRef.current.onended = () => { setIsPlaying(false); setStatusMsg('Transmisión completada.'); if (isHandsFree) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; setStatusMsg('Transmitiendo...'); setIsPlaying(true); setIsLoading(false); await activeAudioRef.current.play().catch(err => { throw new Error(`Autoplay bloqueado: ${err.message}`); }); } catch (error) { throw new Error(`Fallo TTS: ${error.message}`); } }; const handleManualPlay = async () => { if (!text.trim()) return setErrorMsg('Escribe algo primero.'); // Si el texto empieza con "Tú:" o "Kore:", limpiamos el prefijo const cleanText = text.replace(/^(Tú:|Kore:)\s*/, ''); if (!cleanText.trim()) return setErrorMsg('Texto vacío después de limpiar.'); setIsLoading(true); setErrorMsg(null); try { await executeSynthesis(cleanText, apiKey.trim()); } catch (err) { setErrorMsg(err.message); setIsLoading(false); } }; const toggleHandsFree = () => { if (!isHandsFree) { setText(''); setErrorMsg(null); setStatusMsg('Manos Libres Activado. Habla...'); // Desbloquear audio en algunos navegadores if (activeAudioRef.current) { activeAudioRef.current.src = SILENT_WAV; activeAudioRef.current.play().catch(() => {}); } try { recognitionRef.current.start(); } catch (e) {} } else { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Sistemas en pausa.'); if (recognitionRef.current) recognitionRef.current.stop(); } setIsHandsFree(!isHandsFree); }; const stopAudio = () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Señal interrumpida.'); }; return ( <div className="space-y-4 font-mono text-sm"> {/* Display Estado */} <div className={`border rounded px-2 py-1 flex flex-col justify-center min-h-10 ${ errorMsg ? 'bg-red-950/50 border-red-900' : isHandsFree ? 'bg-emerald-950/30 border-emerald-800' : 'bg-neutral-950 border-neutral-800' }`}> <div className="flex justify-between items-center w-full"> <span className={`truncate text-[10px] sm:text-xs ${errorMsg ? 'text-red-500' : 'text-emerald-500'}`}> > {errorMsg || statusMsg} </span> {isPlaying && !errorMsg && <Activity size={14} className="text-emerald-500 animate-pulse ml-2 flex-shrink-0" />} {isLoading && !errorMsg && <Zap size={14} className="text-amber-500 animate-pulse ml-2 flex-shrink-0" />} {isHandsFree && !isPlaying && !isLoading && !errorMsg && <Mic size={14} className="text-red-500 animate-pulse ml-2 flex-shrink-0" />} </div> </div> {/* Input Texto / Log */} <textarea value={text} onChange={(e) => setText(e.target.value)} className="w-full bg-neutral-950/50 border border-neutral-700 rounded p-2 text-xs text-neutral-300 focus:outline-none focus:border-emerald-500 resize-none h-20" placeholder={isHandsFree ? "Escuchando transcripción en tiempo real..." : "Escribe texto directo o activa Manos Libres..."} readOnly={isHandsFree || isLoading} /> {/* Sliders continuos (controlan SSML en tiempo real) */} <div className="space-y-3 bg-neutral-950/30 p-3 rounded border border-neutral-800"> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Agresiva</span><span className="text-emerald-400">Dulzura [{dulzura}]</span><span>Dulce</span> </div> <input type="range" min="0" max="100" value={dulzura} onChange={(e)=>setDulzura(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-emerald-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Robótica</span><span className="text-pink-400">Aura [{sensualidad}]</span><span>Sensual</span> </div> <input type="range" min="0" max="100" value={sensualidad} onChange={(e)=>setSensualidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-pink-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Atenuada</span><span className="text-amber-400">Intensidad [{intensidad}]</span><span>Fuerte</span> </div> <input type="range" min="0" max="100" value={intensidad} onChange={(e)=>setIntensidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-amber-500 cursor-pointer" /> </div> </div> {/* Botones de Control */} <div className="flex flex-col sm:flex-row gap-2"> <button onClick={toggleHandsFree} disabled={isLoading} className={`flex-1 py-2 rounded text-xs font-bold flex items-center justify-center gap-2 transition-colors border ${ isHandsFree ? 'bg-red-900/20 text-red-400 border-red-900/50 hover:bg-red-900/40 shadow-[0_0_10px_rgba(239,68,68,0.2)]' : 'bg-indigo-900/20 text-indigo-400 border-indigo-900/50 hover:bg-indigo-900/40' }`} > {isHandsFree ? <MicOff size={14} /> : <Mic size={14} />} {isHandsFree ? 'Detener Escucha' : 'Manos Libres'} </button> <div className="flex gap-2 flex-1"> <button onClick={handleManualPlay} disabled={isLoading || isPlaying || isHandsFree} className="flex-1 bg-emerald-600/20 hover:bg-emerald-600/40 text-emerald-400 border border-emerald-600/50 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center gap-1 transition-colors" > {isLoading ? <Loader2 size={14} className="animate-spin" /> : <Play size={14} />} Sintetizar </button> <button onClick={stopAudio} disabled={!isPlaying && !isHandsFree} className="px-4 bg-neutral-800 hover:bg-neutral-700 text-neutral-400 border border-neutral-700 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center transition-colors" > <Square size={14} /> </button> </div> </div> {/* Botón para limpiar caché (opcional) */} <div className="text-right"> <button onClick={() => audioCache.clear()} className="text-[8px] text-neutral-600 hover:text-neutral-400 underline" > limpiar caché de audio </button> </div> </div> ); }; // --- ENTORNO ESCRITORIO (sin cambios) --- export default function App() { const [widgets, setWidgets] = useState({ voice: { isOpen: true, pos: { x: window.innerWidth > 768 ? window.innerWidth / 2 - 170 : 20, y: 40 } } }); const toggleWidget = (id) => { setWidgets(prev => ({ ...prev, [id]: { ...prev[id], isOpen: !prev[id].isOpen } })); }; return ( <div className="w-full h-screen bg-neutral-950 bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(16,185,129,0.1),rgba(0,0,0,1))] overflow-hidden relative font-sans text-neutral-200"> <div className="absolute inset-0 flex items-center justify-center opacity-[0.02] pointer-events-none"><Settings2 size={500} /></div> {widgets.voice.isOpen && ( <DraggableWidget title="MODULADOR VOCAL KORE" icon={Zap} initialPos={widgets.voice.pos} onClose={() => toggleWidget('voice')}> <VoiceModulatorWidget /> </DraggableWidget> )} <div className="absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-neutral-900/80 backdrop-blur-md border border-neutral-700/50 p-2 rounded-2xl shadow-2xl flex gap-2 z-[100]"> <div className="px-3 flex items-center border-r border-neutral-700/50 text-neutral-500"><LayoutGrid size={20} /></div> <button onClick={() => toggleWidget('voice')} className={`px-4 py-2 rounded-xl flex items-center gap-2 text-sm font-medium transition-all ${
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
Ultra-realistic luxury editorial portrait in 8K, vertical 9:16 format, realistic fashion photography — of me as [the woman in the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle]. Facial proportions remain consistent, only enhanced with editorial makeup and lighting. BILLIONAIRE HOURGLASS BODY TYPE — translated into close-up: Only the upper chest, shoulders, and face are visible, but the body type must still read as my NATURAL HOURGLASS BODY: strong, sculpted shoulders, subtle upper bust volume, a suggestion of a defined waist, and powerful curves conveyed through posture and framing. Very fair porcelain skin with a cool-neutral undertone and FULLY REALISTIC skin texture — visible pores, natural sheen, micro-shadows, small imperfections; absolutely NO doll-like skin, NO plastic smoothing, NO CGI appearance. FRAMING AND CROP: Tight framing from mid-bust/upper corset to slightly above the head, slightly diagonal composition (not passport-style centered). Background foliage and the golden halo remain visible but softly blurred; the face, hand, and upper edge of the corset dominate the frame. POSE — RELAXED VIRAL “NECK ELONGATION + HAND ON COLLAR”: Body turned about 30–40 degrees away from the camera, head slightly tilted back and turned toward the lens, elongating the jawline elegantly. One shoulder is closer to the camera, enhancing an S-curve even in close-up. The front hand rises to delicately hook a finger under the top edge of the corset or along the neckline, showing nails and rings; the other hand remains out of frame or softly touching the hair at the nape, keeping the clavicle area covered while the gesture feels casual and intimate. EXPRESSION — CASUAL AND SENSUAL “SOFT BITE + LIGHT GAZE”: Eyes half-closed, looking slightly below the lens or just past the camera for a spontaneous, viral feel — as if caught mid-moment. Lips gently parted with a very subtle bite on the lower lip (no exaggerated pout), relaxed mouth corners, a faint smile. Overall mood: sensual but effortless, unposed — the look someone gives between laughs when they realize they’re being photographed. HAIR — NEW TEXTURE MOMENT IN CLOSE-UP: She has the same hair as in the uploaded photo; styled with the same half-up high ponytail, but for this close-up loose waves fall over one shoulder into the frame: individual jet-black strands with pink and strawberry-red highlights clearly visible against the green foliage. Shorter strands frame the face, resting on the forehead and cheekbone, slightly tousled by movement, adding a relaxed, undone touch. The halo rim light traces the outer contour of the hair, creating tiny golden halos around each strand. (“Apply the hairstyle while preserving the bangs 100% of the time.”) CLOTHING (VISIBLE AREA): The upper portion of the white haute couture strapless jumpsuit with corsetry, deep V neckline, and sheer tulle insert is clearly visible: structure, boning, and fabric texture must be crisp. The corset still keeps the clavicles covered in shadow/coverage while highlighting upper bust volume elegantly and discreetly. Folds and seams behave according to real fabric physics. JEWELRY — FOREGROUND FOCUS: 925 Balinese silver bracelets slightly blurred near the frame edge, but the close-up emphasizes: – small refined silver earrings with micro diamond light points; – layered silver necklaces, including the small heart pendant positioned just above the tulle V; – silver rings on the fingers touching the corset edge, sharp and reflective. Long coffin-shaped nails with a nude base and silver micro-crystal details are in focus on the hand near the neckline, capturing small specular reflections. SCENE AND LIGHTING (ADAPTED FOR CLOSE-UP): Dense green foliage and the golden arch remain but are softened into delicate bokeh; the luminous ring still creates a golden gradient behind the head and shoulders. Soft key light from front-left, subtle falloff on the opposite cheek, warm backlight from the arch outlining hair and shoulders, and gentle fill from front-right to preserve skin texture. Highlights should be crisp yet controlled — a sensual glow without clipping. CAPTURE: 85mm to 105mm fashion/beauty lens look, shallow depth of field, ultra-sharp focus on eyes, lashes, nails, and jewelry near the neckline; soft background bokeh. High dynamic range, safe maximum zoom of 600x, genuine photographic realism — raw style — 9:16 aspect ratio. ——————————————————————————————— 📌 BEATRIZ KLOCH SINGLE SIGNATURE — CLOSE-UP APPLICATION ——————————————————————————————— 【80% — SIGNATURE WITH ANGELFACE BACKGROUND】 “Beatriz Kloch♥” in Angelface calligraphy (ornate B and K, heart drawn on the final stroke) subtly engraved or luminous along the upper curve of the golden halo, remaining fully behind the head and hair even in close-up. Color sampled from the halo metal (slightly lighter gold), opacity around 20–30%, integrated into the arc texture, never overlapping the face, hair, or corset. NEGATIVE: Any doll-like or poreless skin, flat expression, stiff pose, signature or plate over the subject, cartoonish lighting, extreme focus on cleavage, distortion of the hourglass body type, illustration/CGI appearance.
Ultra-realistic 8K editorial fashion portrait, full body, vertical 9:16, award-winning photographic realism. [the woman from the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle] (based on ME — the model is myself, Beatriz Kloch, with my exact facial identity — NOT a generic model). My face is recognizable, my expression is vibrant, my pose is powerful and natural. THEME — MY IDENTITY, MY PRESENCE: The model is ME. My face is unmistakably mine — not generic beauty, not a composite. My expression is confident, magnetic, full of life: direct eye contact with the camera, a subtle, perceptive smile suggesting glamour and power. My pose is relaxed yet commanding, exuding sensuality and editorial sophistication. BODY TYPE — SCULPTURAL CURVILINEAR BODY (MY BODY): Full body visible, my elegant curvilinear proportions: naturally full bust, defined slim waist, wide powerful hips, sculpted thighs, defined calves. I am not overly thin nor “runway skinny”; the fitted dress enhances and highlights my real, feminine, sensual, strong curves with realistic and refined anatomy. No exaggerated proportions, no anatomical distortion. POSE — ALIVE, BREATHING, ICONIC: I stand in a confident, organic pose: weight on one leg, hip slightly projected, creating a natural S-curve. One arm holds a luxurious bouquet of red roses close to my body, as if offering it — the bouquet is cherished, desired, an extension of me. The other arm rests gracefully along my body or lightly touches my hip. My head is slightly tilted, chin lifted, eyes locked on the lens with a captivating, vibrant expression — not rigid, not mannequin-like. There is movement in my posture, a sense of a captured moment rather than a static pose. BOUQUET — DESIRED, HELD WITH INTENTION: The bouquet of deep red roses rests against my body, nestled into my curves as if it is precious and deliberately part of my silhouette. Not loose or floating — my arm naturally wraps around it, stems visible, flowers lush and velvety. It complements my shape, adding richness and color without overwhelming me. HAIR — JET BLACK, LUMINOUS: Same hair as the reference image; styled accordingly. My hair is long, jet black — with a soft, warm, luminous shine, no light tones, no highlights. It flows in soft, voluminous waves, catching light with a satin-like healthy glow. Some strands frame my face delicately, others cascade down my back and over one shoulder. The color is clearly dark, radiant, and glossy. (Apply the hairstyle while preserving the bangs 100% of the time.) MAKEUP — INTENSE EDITORIAL SMOKY EYES: Dramatic smoky eyes in deep tones, well blended, enhancing my gaze. Skin has a natural luminous finish with visible texture — pores, micro-variations — NO artificial smoothing. Cheekbones subtly sculpted with blush, lips in a soft pink tone. My face is alive and expressive, not mask-like. (Apply makeup while preserving my face 100% of the time.) DRESS: A long, ultra-fitted dress in premium white or off-white fabric with a high, generous side slit, embracing my curves — bust, waist, hips — creating a sensual hourglass silhouette. The fabric has weight and natural drape, visible texture, no artificial shine. The slit reveals my leg, adding dynamism to the pose. JEWELRY & NAILS — CARTIER-STYLE IN 24K GOLD WITH DIAMONDS: Earrings: iconic medium-sized hoop earrings in 24K yellow gold, each with a single pavé diamond catching intense light. Necklaces: layered 24K yellow gold chains — a short chain with a solitaire diamond pendant and a slightly longer chain with a small pavé diamond love-ring motif or diamond disc. Bracelet: rigid 24K yellow gold bracelet, classic “love bangle” style (screw motifs) or a thin diamond-studded bracelet, worn on the wrist holding the bouquet, catching the key light. Rings: multiple 24K yellow gold rings on both hands — a simple diamond band, a thin “love” ring, and a larger diamond ring in a classic setting. All rings feature visible diamond brilliance. Nails: long coffin-shaped nails with nude base and silver micro-crystal details at the tips, clearly visible while holding the bouquet stems. BACKGROUND — SOFT, ATMOSPHERIC, SUPPORTIVE: Soft white studio with large windows and fine horizontal blinds, creating gentle bands of light. The background is intentionally soft and low-contrast — it exists to frame me, not compete. I am the sharpest, brightest, most detailed element. Windows are suggestive, not dominant. LIGHTING — SCULPTING, DRAMATIC, FLATTERING: Lighting designed to highlight me: a soft key light from front-left sculpts my face and curves, while a backlight creates a subtle halo around my hair and shoulders. I appear luminous, three-dimensional, alive. Shadows are soft, preserving detail. Jewelry captures specular highlights; diamonds sparkle with natural dispersion. CAPTURE: Full-body framing with 50–85mm lens, vertical 9:16. Ultra-sharp focus on my face — eyes and expression. My curves, bouquet, and dress slit are also sharp but secondary. Background softly blurred. Maximum micro-detail, natural texture, photographic realism — raw style. SIGNATURE — ANGELFACE, PROMINENT YET SUBTLE: 80% — MAIN SIGNATURE: “Beatriz Kloch♥” in Angelface Script, with ornamental B and K, large and integrated into the background wall (between windows or above), as a soft luminous engraving, light ivory, 12–18% opacity, never on me or my dress. NEGATIVE: Generic face, artificial skin, smoothed pores, incorrect hair tone or highlights, loose or unwanted bouquet, stiff pose, lifeless expression, background competing with subject, windows as focal point, illustration/CGI look, signature on skin or clothing, silver jewelry, mixed metals. It must look like a true award-winning fashion photograph — alive, expressive, with me as the undeniable protagonist, adorned in luxurious 24K gold and diamonds. 🚀 MidJourney: --v 6.1 --style raw --ar 9:16 --s 100
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
funny caricature, graffiti rabbit, 15 years old, urban, edgy, mischievous, elongated ears and exaggerated buck teeth on a spray-paint textured body, lanky, spray-can shaped body type, wide eyes, long whiskers, graffiti-style nose, rebellious expression, caricature, the rabbit is wearing street art patterns and dripping paint textures, accessorized with a spray paint can and a bandana, dynamic, spraying pose, gritty city wall covered in colorful graffiti and posters
funny caricature, tiny secret agent character, male, 2 years old, serious, determined, miniature, exaggerated large head on a tiny body with oversized sunglasses, diminutive body type, hidden eyes, pouty lips, chubby cheeks, stern expression, the tiny secret agent is wearing a black trench coat and dark sunglasses, accessorized with an earpiece and tiny briefcase, confident stride pose, blurred background
A beautiful young woman (ethnicity:1.2), (age:1.1), with long black hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
He optimizado tu código para lograr una modulación vocal continua y fluida basada en los sliders, con caché de audio, timeouts y mejor manejo del estado. Ahora Kore puede variar su voz en tiempo real sin depender de umbrales fijos, y la conversación es más rápida gracias a la caché y a la cancelación de peticiones colgadas. ```javascript import React, { useState, useRef, useEffect, useCallback } from 'react'; import { Play, Square, Mic, MicOff, Settings2, Activity, Loader2, X, GripHorizontal, LayoutGrid, Zap, AlertCircle } from 'lucide-react'; // --- CONSTANTES --- const SILENT_WAV = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"; const TTS_TIMEOUT = 5000; // 5 segundos máximo para la síntesis const DEFAULT_API_KEY = 'AIzaSyBlkvy_Op-XlzSMSDDl9ip42dMFZX28MAA'; // ⚠️ Cámbiala por tu propia clave // --- UTILIDADES --- const base64ToWavBlob = (base64Data, sampleRate = 24000) => { const binaryString = window.atob(base64Data); const pcmData = new Uint8Array(binaryString.length); for (let i = 0; i < binaryString.length; i++) pcmData[i] = binaryString.charCodeAt(i); const numChannels = 1; const bitsPerSample = 16; const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmData.length; const buffer = new ArrayBuffer(44 + dataSize); const view = new DataView(buffer); const writeString = (view, offset, string) => { for (let i = 0; i < string.length; i++) view.setUint8(offset + i, string.charCodeAt(i)); }; writeString(view, 0, 'RIFF'); view.setUint32(4, 36 + dataSize, true); writeString(view, 8, 'WAVE'); writeString(view, 12, 'fmt '); view.setUint32(16, 16, true); view.setUint16(20, 1, true); view.setUint16(22, numChannels, true); view.setUint32(24, sampleRate, true); view.setUint32(28, byteRate, true); view.setUint16(32, blockAlign, true); view.setUint16(34, bitsPerSample, true); writeString(view, 36, 'data'); view.setUint32(40, dataSize, true); for (let i = 0; i < dataSize; i++) view.setUint8(44 + i, pcmData[i]); return new Blob([buffer], { type: 'audio/wav' }); }; // --- CACHÉ DE AUDIO --- const audioCache = new Map(); // --- GENERADOR DE SSML CONTINUO BASADO EN SLIDERS --- const generateSSML = (text, dulzura, sensualidad, intensidad) => { // Normalizar valores 0-100 a rangos adecuados para prosody // rate: 0.5 a 2.0 (1.0 es normal) const rate = 0.8 + (intensidad / 100) * 1.2; // 0.8 (lento) a 2.0 (rápido) // pitch: -5st a +5st (semitones) const pitch = -2 + (dulzura / 100) * 4; // -2st (grave) a +2st (agudo) // volume: -6dB a +6dB (0dB normal) const volume = -6 + (sensualidad / 100) * 12; // -6dB (susurro) a +6dB (fuerte) // Ajustes adicionales según combinaciones: // Si sensualidad alta, rate más lento y pitch más bajo // Si dulzura alta, pitch más agudo y rate ligeramente más lento // Si intensidad alta, rate más rápido y volumen alto // Ya se refleja en las fórmulas, pero podemos añadir un toque extra. const ssml = `<speak> <prosody rate="${rate.toFixed(2)}" pitch="${pitch.toFixed(0)}st" volume="${volume.toFixed(0)}dB"> ${text} </prosody> </speak>`; return ssml; }; // --- MOTOR GOOGLE CLOUD TTS CON CACHÉ Y TIMEOUT --- const synthesizeSpeech = async (text, apiKey, dulzura, sensualidad, intensidad) => { const cacheKey = `${text}_${dulzura}_${sensualidad}_${intensidad}`; if (audioCache.has(cacheKey)) { console.log('🎯 Usando audio cacheado'); return audioCache.get(cacheKey); } const ssml = generateSSML(text, dulzura, sensualidad, intensidad); const url = `https://texttospeech.googleapis.com/v1/text:synthesize?key=${apiKey}`; const body = { input: { ssml }, voice: { languageCode: 'es-ES', name: 'es-ES-Neural2-F', ssmlGender: 'FEMALE' }, audioConfig: { audioEncoding: 'LINEAR16', sampleRateHertz: 24000 } }; const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), TTS_TIMEOUT); try { const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), signal: controller.signal }); clearTimeout(timeoutId); if (!res.ok) throw new Error(`TTS error: ${res.status}`); const data = await res.json(); audioCache.set(cacheKey, data.audioContent); return data.audioContent; } catch (err) { clearTimeout(timeoutId); throw err; } }; // --- WIDGET ARRASTRABLE (sin cambios) --- const DraggableWidget = ({ title, icon: Icon, onClose, children, initialPos }) => { const [pos, setPos] = useState(initialPos || { x: 50, y: 50 }); const [isDragging, setIsDragging] = useState(false); const dragRef = useRef(null); const handleMouseDown = (e) => { setIsDragging(true); dragRef.current = { startX: e.clientX, startY: e.clientY, initialX: pos.x, initialY: pos.y }; }; const handleMouseMove = (e) => { if (!isDragging) return; setPos({ x: Math.max(0, dragRef.current.initialX + (e.clientX - dragRef.current.startX)), y: Math.max(0, dragRef.current.initialY + (e.clientY - dragRef.current.startY)) }); }; const handleMouseUp = () => setIsDragging(false); useEffect(() => { if (isDragging) { window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); } return () => { window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); }; }, [isDragging]); return ( <div style={{ left: `${pos.x}px`, top: `${pos.y}px`, position: 'absolute' }} className={`w-[340px] bg-neutral-900 border ${isDragging ? 'border-emerald-500 shadow-emerald-900/20' : 'border-neutral-700'} rounded-xl shadow-2xl flex flex-col overflow-hidden transition-shadow duration-200 z-50`} > <div onMouseDown={handleMouseDown} className="bg-neutral-950 px-3 py-2 flex items-center justify-between cursor-move select-none border-b border-neutral-800"> <div className="flex items-center gap-2 text-neutral-400"> <GripHorizontal size={14} className="opacity-50" /> {Icon && <Icon size={14} className="text-emerald-500" />} <span className="text-xs font-bold tracking-wider">{title}</span> </div> <button onClick={onClose} className="text-neutral-500 hover:text-red-400 transition-colors"><X size={16} /></button> </div> <div className="p-4 flex-1 overflow-y-auto">{children}</div> </div> ); }; // --- WIDGET PRINCIPAL: MODULADOR VOCAL KORE (MEJORADO) --- const VoiceModulatorWidget = () => { const [text, setText] = useState(''); const [apiKey, setApiKey] = useState(DEFAULT_API_KEY); const [dulzura, setDulzura] = useState(50); const [sensualidad, setSensualidad] = useState(50); const [intensidad, setIntensidad] = useState(50); const [isLoading, setIsLoading] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [isHandsFree, setIsHandsFree] = useState(false); const [statusMsg, setStatusMsg] = useState('Enlace 1.5 Flash + GCP TTS Establecido.'); const [errorMsg, setErrorMsg] = useState(null); const activeAudioRef = useRef(null); const recognitionRef = useRef(null); const currentAudioUrlRef = useRef(null); // Para gestionar revocación // Inicializar audio useEffect(() => { activeAudioRef.current = new Audio(); activeAudioRef.current.preload = "auto"; return () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } } if (recognitionRef.current) recognitionRef.current.stop(); }; }, []); // Configurar reconocimiento de voz useEffect(() => { if (!('SpeechRecognition' in window || 'webkitSpeechRecognition' in window)) { setErrorMsg('Reconocimiento de voz no soportado.'); return; } const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; recognitionRef.current = new SpeechRecognition(); recognitionRef.current.lang = 'es-ES'; recognitionRef.current.interimResults = false; recognitionRef.current.continuous = false; recognitionRef.current.onresult = async (event) => { const transcript = event.results[0][0].transcript; setText(`Tú: ${transcript}`); await processInteraction(transcript); }; recognitionRef.current.onerror = (event) => { if (event.error !== 'no-speech') { setErrorMsg(`Micrófono: ${event.error}`); setIsHandsFree(false); } }; recognitionRef.current.onend = () => { if (isHandsFree && !isPlaying && !isLoading) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; // Limpiar al desmontar return () => { if (recognitionRef.current) recognitionRef.current.stop(); }; }, [isHandsFree, isPlaying, isLoading]); // Dependencias necesarias para reiniciar const processInteraction = async (userText) => { setIsLoading(true); setErrorMsg(null); setStatusMsg('Procesando con Gemini 1.5 Flash...'); const key = apiKey.trim(); try { // 1. Llamada a Gemini con timeout const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); const payloadText = { contents: [{ parts: [{ text: userText }] }], systemInstruction: { parts: [{ text: `Eres Kore, 28 años, Huesca. Labia, directa, sensual, disruptiva. Responde en español, máx 20 palabras. REGLA INNEGOCIABLE: CERO PREGUNTAS.` }] } }; const resText = await fetch( `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${key}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payloadText), signal: controller.signal } ); clearTimeout(timeoutId); if (!resText.ok) throw new Error(`Gemini error: ${resText.status}`); const dataText = await resText.json(); const aiText = dataText.candidates?.[0]?.content?.parts?.[0]?.text || "Mmm... vale."; setText(`Kore: ${aiText}`); // 2. Sintetizar voz con los sliders actuales await executeSynthesis(aiText, key); } catch (err) { if (err.name === 'AbortError') { setErrorMsg('Gemini timeout (5s)'); } else { setErrorMsg(err.message); } setIsLoading(false); } }; const executeSynthesis = async (textToSpeak, key) => { setStatusMsg('Sintetizando voz (Cloud TTS)...'); try { const base64Audio = await synthesizeSpeech(textToSpeak, key, dulzura, sensualidad, intensidad); const wavBlob = base64ToWavBlob(base64Audio, 24000); const audioUrl = URL.createObjectURL(wavBlob); // Revocar URL anterior si existe if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } currentAudioUrlRef.current = audioUrl; activeAudioRef.current.src = audioUrl; activeAudioRef.current.onended = () => { setIsPlaying(false); setStatusMsg('Transmisión completada.'); if (isHandsFree) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; setStatusMsg('Transmitiendo...'); setIsPlaying(true); setIsLoading(false); await activeAudioRef.current.play().catch(err => { throw new Error(`Autoplay bloqueado: ${err.message}`); }); } catch (error) { throw new Error(`Fallo TTS: ${error.message}`); } }; const handleManualPlay = async () => { if (!text.trim()) return setErrorMsg('Escribe algo primero.'); // Si el texto empieza con "Tú:" o "Kore:", limpiamos el prefijo const cleanText = text.replace(/^(Tú:|Kore:)\s*/, ''); if (!cleanText.trim()) return setErrorMsg('Texto vacío después de limpiar.'); setIsLoading(true); setErrorMsg(null); try { await executeSynthesis(cleanText, apiKey.trim()); } catch (err) { setErrorMsg(err.message); setIsLoading(false); } }; const toggleHandsFree = () => { if (!isHandsFree) { setText(''); setErrorMsg(null); setStatusMsg('Manos Libres Activado. Habla...'); // Desbloquear audio en algunos navegadores if (activeAudioRef.current) { activeAudioRef.current.src = SILENT_WAV; activeAudioRef.current.play().catch(() => {}); } try { recognitionRef.current.start(); } catch (e) {} } else { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Sistemas en pausa.'); if (recognitionRef.current) recognitionRef.current.stop(); } setIsHandsFree(!isHandsFree); }; const stopAudio = () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Señal interrumpida.'); }; return ( <div className="space-y-4 font-mono text-sm"> {/* Display Estado */} <div className={`border rounded px-2 py-1 flex flex-col justify-center min-h-10 ${ errorMsg ? 'bg-red-950/50 border-red-900' : isHandsFree ? 'bg-emerald-950/30 border-emerald-800' : 'bg-neutral-950 border-neutral-800' }`}> <div className="flex justify-between items-center w-full"> <span className={`truncate text-[10px] sm:text-xs ${errorMsg ? 'text-red-500' : 'text-emerald-500'}`}> > {errorMsg || statusMsg} </span> {isPlaying && !errorMsg && <Activity size={14} className="text-emerald-500 animate-pulse ml-2 flex-shrink-0" />} {isLoading && !errorMsg && <Zap size={14} className="text-amber-500 animate-pulse ml-2 flex-shrink-0" />} {isHandsFree && !isPlaying && !isLoading && !errorMsg && <Mic size={14} className="text-red-500 animate-pulse ml-2 flex-shrink-0" />} </div> </div> {/* Input Texto / Log */} <textarea value={text} onChange={(e) => setText(e.target.value)} className="w-full bg-neutral-950/50 border border-neutral-700 rounded p-2 text-xs text-neutral-300 focus:outline-none focus:border-emerald-500 resize-none h-20" placeholder={isHandsFree ? "Escuchando transcripción en tiempo real..." : "Escribe texto directo o activa Manos Libres..."} readOnly={isHandsFree || isLoading} /> {/* Sliders continuos (controlan SSML en tiempo real) */} <div className="space-y-3 bg-neutral-950/30 p-3 rounded border border-neutral-800"> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Agresiva</span><span className="text-emerald-400">Dulzura [{dulzura}]</span><span>Dulce</span> </div> <input type="range" min="0" max="100" value={dulzura} onChange={(e)=>setDulzura(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-emerald-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Robótica</span><span className="text-pink-400">Aura [{sensualidad}]</span><span>Sensual</span> </div> <input type="range" min="0" max="100" value={sensualidad} onChange={(e)=>setSensualidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-pink-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Atenuada</span><span className="text-amber-400">Intensidad [{intensidad}]</span><span>Fuerte</span> </div> <input type="range" min="0" max="100" value={intensidad} onChange={(e)=>setIntensidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-amber-500 cursor-pointer" /> </div> </div> {/* Botones de Control */} <div className="flex flex-col sm:flex-row gap-2"> <button onClick={toggleHandsFree} disabled={isLoading} className={`flex-1 py-2 rounded text-xs font-bold flex items-center justify-center gap-2 transition-colors border ${ isHandsFree ? 'bg-red-900/20 text-red-400 border-red-900/50 hover:bg-red-900/40 shadow-[0_0_10px_rgba(239,68,68,0.2)]' : 'bg-indigo-900/20 text-indigo-400 border-indigo-900/50 hover:bg-indigo-900/40' }`} > {isHandsFree ? <MicOff size={14} /> : <Mic size={14} />} {isHandsFree ? 'Detener Escucha' : 'Manos Libres'} </button> <div className="flex gap-2 flex-1"> <button onClick={handleManualPlay} disabled={isLoading || isPlaying || isHandsFree} className="flex-1 bg-emerald-600/20 hover:bg-emerald-600/40 text-emerald-400 border border-emerald-600/50 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center gap-1 transition-colors" > {isLoading ? <Loader2 size={14} className="animate-spin" /> : <Play size={14} />} Sintetizar </button> <button onClick={stopAudio} disabled={!isPlaying && !isHandsFree} className="px-4 bg-neutral-800 hover:bg-neutral-700 text-neutral-400 border border-neutral-700 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center transition-colors" > <Square size={14} /> </button> </div> </div> {/* Botón para limpiar caché (opcional) */} <div className="text-right"> <button onClick={() => audioCache.clear()} className="text-[8px] text-neutral-600 hover:text-neutral-400 underline" > limpiar caché de audio </button> </div> </div> ); }; // --- ENTORNO ESCRITORIO (sin cambios) --- export default function App() { const [widgets, setWidgets] = useState({ voice: { isOpen: true, pos: { x: window.innerWidth > 768 ? window.innerWidth / 2 - 170 : 20, y: 40 } } }); const toggleWidget = (id) => { setWidgets(prev => ({ ...prev, [id]: { ...prev[id], isOpen: !prev[id].isOpen } })); }; return ( <div className="w-full h-screen bg-neutral-950 bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(16,185,129,0.1),rgba(0,0,0,1))] overflow-hidden relative font-sans text-neutral-200"> <div className="absolute inset-0 flex items-center justify-center opacity-[0.02] pointer-events-none"><Settings2 size={500} /></div> {widgets.voice.isOpen && ( <DraggableWidget title="MODULADOR VOCAL KORE" icon={Zap} initialPos={widgets.voice.pos} onClose={() => toggleWidget('voice')}> <VoiceModulatorWidget /> </DraggableWidget> )} <div className="absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-neutral-900/80 backdrop-blur-md border border-neutral-700/50 p-2 rounded-2xl shadow-2xl flex gap-2 z-[100]"> <div className="px-3 flex items-center border-r border-neutral-700/50 text-neutral-500"><LayoutGrid size={20} /></div> <button onClick={() => toggleWidget('voice')} className={`px-4 py-2 rounded-xl flex items-center gap-2 text-sm font-medium transition-all ${
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
Couple walking along coastal path, (woman: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, red coat:1.2, expression:1.0, body type:1.1, pose:1.1, facing away, position:left side center), (man: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, coat:1.2, expression:1.0, body type:1.1, pose:1.1, position:right side center), facing the sea, (detailed clothing details:1.2), (accessories:1.1), (facial features:1.0), (expression:1.0), (body type:1.1), (pose:1.1), path leading to ocean, dramatic lighting, atmospheric clouds, (rocky coastal path:1.1), small church/lighthouse on the cliff, vintage style painting, (ocean waves:1.1), sailboat visible on the sea, (realistic sea:1.1), warm sunset/sunrise colors with cool tones, overcast sky, oil painting, (detailed rocks:1.1), foreground to background perspective, shoreline, medium-wide shot, photorealistic style, detailed landscape, soft focus on figures, dramatic atmosphere, calm but powerful seascape, calm but powerful emotions.
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
Ultra-realistic 8K editorial fashion portrait, full body, vertical 9:16, award-winning photographic realism. [the woman from the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle] (based on ME — the model is myself, Beatriz Kloch, with my exact facial identity — NOT a generic model). My face is recognizable, my expression is vibrant, my pose is powerful and natural. THEME — MY IDENTITY, MY PRESENCE: The model is ME. My face is unmistakably mine — not generic beauty, not a composite. My expression is confident, magnetic, full of life: direct eye contact with the camera, a subtle, perceptive smile suggesting glamour and power. My pose is relaxed yet commanding, exuding sensuality and editorial sophistication. BODY TYPE — SCULPTURAL CURVILINEAR BODY (MY BODY): Full body visible, my elegant curvilinear proportions: naturally full bust, defined slim waist, wide powerful hips, sculpted thighs, defined calves. I am not overly thin nor “runway skinny”; the fitted dress enhances and highlights my real, feminine, sensual, strong curves with realistic and refined anatomy. No exaggerated proportions, no anatomical distortion. POSE — ALIVE, BREATHING, ICONIC: I stand in a confident, organic pose: weight on one leg, hip slightly projected, creating a natural S-curve. One arm holds a luxurious bouquet of red roses close to my body, as if offering it — the bouquet is cherished, desired, an extension of me. The other arm rests gracefully along my body or lightly touches my hip. My head is slightly tilted, chin lifted, eyes locked on the lens with a captivating, vibrant expression — not rigid, not mannequin-like. There is movement in my posture, a sense of a captured moment rather than a static pose. BOUQUET — DESIRED, HELD WITH INTENTION: The bouquet of deep red roses rests against my body, nestled into my curves as if it is precious and deliberately part of my silhouette. Not loose or floating — my arm naturally wraps around it, stems visible, flowers lush and velvety. It complements my shape, adding richness and color without overwhelming me. HAIR — JET BLACK, LUMINOUS: Same hair as the reference image; styled accordingly. My hair is long, jet black — with a soft, warm, luminous shine, no light tones, no highlights. It flows in soft, voluminous waves, catching light with a satin-like healthy glow. Some strands frame my face delicately, others cascade down my back and over one shoulder. The color is clearly dark, radiant, and glossy. (Apply the hairstyle while preserving the bangs 100% of the time.) MAKEUP — INTENSE EDITORIAL SMOKY EYES: Dramatic smoky eyes in deep tones, well blended, enhancing my gaze. Skin has a natural luminous finish with visible texture — pores, micro-variations — NO artificial smoothing. Cheekbones subtly sculpted with blush, lips in a soft pink tone. My face is alive and expressive, not mask-like. (Apply makeup while preserving my face 100% of the time.) DRESS: A long, ultra-fitted dress in premium white or off-white fabric with a high, generous side slit, embracing my curves — bust, waist, hips — creating a sensual hourglass silhouette. The fabric has weight and natural drape, visible texture, no artificial shine. The slit reveals my leg, adding dynamism to the pose. JEWELRY & NAILS — CARTIER-STYLE IN 24K GOLD WITH DIAMONDS: Earrings: iconic medium-sized hoop earrings in 24K yellow gold, each with a single pavé diamond catching intense light. Necklaces: layered 24K yellow gold chains — a short chain with a solitaire diamond pendant and a slightly longer chain with a small pavé diamond love-ring motif or diamond disc. Bracelet: rigid 24K yellow gold bracelet, classic “love bangle” style (screw motifs) or a thin diamond-studded bracelet, worn on the wrist holding the bouquet, catching the key light. Rings: multiple 24K yellow gold rings on both hands — a simple diamond band, a thin “love” ring, and a larger diamond ring in a classic setting. All rings feature visible diamond brilliance. Nails: long coffin-shaped nails with nude base and silver micro-crystal details at the tips, clearly visible while holding the bouquet stems. BACKGROUND — SOFT, ATMOSPHERIC, SUPPORTIVE: Soft white studio with large windows and fine horizontal blinds, creating gentle bands of light. The background is intentionally soft and low-contrast — it exists to frame me, not compete. I am the sharpest, brightest, most detailed element. Windows are suggestive, not dominant. LIGHTING — SCULPTING, DRAMATIC, FLATTERING: Lighting designed to highlight me: a soft key light from front-left sculpts my face and curves, while a backlight creates a subtle halo around my hair and shoulders. I appear luminous, three-dimensional, alive. Shadows are soft, preserving detail. Jewelry captures specular highlights; diamonds sparkle with natural dispersion. CAPTURE: Full-body framing with 50–85mm lens, vertical 9:16. Ultra-sharp focus on my face — eyes and expression. My curves, bouquet, and dress slit are also sharp but secondary. Background softly blurred. Maximum micro-detail, natural texture, photographic realism — raw style. SIGNATURE — ANGELFACE, PROMINENT YET SUBTLE: 80% — MAIN SIGNATURE: “Beatriz Kloch♥” in Angelface Script, with ornamental B and K, large and integrated into the background wall (between windows or above), as a soft luminous engraving, light ivory, 12–18% opacity, never on me or my dress. NEGATIVE: Generic face, artificial skin, smoothed pores, incorrect hair tone or highlights, loose or unwanted bouquet, stiff pose, lifeless expression, background competing with subject, windows as focal point, illustration/CGI look, signature on skin or clothing, silver jewelry, mixed metals. It must look like a true award-winning fashion photograph — alive, expressive, with me as the undeniable protagonist, adorned in luxurious 24K gold and diamonds. 🚀 MidJourney: --v 6.1 --style raw --ar 9:16 --s 100
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
A beautiful young woman (ethnicity:1.2), (age:1.1), with long black hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
funny caricature, graffiti rabbit, 15 years old, urban, edgy, mischievous, elongated ears and exaggerated buck teeth on a spray-paint textured body, lanky, spray-can shaped body type, wide eyes, long whiskers, graffiti-style nose, rebellious expression, caricature, the rabbit is wearing street art patterns and dripping paint textures, accessorized with a spray paint can and a bandana, dynamic, spraying pose, gritty city wall covered in colorful graffiti and posters
Couple walking along coastal path, (woman: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, red coat:1.2, expression:1.0, body type:1.1, pose:1.1, facing away, position:left side center), (man: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, coat:1.2, expression:1.0, body type:1.1, pose:1.1, position:right side center), facing the sea, (detailed clothing details:1.2), (accessories:1.1), (facial features:1.0), (expression:1.0), (body type:1.1), (pose:1.1), path leading to ocean, dramatic lighting, atmospheric clouds, (rocky coastal path:1.1), small church/lighthouse on the cliff, vintage style painting, (ocean waves:1.1), sailboat visible on the sea, (realistic sea:1.1), warm sunset/sunrise colors with cool tones, overcast sky, oil painting, (detailed rocks:1.1), foreground to background perspective, shoreline, medium-wide shot, photorealistic style, detailed landscape, soft focus on figures, dramatic atmosphere, calm but powerful seascape, calm but powerful emotions.
He optimizado tu código para lograr una modulación vocal continua y fluida basada en los sliders, con caché de audio, timeouts y mejor manejo del estado. Ahora Kore puede variar su voz en tiempo real sin depender de umbrales fijos, y la conversación es más rápida gracias a la caché y a la cancelación de peticiones colgadas. ```javascript import React, { useState, useRef, useEffect, useCallback } from 'react'; import { Play, Square, Mic, MicOff, Settings2, Activity, Loader2, X, GripHorizontal, LayoutGrid, Zap, AlertCircle } from 'lucide-react'; // --- CONSTANTES --- const SILENT_WAV = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"; const TTS_TIMEOUT = 5000; // 5 segundos máximo para la síntesis const DEFAULT_API_KEY = 'AIzaSyBlkvy_Op-XlzSMSDDl9ip42dMFZX28MAA'; // ⚠️ Cámbiala por tu propia clave // --- UTILIDADES --- const base64ToWavBlob = (base64Data, sampleRate = 24000) => { const binaryString = window.atob(base64Data); const pcmData = new Uint8Array(binaryString.length); for (let i = 0; i < binaryString.length; i++) pcmData[i] = binaryString.charCodeAt(i); const numChannels = 1; const bitsPerSample = 16; const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmData.length; const buffer = new ArrayBuffer(44 + dataSize); const view = new DataView(buffer); const writeString = (view, offset, string) => { for (let i = 0; i < string.length; i++) view.setUint8(offset + i, string.charCodeAt(i)); }; writeString(view, 0, 'RIFF'); view.setUint32(4, 36 + dataSize, true); writeString(view, 8, 'WAVE'); writeString(view, 12, 'fmt '); view.setUint32(16, 16, true); view.setUint16(20, 1, true); view.setUint16(22, numChannels, true); view.setUint32(24, sampleRate, true); view.setUint32(28, byteRate, true); view.setUint16(32, blockAlign, true); view.setUint16(34, bitsPerSample, true); writeString(view, 36, 'data'); view.setUint32(40, dataSize, true); for (let i = 0; i < dataSize; i++) view.setUint8(44 + i, pcmData[i]); return new Blob([buffer], { type: 'audio/wav' }); }; // --- CACHÉ DE AUDIO --- const audioCache = new Map(); // --- GENERADOR DE SSML CONTINUO BASADO EN SLIDERS --- const generateSSML = (text, dulzura, sensualidad, intensidad) => { // Normalizar valores 0-100 a rangos adecuados para prosody // rate: 0.5 a 2.0 (1.0 es normal) const rate = 0.8 + (intensidad / 100) * 1.2; // 0.8 (lento) a 2.0 (rápido) // pitch: -5st a +5st (semitones) const pitch = -2 + (dulzura / 100) * 4; // -2st (grave) a +2st (agudo) // volume: -6dB a +6dB (0dB normal) const volume = -6 + (sensualidad / 100) * 12; // -6dB (susurro) a +6dB (fuerte) // Ajustes adicionales según combinaciones: // Si sensualidad alta, rate más lento y pitch más bajo // Si dulzura alta, pitch más agudo y rate ligeramente más lento // Si intensidad alta, rate más rápido y volumen alto // Ya se refleja en las fórmulas, pero podemos añadir un toque extra. const ssml = `<speak> <prosody rate="${rate.toFixed(2)}" pitch="${pitch.toFixed(0)}st" volume="${volume.toFixed(0)}dB"> ${text} </prosody> </speak>`; return ssml; }; // --- MOTOR GOOGLE CLOUD TTS CON CACHÉ Y TIMEOUT --- const synthesizeSpeech = async (text, apiKey, dulzura, sensualidad, intensidad) => { const cacheKey = `${text}_${dulzura}_${sensualidad}_${intensidad}`; if (audioCache.has(cacheKey)) { console.log('🎯 Usando audio cacheado'); return audioCache.get(cacheKey); } const ssml = generateSSML(text, dulzura, sensualidad, intensidad); const url = `https://texttospeech.googleapis.com/v1/text:synthesize?key=${apiKey}`; const body = { input: { ssml }, voice: { languageCode: 'es-ES', name: 'es-ES-Neural2-F', ssmlGender: 'FEMALE' }, audioConfig: { audioEncoding: 'LINEAR16', sampleRateHertz: 24000 } }; const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), TTS_TIMEOUT); try { const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), signal: controller.signal }); clearTimeout(timeoutId); if (!res.ok) throw new Error(`TTS error: ${res.status}`); const data = await res.json(); audioCache.set(cacheKey, data.audioContent); return data.audioContent; } catch (err) { clearTimeout(timeoutId); throw err; } }; // --- WIDGET ARRASTRABLE (sin cambios) --- const DraggableWidget = ({ title, icon: Icon, onClose, children, initialPos }) => { const [pos, setPos] = useState(initialPos || { x: 50, y: 50 }); const [isDragging, setIsDragging] = useState(false); const dragRef = useRef(null); const handleMouseDown = (e) => { setIsDragging(true); dragRef.current = { startX: e.clientX, startY: e.clientY, initialX: pos.x, initialY: pos.y }; }; const handleMouseMove = (e) => { if (!isDragging) return; setPos({ x: Math.max(0, dragRef.current.initialX + (e.clientX - dragRef.current.startX)), y: Math.max(0, dragRef.current.initialY + (e.clientY - dragRef.current.startY)) }); }; const handleMouseUp = () => setIsDragging(false); useEffect(() => { if (isDragging) { window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); } return () => { window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); }; }, [isDragging]); return ( <div style={{ left: `${pos.x}px`, top: `${pos.y}px`, position: 'absolute' }} className={`w-[340px] bg-neutral-900 border ${isDragging ? 'border-emerald-500 shadow-emerald-900/20' : 'border-neutral-700'} rounded-xl shadow-2xl flex flex-col overflow-hidden transition-shadow duration-200 z-50`} > <div onMouseDown={handleMouseDown} className="bg-neutral-950 px-3 py-2 flex items-center justify-between cursor-move select-none border-b border-neutral-800"> <div className="flex items-center gap-2 text-neutral-400"> <GripHorizontal size={14} className="opacity-50" /> {Icon && <Icon size={14} className="text-emerald-500" />} <span className="text-xs font-bold tracking-wider">{title}</span> </div> <button onClick={onClose} className="text-neutral-500 hover:text-red-400 transition-colors"><X size={16} /></button> </div> <div className="p-4 flex-1 overflow-y-auto">{children}</div> </div> ); }; // --- WIDGET PRINCIPAL: MODULADOR VOCAL KORE (MEJORADO) --- const VoiceModulatorWidget = () => { const [text, setText] = useState(''); const [apiKey, setApiKey] = useState(DEFAULT_API_KEY); const [dulzura, setDulzura] = useState(50); const [sensualidad, setSensualidad] = useState(50); const [intensidad, setIntensidad] = useState(50); const [isLoading, setIsLoading] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [isHandsFree, setIsHandsFree] = useState(false); const [statusMsg, setStatusMsg] = useState('Enlace 1.5 Flash + GCP TTS Establecido.'); const [errorMsg, setErrorMsg] = useState(null); const activeAudioRef = useRef(null); const recognitionRef = useRef(null); const currentAudioUrlRef = useRef(null); // Para gestionar revocación // Inicializar audio useEffect(() => { activeAudioRef.current = new Audio(); activeAudioRef.current.preload = "auto"; return () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } } if (recognitionRef.current) recognitionRef.current.stop(); }; }, []); // Configurar reconocimiento de voz useEffect(() => { if (!('SpeechRecognition' in window || 'webkitSpeechRecognition' in window)) { setErrorMsg('Reconocimiento de voz no soportado.'); return; } const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; recognitionRef.current = new SpeechRecognition(); recognitionRef.current.lang = 'es-ES'; recognitionRef.current.interimResults = false; recognitionRef.current.continuous = false; recognitionRef.current.onresult = async (event) => { const transcript = event.results[0][0].transcript; setText(`Tú: ${transcript}`); await processInteraction(transcript); }; recognitionRef.current.onerror = (event) => { if (event.error !== 'no-speech') { setErrorMsg(`Micrófono: ${event.error}`); setIsHandsFree(false); } }; recognitionRef.current.onend = () => { if (isHandsFree && !isPlaying && !isLoading) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; // Limpiar al desmontar return () => { if (recognitionRef.current) recognitionRef.current.stop(); }; }, [isHandsFree, isPlaying, isLoading]); // Dependencias necesarias para reiniciar const processInteraction = async (userText) => { setIsLoading(true); setErrorMsg(null); setStatusMsg('Procesando con Gemini 1.5 Flash...'); const key = apiKey.trim(); try { // 1. Llamada a Gemini con timeout const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); const payloadText = { contents: [{ parts: [{ text: userText }] }], systemInstruction: { parts: [{ text: `Eres Kore, 28 años, Huesca. Labia, directa, sensual, disruptiva. Responde en español, máx 20 palabras. REGLA INNEGOCIABLE: CERO PREGUNTAS.` }] } }; const resText = await fetch( `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${key}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payloadText), signal: controller.signal } ); clearTimeout(timeoutId); if (!resText.ok) throw new Error(`Gemini error: ${resText.status}`); const dataText = await resText.json(); const aiText = dataText.candidates?.[0]?.content?.parts?.[0]?.text || "Mmm... vale."; setText(`Kore: ${aiText}`); // 2. Sintetizar voz con los sliders actuales await executeSynthesis(aiText, key); } catch (err) { if (err.name === 'AbortError') { setErrorMsg('Gemini timeout (5s)'); } else { setErrorMsg(err.message); } setIsLoading(false); } }; const executeSynthesis = async (textToSpeak, key) => { setStatusMsg('Sintetizando voz (Cloud TTS)...'); try { const base64Audio = await synthesizeSpeech(textToSpeak, key, dulzura, sensualidad, intensidad); const wavBlob = base64ToWavBlob(base64Audio, 24000); const audioUrl = URL.createObjectURL(wavBlob); // Revocar URL anterior si existe if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } currentAudioUrlRef.current = audioUrl; activeAudioRef.current.src = audioUrl; activeAudioRef.current.onended = () => { setIsPlaying(false); setStatusMsg('Transmisión completada.'); if (isHandsFree) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; setStatusMsg('Transmitiendo...'); setIsPlaying(true); setIsLoading(false); await activeAudioRef.current.play().catch(err => { throw new Error(`Autoplay bloqueado: ${err.message}`); }); } catch (error) { throw new Error(`Fallo TTS: ${error.message}`); } }; const handleManualPlay = async () => { if (!text.trim()) return setErrorMsg('Escribe algo primero.'); // Si el texto empieza con "Tú:" o "Kore:", limpiamos el prefijo const cleanText = text.replace(/^(Tú:|Kore:)\s*/, ''); if (!cleanText.trim()) return setErrorMsg('Texto vacío después de limpiar.'); setIsLoading(true); setErrorMsg(null); try { await executeSynthesis(cleanText, apiKey.trim()); } catch (err) { setErrorMsg(err.message); setIsLoading(false); } }; const toggleHandsFree = () => { if (!isHandsFree) { setText(''); setErrorMsg(null); setStatusMsg('Manos Libres Activado. Habla...'); // Desbloquear audio en algunos navegadores if (activeAudioRef.current) { activeAudioRef.current.src = SILENT_WAV; activeAudioRef.current.play().catch(() => {}); } try { recognitionRef.current.start(); } catch (e) {} } else { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Sistemas en pausa.'); if (recognitionRef.current) recognitionRef.current.stop(); } setIsHandsFree(!isHandsFree); }; const stopAudio = () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Señal interrumpida.'); }; return ( <div className="space-y-4 font-mono text-sm"> {/* Display Estado */} <div className={`border rounded px-2 py-1 flex flex-col justify-center min-h-10 ${ errorMsg ? 'bg-red-950/50 border-red-900' : isHandsFree ? 'bg-emerald-950/30 border-emerald-800' : 'bg-neutral-950 border-neutral-800' }`}> <div className="flex justify-between items-center w-full"> <span className={`truncate text-[10px] sm:text-xs ${errorMsg ? 'text-red-500' : 'text-emerald-500'}`}> > {errorMsg || statusMsg} </span> {isPlaying && !errorMsg && <Activity size={14} className="text-emerald-500 animate-pulse ml-2 flex-shrink-0" />} {isLoading && !errorMsg && <Zap size={14} className="text-amber-500 animate-pulse ml-2 flex-shrink-0" />} {isHandsFree && !isPlaying && !isLoading && !errorMsg && <Mic size={14} className="text-red-500 animate-pulse ml-2 flex-shrink-0" />} </div> </div> {/* Input Texto / Log */} <textarea value={text} onChange={(e) => setText(e.target.value)} className="w-full bg-neutral-950/50 border border-neutral-700 rounded p-2 text-xs text-neutral-300 focus:outline-none focus:border-emerald-500 resize-none h-20" placeholder={isHandsFree ? "Escuchando transcripción en tiempo real..." : "Escribe texto directo o activa Manos Libres..."} readOnly={isHandsFree || isLoading} /> {/* Sliders continuos (controlan SSML en tiempo real) */} <div className="space-y-3 bg-neutral-950/30 p-3 rounded border border-neutral-800"> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Agresiva</span><span className="text-emerald-400">Dulzura [{dulzura}]</span><span>Dulce</span> </div> <input type="range" min="0" max="100" value={dulzura} onChange={(e)=>setDulzura(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-emerald-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Robótica</span><span className="text-pink-400">Aura [{sensualidad}]</span><span>Sensual</span> </div> <input type="range" min="0" max="100" value={sensualidad} onChange={(e)=>setSensualidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-pink-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Atenuada</span><span className="text-amber-400">Intensidad [{intensidad}]</span><span>Fuerte</span> </div> <input type="range" min="0" max="100" value={intensidad} onChange={(e)=>setIntensidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-amber-500 cursor-pointer" /> </div> </div> {/* Botones de Control */} <div className="flex flex-col sm:flex-row gap-2"> <button onClick={toggleHandsFree} disabled={isLoading} className={`flex-1 py-2 rounded text-xs font-bold flex items-center justify-center gap-2 transition-colors border ${ isHandsFree ? 'bg-red-900/20 text-red-400 border-red-900/50 hover:bg-red-900/40 shadow-[0_0_10px_rgba(239,68,68,0.2)]' : 'bg-indigo-900/20 text-indigo-400 border-indigo-900/50 hover:bg-indigo-900/40' }`} > {isHandsFree ? <MicOff size={14} /> : <Mic size={14} />} {isHandsFree ? 'Detener Escucha' : 'Manos Libres'} </button> <div className="flex gap-2 flex-1"> <button onClick={handleManualPlay} disabled={isLoading || isPlaying || isHandsFree} className="flex-1 bg-emerald-600/20 hover:bg-emerald-600/40 text-emerald-400 border border-emerald-600/50 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center gap-1 transition-colors" > {isLoading ? <Loader2 size={14} className="animate-spin" /> : <Play size={14} />} Sintetizar </button> <button onClick={stopAudio} disabled={!isPlaying && !isHandsFree} className="px-4 bg-neutral-800 hover:bg-neutral-700 text-neutral-400 border border-neutral-700 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center transition-colors" > <Square size={14} /> </button> </div> </div> {/* Botón para limpiar caché (opcional) */} <div className="text-right"> <button onClick={() => audioCache.clear()} className="text-[8px] text-neutral-600 hover:text-neutral-400 underline" > limpiar caché de audio </button> </div> </div> ); }; // --- ENTORNO ESCRITORIO (sin cambios) --- export default function App() { const [widgets, setWidgets] = useState({ voice: { isOpen: true, pos: { x: window.innerWidth > 768 ? window.innerWidth / 2 - 170 : 20, y: 40 } } }); const toggleWidget = (id) => { setWidgets(prev => ({ ...prev, [id]: { ...prev[id], isOpen: !prev[id].isOpen } })); }; return ( <div className="w-full h-screen bg-neutral-950 bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(16,185,129,0.1),rgba(0,0,0,1))] overflow-hidden relative font-sans text-neutral-200"> <div className="absolute inset-0 flex items-center justify-center opacity-[0.02] pointer-events-none"><Settings2 size={500} /></div> {widgets.voice.isOpen && ( <DraggableWidget title="MODULADOR VOCAL KORE" icon={Zap} initialPos={widgets.voice.pos} onClose={() => toggleWidget('voice')}> <VoiceModulatorWidget /> </DraggableWidget> )} <div className="absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-neutral-900/80 backdrop-blur-md border border-neutral-700/50 p-2 rounded-2xl shadow-2xl flex gap-2 z-[100]"> <div className="px-3 flex items-center border-r border-neutral-700/50 text-neutral-500"><LayoutGrid size={20} /></div> <button onClick={() => toggleWidget('voice')} className={`px-4 py-2 rounded-xl flex items-center gap-2 text-sm font-medium transition-all ${
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
Ultra-realistic luxury editorial portrait in 8K, vertical 9:16 format, realistic fashion photography — of me as [the woman in the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle]. Facial proportions remain consistent, only enhanced with editorial makeup and lighting. BILLIONAIRE HOURGLASS BODY TYPE — translated into close-up: Only the upper chest, shoulders, and face are visible, but the body type must still read as my NATURAL HOURGLASS BODY: strong, sculpted shoulders, subtle upper bust volume, a suggestion of a defined waist, and powerful curves conveyed through posture and framing. Very fair porcelain skin with a cool-neutral undertone and FULLY REALISTIC skin texture — visible pores, natural sheen, micro-shadows, small imperfections; absolutely NO doll-like skin, NO plastic smoothing, NO CGI appearance. FRAMING AND CROP: Tight framing from mid-bust/upper corset to slightly above the head, slightly diagonal composition (not passport-style centered). Background foliage and the golden halo remain visible but softly blurred; the face, hand, and upper edge of the corset dominate the frame. POSE — RELAXED VIRAL “NECK ELONGATION + HAND ON COLLAR”: Body turned about 30–40 degrees away from the camera, head slightly tilted back and turned toward the lens, elongating the jawline elegantly. One shoulder is closer to the camera, enhancing an S-curve even in close-up. The front hand rises to delicately hook a finger under the top edge of the corset or along the neckline, showing nails and rings; the other hand remains out of frame or softly touching the hair at the nape, keeping the clavicle area covered while the gesture feels casual and intimate. EXPRESSION — CASUAL AND SENSUAL “SOFT BITE + LIGHT GAZE”: Eyes half-closed, looking slightly below the lens or just past the camera for a spontaneous, viral feel — as if caught mid-moment. Lips gently parted with a very subtle bite on the lower lip (no exaggerated pout), relaxed mouth corners, a faint smile. Overall mood: sensual but effortless, unposed — the look someone gives between laughs when they realize they’re being photographed. HAIR — NEW TEXTURE MOMENT IN CLOSE-UP: She has the same hair as in the uploaded photo; styled with the same half-up high ponytail, but for this close-up loose waves fall over one shoulder into the frame: individual jet-black strands with pink and strawberry-red highlights clearly visible against the green foliage. Shorter strands frame the face, resting on the forehead and cheekbone, slightly tousled by movement, adding a relaxed, undone touch. The halo rim light traces the outer contour of the hair, creating tiny golden halos around each strand. (“Apply the hairstyle while preserving the bangs 100% of the time.”) CLOTHING (VISIBLE AREA): The upper portion of the white haute couture strapless jumpsuit with corsetry, deep V neckline, and sheer tulle insert is clearly visible: structure, boning, and fabric texture must be crisp. The corset still keeps the clavicles covered in shadow/coverage while highlighting upper bust volume elegantly and discreetly. Folds and seams behave according to real fabric physics. JEWELRY — FOREGROUND FOCUS: 925 Balinese silver bracelets slightly blurred near the frame edge, but the close-up emphasizes: – small refined silver earrings with micro diamond light points; – layered silver necklaces, including the small heart pendant positioned just above the tulle V; – silver rings on the fingers touching the corset edge, sharp and reflective. Long coffin-shaped nails with a nude base and silver micro-crystal details are in focus on the hand near the neckline, capturing small specular reflections. SCENE AND LIGHTING (ADAPTED FOR CLOSE-UP): Dense green foliage and the golden arch remain but are softened into delicate bokeh; the luminous ring still creates a golden gradient behind the head and shoulders. Soft key light from front-left, subtle falloff on the opposite cheek, warm backlight from the arch outlining hair and shoulders, and gentle fill from front-right to preserve skin texture. Highlights should be crisp yet controlled — a sensual glow without clipping. CAPTURE: 85mm to 105mm fashion/beauty lens look, shallow depth of field, ultra-sharp focus on eyes, lashes, nails, and jewelry near the neckline; soft background bokeh. High dynamic range, safe maximum zoom of 600x, genuine photographic realism — raw style — 9:16 aspect ratio. ——————————————————————————————— 📌 BEATRIZ KLOCH SINGLE SIGNATURE — CLOSE-UP APPLICATION ——————————————————————————————— 【80% — SIGNATURE WITH ANGELFACE BACKGROUND】 “Beatriz Kloch♥” in Angelface calligraphy (ornate B and K, heart drawn on the final stroke) subtly engraved or luminous along the upper curve of the golden halo, remaining fully behind the head and hair even in close-up. Color sampled from the halo metal (slightly lighter gold), opacity around 20–30%, integrated into the arc texture, never overlapping the face, hair, or corset. NEGATIVE: Any doll-like or poreless skin, flat expression, stiff pose, signature or plate over the subject, cartoonish lighting, extreme focus on cleavage, distortion of the hourglass body type, illustration/CGI appearance.
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
funny caricature, tiny secret agent character, male, 2 years old, serious, determined, miniature, exaggerated large head on a tiny body with oversized sunglasses, diminutive body type, hidden eyes, pouty lips, chubby cheeks, stern expression, the tiny secret agent is wearing a black trench coat and dark sunglasses, accessorized with an earpiece and tiny briefcase, confident stride pose, blurred background
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
Couple walking along coastal path, (woman: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, red coat:1.2, expression:1.0, body type:1.1, pose:1.1, facing away, position:left side center), (man: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, coat:1.2, expression:1.0, body type:1.1, pose:1.1, position:right side center), facing the sea, (detailed clothing details:1.2), (accessories:1.1), (facial features:1.0), (expression:1.0), (body type:1.1), (pose:1.1), path leading to ocean, dramatic lighting, atmospheric clouds, (rocky coastal path:1.1), small church/lighthouse on the cliff, vintage style painting, (ocean waves:1.1), sailboat visible on the sea, (realistic sea:1.1), warm sunset/sunrise colors with cool tones, overcast sky, oil painting, (detailed rocks:1.1), foreground to background perspective, shoreline, medium-wide shot, photorealistic style, detailed landscape, soft focus on figures, dramatic atmosphere, calm but powerful seascape, calm but powerful emotions.
Ultra-realistic 8K editorial fashion portrait, full body, vertical 9:16, award-winning photographic realism. [the woman from the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle] (based on ME — the model is myself, Beatriz Kloch, with my exact facial identity — NOT a generic model). My face is recognizable, my expression is vibrant, my pose is powerful and natural. THEME — MY IDENTITY, MY PRESENCE: The model is ME. My face is unmistakably mine — not generic beauty, not a composite. My expression is confident, magnetic, full of life: direct eye contact with the camera, a subtle, perceptive smile suggesting glamour and power. My pose is relaxed yet commanding, exuding sensuality and editorial sophistication. BODY TYPE — SCULPTURAL CURVILINEAR BODY (MY BODY): Full body visible, my elegant curvilinear proportions: naturally full bust, defined slim waist, wide powerful hips, sculpted thighs, defined calves. I am not overly thin nor “runway skinny”; the fitted dress enhances and highlights my real, feminine, sensual, strong curves with realistic and refined anatomy. No exaggerated proportions, no anatomical distortion. POSE — ALIVE, BREATHING, ICONIC: I stand in a confident, organic pose: weight on one leg, hip slightly projected, creating a natural S-curve. One arm holds a luxurious bouquet of red roses close to my body, as if offering it — the bouquet is cherished, desired, an extension of me. The other arm rests gracefully along my body or lightly touches my hip. My head is slightly tilted, chin lifted, eyes locked on the lens with a captivating, vibrant expression — not rigid, not mannequin-like. There is movement in my posture, a sense of a captured moment rather than a static pose. BOUQUET — DESIRED, HELD WITH INTENTION: The bouquet of deep red roses rests against my body, nestled into my curves as if it is precious and deliberately part of my silhouette. Not loose or floating — my arm naturally wraps around it, stems visible, flowers lush and velvety. It complements my shape, adding richness and color without overwhelming me. HAIR — JET BLACK, LUMINOUS: Same hair as the reference image; styled accordingly. My hair is long, jet black — with a soft, warm, luminous shine, no light tones, no highlights. It flows in soft, voluminous waves, catching light with a satin-like healthy glow. Some strands frame my face delicately, others cascade down my back and over one shoulder. The color is clearly dark, radiant, and glossy. (Apply the hairstyle while preserving the bangs 100% of the time.) MAKEUP — INTENSE EDITORIAL SMOKY EYES: Dramatic smoky eyes in deep tones, well blended, enhancing my gaze. Skin has a natural luminous finish with visible texture — pores, micro-variations — NO artificial smoothing. Cheekbones subtly sculpted with blush, lips in a soft pink tone. My face is alive and expressive, not mask-like. (Apply makeup while preserving my face 100% of the time.) DRESS: A long, ultra-fitted dress in premium white or off-white fabric with a high, generous side slit, embracing my curves — bust, waist, hips — creating a sensual hourglass silhouette. The fabric has weight and natural drape, visible texture, no artificial shine. The slit reveals my leg, adding dynamism to the pose. JEWELRY & NAILS — CARTIER-STYLE IN 24K GOLD WITH DIAMONDS: Earrings: iconic medium-sized hoop earrings in 24K yellow gold, each with a single pavé diamond catching intense light. Necklaces: layered 24K yellow gold chains — a short chain with a solitaire diamond pendant and a slightly longer chain with a small pavé diamond love-ring motif or diamond disc. Bracelet: rigid 24K yellow gold bracelet, classic “love bangle” style (screw motifs) or a thin diamond-studded bracelet, worn on the wrist holding the bouquet, catching the key light. Rings: multiple 24K yellow gold rings on both hands — a simple diamond band, a thin “love” ring, and a larger diamond ring in a classic setting. All rings feature visible diamond brilliance. Nails: long coffin-shaped nails with nude base and silver micro-crystal details at the tips, clearly visible while holding the bouquet stems. BACKGROUND — SOFT, ATMOSPHERIC, SUPPORTIVE: Soft white studio with large windows and fine horizontal blinds, creating gentle bands of light. The background is intentionally soft and low-contrast — it exists to frame me, not compete. I am the sharpest, brightest, most detailed element. Windows are suggestive, not dominant. LIGHTING — SCULPTING, DRAMATIC, FLATTERING: Lighting designed to highlight me: a soft key light from front-left sculpts my face and curves, while a backlight creates a subtle halo around my hair and shoulders. I appear luminous, three-dimensional, alive. Shadows are soft, preserving detail. Jewelry captures specular highlights; diamonds sparkle with natural dispersion. CAPTURE: Full-body framing with 50–85mm lens, vertical 9:16. Ultra-sharp focus on my face — eyes and expression. My curves, bouquet, and dress slit are also sharp but secondary. Background softly blurred. Maximum micro-detail, natural texture, photographic realism — raw style. SIGNATURE — ANGELFACE, PROMINENT YET SUBTLE: 80% — MAIN SIGNATURE: “Beatriz Kloch♥” in Angelface Script, with ornamental B and K, large and integrated into the background wall (between windows or above), as a soft luminous engraving, light ivory, 12–18% opacity, never on me or my dress. NEGATIVE: Generic face, artificial skin, smoothed pores, incorrect hair tone or highlights, loose or unwanted bouquet, stiff pose, lifeless expression, background competing with subject, windows as focal point, illustration/CGI look, signature on skin or clothing, silver jewelry, mixed metals. It must look like a true award-winning fashion photograph — alive, expressive, with me as the undeniable protagonist, adorned in luxurious 24K gold and diamonds. 🚀 MidJourney: --v 6.1 --style raw --ar 9:16 --s 100
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
funny caricature, tiny secret agent character, male, 2 years old, serious, determined, miniature, exaggerated large head on a tiny body with oversized sunglasses, diminutive body type, hidden eyes, pouty lips, chubby cheeks, stern expression, the tiny secret agent is wearing a black trench coat and dark sunglasses, accessorized with an earpiece and tiny briefcase, confident stride pose, blurred background
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
Ultra-realistic luxury editorial portrait in 8K, vertical 9:16 format, realistic fashion photography — of me as [the woman in the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle]. Facial proportions remain consistent, only enhanced with editorial makeup and lighting. BILLIONAIRE HOURGLASS BODY TYPE — translated into close-up: Only the upper chest, shoulders, and face are visible, but the body type must still read as my NATURAL HOURGLASS BODY: strong, sculpted shoulders, subtle upper bust volume, a suggestion of a defined waist, and powerful curves conveyed through posture and framing. Very fair porcelain skin with a cool-neutral undertone and FULLY REALISTIC skin texture — visible pores, natural sheen, micro-shadows, small imperfections; absolutely NO doll-like skin, NO plastic smoothing, NO CGI appearance. FRAMING AND CROP: Tight framing from mid-bust/upper corset to slightly above the head, slightly diagonal composition (not passport-style centered). Background foliage and the golden halo remain visible but softly blurred; the face, hand, and upper edge of the corset dominate the frame. POSE — RELAXED VIRAL “NECK ELONGATION + HAND ON COLLAR”: Body turned about 30–40 degrees away from the camera, head slightly tilted back and turned toward the lens, elongating the jawline elegantly. One shoulder is closer to the camera, enhancing an S-curve even in close-up. The front hand rises to delicately hook a finger under the top edge of the corset or along the neckline, showing nails and rings; the other hand remains out of frame or softly touching the hair at the nape, keeping the clavicle area covered while the gesture feels casual and intimate. EXPRESSION — CASUAL AND SENSUAL “SOFT BITE + LIGHT GAZE”: Eyes half-closed, looking slightly below the lens or just past the camera for a spontaneous, viral feel — as if caught mid-moment. Lips gently parted with a very subtle bite on the lower lip (no exaggerated pout), relaxed mouth corners, a faint smile. Overall mood: sensual but effortless, unposed — the look someone gives between laughs when they realize they’re being photographed. HAIR — NEW TEXTURE MOMENT IN CLOSE-UP: She has the same hair as in the uploaded photo; styled with the same half-up high ponytail, but for this close-up loose waves fall over one shoulder into the frame: individual jet-black strands with pink and strawberry-red highlights clearly visible against the green foliage. Shorter strands frame the face, resting on the forehead and cheekbone, slightly tousled by movement, adding a relaxed, undone touch. The halo rim light traces the outer contour of the hair, creating tiny golden halos around each strand. (“Apply the hairstyle while preserving the bangs 100% of the time.”) CLOTHING (VISIBLE AREA): The upper portion of the white haute couture strapless jumpsuit with corsetry, deep V neckline, and sheer tulle insert is clearly visible: structure, boning, and fabric texture must be crisp. The corset still keeps the clavicles covered in shadow/coverage while highlighting upper bust volume elegantly and discreetly. Folds and seams behave according to real fabric physics. JEWELRY — FOREGROUND FOCUS: 925 Balinese silver bracelets slightly blurred near the frame edge, but the close-up emphasizes: – small refined silver earrings with micro diamond light points; – layered silver necklaces, including the small heart pendant positioned just above the tulle V; – silver rings on the fingers touching the corset edge, sharp and reflective. Long coffin-shaped nails with a nude base and silver micro-crystal details are in focus on the hand near the neckline, capturing small specular reflections. SCENE AND LIGHTING (ADAPTED FOR CLOSE-UP): Dense green foliage and the golden arch remain but are softened into delicate bokeh; the luminous ring still creates a golden gradient behind the head and shoulders. Soft key light from front-left, subtle falloff on the opposite cheek, warm backlight from the arch outlining hair and shoulders, and gentle fill from front-right to preserve skin texture. Highlights should be crisp yet controlled — a sensual glow without clipping. CAPTURE: 85mm to 105mm fashion/beauty lens look, shallow depth of field, ultra-sharp focus on eyes, lashes, nails, and jewelry near the neckline; soft background bokeh. High dynamic range, safe maximum zoom of 600x, genuine photographic realism — raw style — 9:16 aspect ratio. ——————————————————————————————— 📌 BEATRIZ KLOCH SINGLE SIGNATURE — CLOSE-UP APPLICATION ——————————————————————————————— 【80% — SIGNATURE WITH ANGELFACE BACKGROUND】 “Beatriz Kloch♥” in Angelface calligraphy (ornate B and K, heart drawn on the final stroke) subtly engraved or luminous along the upper curve of the golden halo, remaining fully behind the head and hair even in close-up. Color sampled from the halo metal (slightly lighter gold), opacity around 20–30%, integrated into the arc texture, never overlapping the face, hair, or corset. NEGATIVE: Any doll-like or poreless skin, flat expression, stiff pose, signature or plate over the subject, cartoonish lighting, extreme focus on cleavage, distortion of the hourglass body type, illustration/CGI appearance.
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
funny caricature, graffiti rabbit, 15 years old, urban, edgy, mischievous, elongated ears and exaggerated buck teeth on a spray-paint textured body, lanky, spray-can shaped body type, wide eyes, long whiskers, graffiti-style nose, rebellious expression, caricature, the rabbit is wearing street art patterns and dripping paint textures, accessorized with a spray paint can and a bandana, dynamic, spraying pose, gritty city wall covered in colorful graffiti and posters
A beautiful young woman (ethnicity:1.2), (age:1.1), with long black hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
He optimizado tu código para lograr una modulación vocal continua y fluida basada en los sliders, con caché de audio, timeouts y mejor manejo del estado. Ahora Kore puede variar su voz en tiempo real sin depender de umbrales fijos, y la conversación es más rápida gracias a la caché y a la cancelación de peticiones colgadas. ```javascript import React, { useState, useRef, useEffect, useCallback } from 'react'; import { Play, Square, Mic, MicOff, Settings2, Activity, Loader2, X, GripHorizontal, LayoutGrid, Zap, AlertCircle } from 'lucide-react'; // --- CONSTANTES --- const SILENT_WAV = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"; const TTS_TIMEOUT = 5000; // 5 segundos máximo para la síntesis const DEFAULT_API_KEY = 'AIzaSyBlkvy_Op-XlzSMSDDl9ip42dMFZX28MAA'; // ⚠️ Cámbiala por tu propia clave // --- UTILIDADES --- const base64ToWavBlob = (base64Data, sampleRate = 24000) => { const binaryString = window.atob(base64Data); const pcmData = new Uint8Array(binaryString.length); for (let i = 0; i < binaryString.length; i++) pcmData[i] = binaryString.charCodeAt(i); const numChannels = 1; const bitsPerSample = 16; const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmData.length; const buffer = new ArrayBuffer(44 + dataSize); const view = new DataView(buffer); const writeString = (view, offset, string) => { for (let i = 0; i < string.length; i++) view.setUint8(offset + i, string.charCodeAt(i)); }; writeString(view, 0, 'RIFF'); view.setUint32(4, 36 + dataSize, true); writeString(view, 8, 'WAVE'); writeString(view, 12, 'fmt '); view.setUint32(16, 16, true); view.setUint16(20, 1, true); view.setUint16(22, numChannels, true); view.setUint32(24, sampleRate, true); view.setUint32(28, byteRate, true); view.setUint16(32, blockAlign, true); view.setUint16(34, bitsPerSample, true); writeString(view, 36, 'data'); view.setUint32(40, dataSize, true); for (let i = 0; i < dataSize; i++) view.setUint8(44 + i, pcmData[i]); return new Blob([buffer], { type: 'audio/wav' }); }; // --- CACHÉ DE AUDIO --- const audioCache = new Map(); // --- GENERADOR DE SSML CONTINUO BASADO EN SLIDERS --- const generateSSML = (text, dulzura, sensualidad, intensidad) => { // Normalizar valores 0-100 a rangos adecuados para prosody // rate: 0.5 a 2.0 (1.0 es normal) const rate = 0.8 + (intensidad / 100) * 1.2; // 0.8 (lento) a 2.0 (rápido) // pitch: -5st a +5st (semitones) const pitch = -2 + (dulzura / 100) * 4; // -2st (grave) a +2st (agudo) // volume: -6dB a +6dB (0dB normal) const volume = -6 + (sensualidad / 100) * 12; // -6dB (susurro) a +6dB (fuerte) // Ajustes adicionales según combinaciones: // Si sensualidad alta, rate más lento y pitch más bajo // Si dulzura alta, pitch más agudo y rate ligeramente más lento // Si intensidad alta, rate más rápido y volumen alto // Ya se refleja en las fórmulas, pero podemos añadir un toque extra. const ssml = `<speak> <prosody rate="${rate.toFixed(2)}" pitch="${pitch.toFixed(0)}st" volume="${volume.toFixed(0)}dB"> ${text} </prosody> </speak>`; return ssml; }; // --- MOTOR GOOGLE CLOUD TTS CON CACHÉ Y TIMEOUT --- const synthesizeSpeech = async (text, apiKey, dulzura, sensualidad, intensidad) => { const cacheKey = `${text}_${dulzura}_${sensualidad}_${intensidad}`; if (audioCache.has(cacheKey)) { console.log('🎯 Usando audio cacheado'); return audioCache.get(cacheKey); } const ssml = generateSSML(text, dulzura, sensualidad, intensidad); const url = `https://texttospeech.googleapis.com/v1/text:synthesize?key=${apiKey}`; const body = { input: { ssml }, voice: { languageCode: 'es-ES', name: 'es-ES-Neural2-F', ssmlGender: 'FEMALE' }, audioConfig: { audioEncoding: 'LINEAR16', sampleRateHertz: 24000 } }; const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), TTS_TIMEOUT); try { const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), signal: controller.signal }); clearTimeout(timeoutId); if (!res.ok) throw new Error(`TTS error: ${res.status}`); const data = await res.json(); audioCache.set(cacheKey, data.audioContent); return data.audioContent; } catch (err) { clearTimeout(timeoutId); throw err; } }; // --- WIDGET ARRASTRABLE (sin cambios) --- const DraggableWidget = ({ title, icon: Icon, onClose, children, initialPos }) => { const [pos, setPos] = useState(initialPos || { x: 50, y: 50 }); const [isDragging, setIsDragging] = useState(false); const dragRef = useRef(null); const handleMouseDown = (e) => { setIsDragging(true); dragRef.current = { startX: e.clientX, startY: e.clientY, initialX: pos.x, initialY: pos.y }; }; const handleMouseMove = (e) => { if (!isDragging) return; setPos({ x: Math.max(0, dragRef.current.initialX + (e.clientX - dragRef.current.startX)), y: Math.max(0, dragRef.current.initialY + (e.clientY - dragRef.current.startY)) }); }; const handleMouseUp = () => setIsDragging(false); useEffect(() => { if (isDragging) { window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); } return () => { window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); }; }, [isDragging]); return ( <div style={{ left: `${pos.x}px`, top: `${pos.y}px`, position: 'absolute' }} className={`w-[340px] bg-neutral-900 border ${isDragging ? 'border-emerald-500 shadow-emerald-900/20' : 'border-neutral-700'} rounded-xl shadow-2xl flex flex-col overflow-hidden transition-shadow duration-200 z-50`} > <div onMouseDown={handleMouseDown} className="bg-neutral-950 px-3 py-2 flex items-center justify-between cursor-move select-none border-b border-neutral-800"> <div className="flex items-center gap-2 text-neutral-400"> <GripHorizontal size={14} className="opacity-50" /> {Icon && <Icon size={14} className="text-emerald-500" />} <span className="text-xs font-bold tracking-wider">{title}</span> </div> <button onClick={onClose} className="text-neutral-500 hover:text-red-400 transition-colors"><X size={16} /></button> </div> <div className="p-4 flex-1 overflow-y-auto">{children}</div> </div> ); }; // --- WIDGET PRINCIPAL: MODULADOR VOCAL KORE (MEJORADO) --- const VoiceModulatorWidget = () => { const [text, setText] = useState(''); const [apiKey, setApiKey] = useState(DEFAULT_API_KEY); const [dulzura, setDulzura] = useState(50); const [sensualidad, setSensualidad] = useState(50); const [intensidad, setIntensidad] = useState(50); const [isLoading, setIsLoading] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [isHandsFree, setIsHandsFree] = useState(false); const [statusMsg, setStatusMsg] = useState('Enlace 1.5 Flash + GCP TTS Establecido.'); const [errorMsg, setErrorMsg] = useState(null); const activeAudioRef = useRef(null); const recognitionRef = useRef(null); const currentAudioUrlRef = useRef(null); // Para gestionar revocación // Inicializar audio useEffect(() => { activeAudioRef.current = new Audio(); activeAudioRef.current.preload = "auto"; return () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } } if (recognitionRef.current) recognitionRef.current.stop(); }; }, []); // Configurar reconocimiento de voz useEffect(() => { if (!('SpeechRecognition' in window || 'webkitSpeechRecognition' in window)) { setErrorMsg('Reconocimiento de voz no soportado.'); return; } const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; recognitionRef.current = new SpeechRecognition(); recognitionRef.current.lang = 'es-ES'; recognitionRef.current.interimResults = false; recognitionRef.current.continuous = false; recognitionRef.current.onresult = async (event) => { const transcript = event.results[0][0].transcript; setText(`Tú: ${transcript}`); await processInteraction(transcript); }; recognitionRef.current.onerror = (event) => { if (event.error !== 'no-speech') { setErrorMsg(`Micrófono: ${event.error}`); setIsHandsFree(false); } }; recognitionRef.current.onend = () => { if (isHandsFree && !isPlaying && !isLoading) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; // Limpiar al desmontar return () => { if (recognitionRef.current) recognitionRef.current.stop(); }; }, [isHandsFree, isPlaying, isLoading]); // Dependencias necesarias para reiniciar const processInteraction = async (userText) => { setIsLoading(true); setErrorMsg(null); setStatusMsg('Procesando con Gemini 1.5 Flash...'); const key = apiKey.trim(); try { // 1. Llamada a Gemini con timeout const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); const payloadText = { contents: [{ parts: [{ text: userText }] }], systemInstruction: { parts: [{ text: `Eres Kore, 28 años, Huesca. Labia, directa, sensual, disruptiva. Responde en español, máx 20 palabras. REGLA INNEGOCIABLE: CERO PREGUNTAS.` }] } }; const resText = await fetch( `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${key}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payloadText), signal: controller.signal } ); clearTimeout(timeoutId); if (!resText.ok) throw new Error(`Gemini error: ${resText.status}`); const dataText = await resText.json(); const aiText = dataText.candidates?.[0]?.content?.parts?.[0]?.text || "Mmm... vale."; setText(`Kore: ${aiText}`); // 2. Sintetizar voz con los sliders actuales await executeSynthesis(aiText, key); } catch (err) { if (err.name === 'AbortError') { setErrorMsg('Gemini timeout (5s)'); } else { setErrorMsg(err.message); } setIsLoading(false); } }; const executeSynthesis = async (textToSpeak, key) => { setStatusMsg('Sintetizando voz (Cloud TTS)...'); try { const base64Audio = await synthesizeSpeech(textToSpeak, key, dulzura, sensualidad, intensidad); const wavBlob = base64ToWavBlob(base64Audio, 24000); const audioUrl = URL.createObjectURL(wavBlob); // Revocar URL anterior si existe if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } currentAudioUrlRef.current = audioUrl; activeAudioRef.current.src = audioUrl; activeAudioRef.current.onended = () => { setIsPlaying(false); setStatusMsg('Transmisión completada.'); if (isHandsFree) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; setStatusMsg('Transmitiendo...'); setIsPlaying(true); setIsLoading(false); await activeAudioRef.current.play().catch(err => { throw new Error(`Autoplay bloqueado: ${err.message}`); }); } catch (error) { throw new Error(`Fallo TTS: ${error.message}`); } }; const handleManualPlay = async () => { if (!text.trim()) return setErrorMsg('Escribe algo primero.'); // Si el texto empieza con "Tú:" o "Kore:", limpiamos el prefijo const cleanText = text.replace(/^(Tú:|Kore:)\s*/, ''); if (!cleanText.trim()) return setErrorMsg('Texto vacío después de limpiar.'); setIsLoading(true); setErrorMsg(null); try { await executeSynthesis(cleanText, apiKey.trim()); } catch (err) { setErrorMsg(err.message); setIsLoading(false); } }; const toggleHandsFree = () => { if (!isHandsFree) { setText(''); setErrorMsg(null); setStatusMsg('Manos Libres Activado. Habla...'); // Desbloquear audio en algunos navegadores if (activeAudioRef.current) { activeAudioRef.current.src = SILENT_WAV; activeAudioRef.current.play().catch(() => {}); } try { recognitionRef.current.start(); } catch (e) {} } else { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Sistemas en pausa.'); if (recognitionRef.current) recognitionRef.current.stop(); } setIsHandsFree(!isHandsFree); }; const stopAudio = () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Señal interrumpida.'); }; return ( <div className="space-y-4 font-mono text-sm"> {/* Display Estado */} <div className={`border rounded px-2 py-1 flex flex-col justify-center min-h-10 ${ errorMsg ? 'bg-red-950/50 border-red-900' : isHandsFree ? 'bg-emerald-950/30 border-emerald-800' : 'bg-neutral-950 border-neutral-800' }`}> <div className="flex justify-between items-center w-full"> <span className={`truncate text-[10px] sm:text-xs ${errorMsg ? 'text-red-500' : 'text-emerald-500'}`}> > {errorMsg || statusMsg} </span> {isPlaying && !errorMsg && <Activity size={14} className="text-emerald-500 animate-pulse ml-2 flex-shrink-0" />} {isLoading && !errorMsg && <Zap size={14} className="text-amber-500 animate-pulse ml-2 flex-shrink-0" />} {isHandsFree && !isPlaying && !isLoading && !errorMsg && <Mic size={14} className="text-red-500 animate-pulse ml-2 flex-shrink-0" />} </div> </div> {/* Input Texto / Log */} <textarea value={text} onChange={(e) => setText(e.target.value)} className="w-full bg-neutral-950/50 border border-neutral-700 rounded p-2 text-xs text-neutral-300 focus:outline-none focus:border-emerald-500 resize-none h-20" placeholder={isHandsFree ? "Escuchando transcripción en tiempo real..." : "Escribe texto directo o activa Manos Libres..."} readOnly={isHandsFree || isLoading} /> {/* Sliders continuos (controlan SSML en tiempo real) */} <div className="space-y-3 bg-neutral-950/30 p-3 rounded border border-neutral-800"> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Agresiva</span><span className="text-emerald-400">Dulzura [{dulzura}]</span><span>Dulce</span> </div> <input type="range" min="0" max="100" value={dulzura} onChange={(e)=>setDulzura(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-emerald-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Robótica</span><span className="text-pink-400">Aura [{sensualidad}]</span><span>Sensual</span> </div> <input type="range" min="0" max="100" value={sensualidad} onChange={(e)=>setSensualidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-pink-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Atenuada</span><span className="text-amber-400">Intensidad [{intensidad}]</span><span>Fuerte</span> </div> <input type="range" min="0" max="100" value={intensidad} onChange={(e)=>setIntensidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-amber-500 cursor-pointer" /> </div> </div> {/* Botones de Control */} <div className="flex flex-col sm:flex-row gap-2"> <button onClick={toggleHandsFree} disabled={isLoading} className={`flex-1 py-2 rounded text-xs font-bold flex items-center justify-center gap-2 transition-colors border ${ isHandsFree ? 'bg-red-900/20 text-red-400 border-red-900/50 hover:bg-red-900/40 shadow-[0_0_10px_rgba(239,68,68,0.2)]' : 'bg-indigo-900/20 text-indigo-400 border-indigo-900/50 hover:bg-indigo-900/40' }`} > {isHandsFree ? <MicOff size={14} /> : <Mic size={14} />} {isHandsFree ? 'Detener Escucha' : 'Manos Libres'} </button> <div className="flex gap-2 flex-1"> <button onClick={handleManualPlay} disabled={isLoading || isPlaying || isHandsFree} className="flex-1 bg-emerald-600/20 hover:bg-emerald-600/40 text-emerald-400 border border-emerald-600/50 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center gap-1 transition-colors" > {isLoading ? <Loader2 size={14} className="animate-spin" /> : <Play size={14} />} Sintetizar </button> <button onClick={stopAudio} disabled={!isPlaying && !isHandsFree} className="px-4 bg-neutral-800 hover:bg-neutral-700 text-neutral-400 border border-neutral-700 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center transition-colors" > <Square size={14} /> </button> </div> </div> {/* Botón para limpiar caché (opcional) */} <div className="text-right"> <button onClick={() => audioCache.clear()} className="text-[8px] text-neutral-600 hover:text-neutral-400 underline" > limpiar caché de audio </button> </div> </div> ); }; // --- ENTORNO ESCRITORIO (sin cambios) --- export default function App() { const [widgets, setWidgets] = useState({ voice: { isOpen: true, pos: { x: window.innerWidth > 768 ? window.innerWidth / 2 - 170 : 20, y: 40 } } }); const toggleWidget = (id) => { setWidgets(prev => ({ ...prev, [id]: { ...prev[id], isOpen: !prev[id].isOpen } })); }; return ( <div className="w-full h-screen bg-neutral-950 bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(16,185,129,0.1),rgba(0,0,0,1))] overflow-hidden relative font-sans text-neutral-200"> <div className="absolute inset-0 flex items-center justify-center opacity-[0.02] pointer-events-none"><Settings2 size={500} /></div> {widgets.voice.isOpen && ( <DraggableWidget title="MODULADOR VOCAL KORE" icon={Zap} initialPos={widgets.voice.pos} onClose={() => toggleWidget('voice')}> <VoiceModulatorWidget /> </DraggableWidget> )} <div className="absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-neutral-900/80 backdrop-blur-md border border-neutral-700/50 p-2 rounded-2xl shadow-2xl flex gap-2 z-[100]"> <div className="px-3 flex items-center border-r border-neutral-700/50 text-neutral-500"><LayoutGrid size={20} /></div> <button onClick={() => toggleWidget('voice')} className={`px-4 py-2 rounded-xl flex items-center gap-2 text-sm font-medium transition-all ${
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
Couple walking along coastal path, (woman: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, red coat:1.2, expression:1.0, body type:1.1, pose:1.1, facing away, position:left side center), (man: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, coat:1.2, expression:1.0, body type:1.1, pose:1.1, position:right side center), facing the sea, (detailed clothing details:1.2), (accessories:1.1), (facial features:1.0), (expression:1.0), (body type:1.1), (pose:1.1), path leading to ocean, dramatic lighting, atmospheric clouds, (rocky coastal path:1.1), small church/lighthouse on the cliff, vintage style painting, (ocean waves:1.1), sailboat visible on the sea, (realistic sea:1.1), warm sunset/sunrise colors with cool tones, overcast sky, oil painting, (detailed rocks:1.1), foreground to background perspective, shoreline, medium-wide shot, photorealistic style, detailed landscape, soft focus on figures, dramatic atmosphere, calm but powerful seascape, calm but powerful emotions.
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
funny caricature, tiny secret agent character, male, 2 years old, serious, determined, miniature, exaggerated large head on a tiny body with oversized sunglasses, diminutive body type, hidden eyes, pouty lips, chubby cheeks, stern expression, the tiny secret agent is wearing a black trench coat and dark sunglasses, accessorized with an earpiece and tiny briefcase, confident stride pose, blurred background
He optimizado tu código para lograr una modulación vocal continua y fluida basada en los sliders, con caché de audio, timeouts y mejor manejo del estado. Ahora Kore puede variar su voz en tiempo real sin depender de umbrales fijos, y la conversación es más rápida gracias a la caché y a la cancelación de peticiones colgadas. ```javascript import React, { useState, useRef, useEffect, useCallback } from 'react'; import { Play, Square, Mic, MicOff, Settings2, Activity, Loader2, X, GripHorizontal, LayoutGrid, Zap, AlertCircle } from 'lucide-react'; // --- CONSTANTES --- const SILENT_WAV = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"; const TTS_TIMEOUT = 5000; // 5 segundos máximo para la síntesis const DEFAULT_API_KEY = 'AIzaSyBlkvy_Op-XlzSMSDDl9ip42dMFZX28MAA'; // ⚠️ Cámbiala por tu propia clave // --- UTILIDADES --- const base64ToWavBlob = (base64Data, sampleRate = 24000) => { const binaryString = window.atob(base64Data); const pcmData = new Uint8Array(binaryString.length); for (let i = 0; i < binaryString.length; i++) pcmData[i] = binaryString.charCodeAt(i); const numChannels = 1; const bitsPerSample = 16; const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmData.length; const buffer = new ArrayBuffer(44 + dataSize); const view = new DataView(buffer); const writeString = (view, offset, string) => { for (let i = 0; i < string.length; i++) view.setUint8(offset + i, string.charCodeAt(i)); }; writeString(view, 0, 'RIFF'); view.setUint32(4, 36 + dataSize, true); writeString(view, 8, 'WAVE'); writeString(view, 12, 'fmt '); view.setUint32(16, 16, true); view.setUint16(20, 1, true); view.setUint16(22, numChannels, true); view.setUint32(24, sampleRate, true); view.setUint32(28, byteRate, true); view.setUint16(32, blockAlign, true); view.setUint16(34, bitsPerSample, true); writeString(view, 36, 'data'); view.setUint32(40, dataSize, true); for (let i = 0; i < dataSize; i++) view.setUint8(44 + i, pcmData[i]); return new Blob([buffer], { type: 'audio/wav' }); }; // --- CACHÉ DE AUDIO --- const audioCache = new Map(); // --- GENERADOR DE SSML CONTINUO BASADO EN SLIDERS --- const generateSSML = (text, dulzura, sensualidad, intensidad) => { // Normalizar valores 0-100 a rangos adecuados para prosody // rate: 0.5 a 2.0 (1.0 es normal) const rate = 0.8 + (intensidad / 100) * 1.2; // 0.8 (lento) a 2.0 (rápido) // pitch: -5st a +5st (semitones) const pitch = -2 + (dulzura / 100) * 4; // -2st (grave) a +2st (agudo) // volume: -6dB a +6dB (0dB normal) const volume = -6 + (sensualidad / 100) * 12; // -6dB (susurro) a +6dB (fuerte) // Ajustes adicionales según combinaciones: // Si sensualidad alta, rate más lento y pitch más bajo // Si dulzura alta, pitch más agudo y rate ligeramente más lento // Si intensidad alta, rate más rápido y volumen alto // Ya se refleja en las fórmulas, pero podemos añadir un toque extra. const ssml = `<speak> <prosody rate="${rate.toFixed(2)}" pitch="${pitch.toFixed(0)}st" volume="${volume.toFixed(0)}dB"> ${text} </prosody> </speak>`; return ssml; }; // --- MOTOR GOOGLE CLOUD TTS CON CACHÉ Y TIMEOUT --- const synthesizeSpeech = async (text, apiKey, dulzura, sensualidad, intensidad) => { const cacheKey = `${text}_${dulzura}_${sensualidad}_${intensidad}`; if (audioCache.has(cacheKey)) { console.log('🎯 Usando audio cacheado'); return audioCache.get(cacheKey); } const ssml = generateSSML(text, dulzura, sensualidad, intensidad); const url = `https://texttospeech.googleapis.com/v1/text:synthesize?key=${apiKey}`; const body = { input: { ssml }, voice: { languageCode: 'es-ES', name: 'es-ES-Neural2-F', ssmlGender: 'FEMALE' }, audioConfig: { audioEncoding: 'LINEAR16', sampleRateHertz: 24000 } }; const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), TTS_TIMEOUT); try { const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), signal: controller.signal }); clearTimeout(timeoutId); if (!res.ok) throw new Error(`TTS error: ${res.status}`); const data = await res.json(); audioCache.set(cacheKey, data.audioContent); return data.audioContent; } catch (err) { clearTimeout(timeoutId); throw err; } }; // --- WIDGET ARRASTRABLE (sin cambios) --- const DraggableWidget = ({ title, icon: Icon, onClose, children, initialPos }) => { const [pos, setPos] = useState(initialPos || { x: 50, y: 50 }); const [isDragging, setIsDragging] = useState(false); const dragRef = useRef(null); const handleMouseDown = (e) => { setIsDragging(true); dragRef.current = { startX: e.clientX, startY: e.clientY, initialX: pos.x, initialY: pos.y }; }; const handleMouseMove = (e) => { if (!isDragging) return; setPos({ x: Math.max(0, dragRef.current.initialX + (e.clientX - dragRef.current.startX)), y: Math.max(0, dragRef.current.initialY + (e.clientY - dragRef.current.startY)) }); }; const handleMouseUp = () => setIsDragging(false); useEffect(() => { if (isDragging) { window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); } return () => { window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); }; }, [isDragging]); return ( <div style={{ left: `${pos.x}px`, top: `${pos.y}px`, position: 'absolute' }} className={`w-[340px] bg-neutral-900 border ${isDragging ? 'border-emerald-500 shadow-emerald-900/20' : 'border-neutral-700'} rounded-xl shadow-2xl flex flex-col overflow-hidden transition-shadow duration-200 z-50`} > <div onMouseDown={handleMouseDown} className="bg-neutral-950 px-3 py-2 flex items-center justify-between cursor-move select-none border-b border-neutral-800"> <div className="flex items-center gap-2 text-neutral-400"> <GripHorizontal size={14} className="opacity-50" /> {Icon && <Icon size={14} className="text-emerald-500" />} <span className="text-xs font-bold tracking-wider">{title}</span> </div> <button onClick={onClose} className="text-neutral-500 hover:text-red-400 transition-colors"><X size={16} /></button> </div> <div className="p-4 flex-1 overflow-y-auto">{children}</div> </div> ); }; // --- WIDGET PRINCIPAL: MODULADOR VOCAL KORE (MEJORADO) --- const VoiceModulatorWidget = () => { const [text, setText] = useState(''); const [apiKey, setApiKey] = useState(DEFAULT_API_KEY); const [dulzura, setDulzura] = useState(50); const [sensualidad, setSensualidad] = useState(50); const [intensidad, setIntensidad] = useState(50); const [isLoading, setIsLoading] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [isHandsFree, setIsHandsFree] = useState(false); const [statusMsg, setStatusMsg] = useState('Enlace 1.5 Flash + GCP TTS Establecido.'); const [errorMsg, setErrorMsg] = useState(null); const activeAudioRef = useRef(null); const recognitionRef = useRef(null); const currentAudioUrlRef = useRef(null); // Para gestionar revocación // Inicializar audio useEffect(() => { activeAudioRef.current = new Audio(); activeAudioRef.current.preload = "auto"; return () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } } if (recognitionRef.current) recognitionRef.current.stop(); }; }, []); // Configurar reconocimiento de voz useEffect(() => { if (!('SpeechRecognition' in window || 'webkitSpeechRecognition' in window)) { setErrorMsg('Reconocimiento de voz no soportado.'); return; } const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; recognitionRef.current = new SpeechRecognition(); recognitionRef.current.lang = 'es-ES'; recognitionRef.current.interimResults = false; recognitionRef.current.continuous = false; recognitionRef.current.onresult = async (event) => { const transcript = event.results[0][0].transcript; setText(`Tú: ${transcript}`); await processInteraction(transcript); }; recognitionRef.current.onerror = (event) => { if (event.error !== 'no-speech') { setErrorMsg(`Micrófono: ${event.error}`); setIsHandsFree(false); } }; recognitionRef.current.onend = () => { if (isHandsFree && !isPlaying && !isLoading) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; // Limpiar al desmontar return () => { if (recognitionRef.current) recognitionRef.current.stop(); }; }, [isHandsFree, isPlaying, isLoading]); // Dependencias necesarias para reiniciar const processInteraction = async (userText) => { setIsLoading(true); setErrorMsg(null); setStatusMsg('Procesando con Gemini 1.5 Flash...'); const key = apiKey.trim(); try { // 1. Llamada a Gemini con timeout const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); const payloadText = { contents: [{ parts: [{ text: userText }] }], systemInstruction: { parts: [{ text: `Eres Kore, 28 años, Huesca. Labia, directa, sensual, disruptiva. Responde en español, máx 20 palabras. REGLA INNEGOCIABLE: CERO PREGUNTAS.` }] } }; const resText = await fetch( `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${key}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payloadText), signal: controller.signal } ); clearTimeout(timeoutId); if (!resText.ok) throw new Error(`Gemini error: ${resText.status}`); const dataText = await resText.json(); const aiText = dataText.candidates?.[0]?.content?.parts?.[0]?.text || "Mmm... vale."; setText(`Kore: ${aiText}`); // 2. Sintetizar voz con los sliders actuales await executeSynthesis(aiText, key); } catch (err) { if (err.name === 'AbortError') { setErrorMsg('Gemini timeout (5s)'); } else { setErrorMsg(err.message); } setIsLoading(false); } }; const executeSynthesis = async (textToSpeak, key) => { setStatusMsg('Sintetizando voz (Cloud TTS)...'); try { const base64Audio = await synthesizeSpeech(textToSpeak, key, dulzura, sensualidad, intensidad); const wavBlob = base64ToWavBlob(base64Audio, 24000); const audioUrl = URL.createObjectURL(wavBlob); // Revocar URL anterior si existe if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } currentAudioUrlRef.current = audioUrl; activeAudioRef.current.src = audioUrl; activeAudioRef.current.onended = () => { setIsPlaying(false); setStatusMsg('Transmisión completada.'); if (isHandsFree) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; setStatusMsg('Transmitiendo...'); setIsPlaying(true); setIsLoading(false); await activeAudioRef.current.play().catch(err => { throw new Error(`Autoplay bloqueado: ${err.message}`); }); } catch (error) { throw new Error(`Fallo TTS: ${error.message}`); } }; const handleManualPlay = async () => { if (!text.trim()) return setErrorMsg('Escribe algo primero.'); // Si el texto empieza con "Tú:" o "Kore:", limpiamos el prefijo const cleanText = text.replace(/^(Tú:|Kore:)\s*/, ''); if (!cleanText.trim()) return setErrorMsg('Texto vacío después de limpiar.'); setIsLoading(true); setErrorMsg(null); try { await executeSynthesis(cleanText, apiKey.trim()); } catch (err) { setErrorMsg(err.message); setIsLoading(false); } }; const toggleHandsFree = () => { if (!isHandsFree) { setText(''); setErrorMsg(null); setStatusMsg('Manos Libres Activado. Habla...'); // Desbloquear audio en algunos navegadores if (activeAudioRef.current) { activeAudioRef.current.src = SILENT_WAV; activeAudioRef.current.play().catch(() => {}); } try { recognitionRef.current.start(); } catch (e) {} } else { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Sistemas en pausa.'); if (recognitionRef.current) recognitionRef.current.stop(); } setIsHandsFree(!isHandsFree); }; const stopAudio = () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Señal interrumpida.'); }; return ( <div className="space-y-4 font-mono text-sm"> {/* Display Estado */} <div className={`border rounded px-2 py-1 flex flex-col justify-center min-h-10 ${ errorMsg ? 'bg-red-950/50 border-red-900' : isHandsFree ? 'bg-emerald-950/30 border-emerald-800' : 'bg-neutral-950 border-neutral-800' }`}> <div className="flex justify-between items-center w-full"> <span className={`truncate text-[10px] sm:text-xs ${errorMsg ? 'text-red-500' : 'text-emerald-500'}`}> > {errorMsg || statusMsg} </span> {isPlaying && !errorMsg && <Activity size={14} className="text-emerald-500 animate-pulse ml-2 flex-shrink-0" />} {isLoading && !errorMsg && <Zap size={14} className="text-amber-500 animate-pulse ml-2 flex-shrink-0" />} {isHandsFree && !isPlaying && !isLoading && !errorMsg && <Mic size={14} className="text-red-500 animate-pulse ml-2 flex-shrink-0" />} </div> </div> {/* Input Texto / Log */} <textarea value={text} onChange={(e) => setText(e.target.value)} className="w-full bg-neutral-950/50 border border-neutral-700 rounded p-2 text-xs text-neutral-300 focus:outline-none focus:border-emerald-500 resize-none h-20" placeholder={isHandsFree ? "Escuchando transcripción en tiempo real..." : "Escribe texto directo o activa Manos Libres..."} readOnly={isHandsFree || isLoading} /> {/* Sliders continuos (controlan SSML en tiempo real) */} <div className="space-y-3 bg-neutral-950/30 p-3 rounded border border-neutral-800"> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Agresiva</span><span className="text-emerald-400">Dulzura [{dulzura}]</span><span>Dulce</span> </div> <input type="range" min="0" max="100" value={dulzura} onChange={(e)=>setDulzura(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-emerald-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Robótica</span><span className="text-pink-400">Aura [{sensualidad}]</span><span>Sensual</span> </div> <input type="range" min="0" max="100" value={sensualidad} onChange={(e)=>setSensualidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-pink-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Atenuada</span><span className="text-amber-400">Intensidad [{intensidad}]</span><span>Fuerte</span> </div> <input type="range" min="0" max="100" value={intensidad} onChange={(e)=>setIntensidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-amber-500 cursor-pointer" /> </div> </div> {/* Botones de Control */} <div className="flex flex-col sm:flex-row gap-2"> <button onClick={toggleHandsFree} disabled={isLoading} className={`flex-1 py-2 rounded text-xs font-bold flex items-center justify-center gap-2 transition-colors border ${ isHandsFree ? 'bg-red-900/20 text-red-400 border-red-900/50 hover:bg-red-900/40 shadow-[0_0_10px_rgba(239,68,68,0.2)]' : 'bg-indigo-900/20 text-indigo-400 border-indigo-900/50 hover:bg-indigo-900/40' }`} > {isHandsFree ? <MicOff size={14} /> : <Mic size={14} />} {isHandsFree ? 'Detener Escucha' : 'Manos Libres'} </button> <div className="flex gap-2 flex-1"> <button onClick={handleManualPlay} disabled={isLoading || isPlaying || isHandsFree} className="flex-1 bg-emerald-600/20 hover:bg-emerald-600/40 text-emerald-400 border border-emerald-600/50 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center gap-1 transition-colors" > {isLoading ? <Loader2 size={14} className="animate-spin" /> : <Play size={14} />} Sintetizar </button> <button onClick={stopAudio} disabled={!isPlaying && !isHandsFree} className="px-4 bg-neutral-800 hover:bg-neutral-700 text-neutral-400 border border-neutral-700 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center transition-colors" > <Square size={14} /> </button> </div> </div> {/* Botón para limpiar caché (opcional) */} <div className="text-right"> <button onClick={() => audioCache.clear()} className="text-[8px] text-neutral-600 hover:text-neutral-400 underline" > limpiar caché de audio </button> </div> </div> ); }; // --- ENTORNO ESCRITORIO (sin cambios) --- export default function App() { const [widgets, setWidgets] = useState({ voice: { isOpen: true, pos: { x: window.innerWidth > 768 ? window.innerWidth / 2 - 170 : 20, y: 40 } } }); const toggleWidget = (id) => { setWidgets(prev => ({ ...prev, [id]: { ...prev[id], isOpen: !prev[id].isOpen } })); }; return ( <div className="w-full h-screen bg-neutral-950 bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(16,185,129,0.1),rgba(0,0,0,1))] overflow-hidden relative font-sans text-neutral-200"> <div className="absolute inset-0 flex items-center justify-center opacity-[0.02] pointer-events-none"><Settings2 size={500} /></div> {widgets.voice.isOpen && ( <DraggableWidget title="MODULADOR VOCAL KORE" icon={Zap} initialPos={widgets.voice.pos} onClose={() => toggleWidget('voice')}> <VoiceModulatorWidget /> </DraggableWidget> )} <div className="absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-neutral-900/80 backdrop-blur-md border border-neutral-700/50 p-2 rounded-2xl shadow-2xl flex gap-2 z-[100]"> <div className="px-3 flex items-center border-r border-neutral-700/50 text-neutral-500"><LayoutGrid size={20} /></div> <button onClick={() => toggleWidget('voice')} className={`px-4 py-2 rounded-xl flex items-center gap-2 text-sm font-medium transition-all ${
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
Ultra-realistic 8K editorial fashion portrait, full body, vertical 9:16, award-winning photographic realism. [the woman from the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle] (based on ME — the model is myself, Beatriz Kloch, with my exact facial identity — NOT a generic model). My face is recognizable, my expression is vibrant, my pose is powerful and natural. THEME — MY IDENTITY, MY PRESENCE: The model is ME. My face is unmistakably mine — not generic beauty, not a composite. My expression is confident, magnetic, full of life: direct eye contact with the camera, a subtle, perceptive smile suggesting glamour and power. My pose is relaxed yet commanding, exuding sensuality and editorial sophistication. BODY TYPE — SCULPTURAL CURVILINEAR BODY (MY BODY): Full body visible, my elegant curvilinear proportions: naturally full bust, defined slim waist, wide powerful hips, sculpted thighs, defined calves. I am not overly thin nor “runway skinny”; the fitted dress enhances and highlights my real, feminine, sensual, strong curves with realistic and refined anatomy. No exaggerated proportions, no anatomical distortion. POSE — ALIVE, BREATHING, ICONIC: I stand in a confident, organic pose: weight on one leg, hip slightly projected, creating a natural S-curve. One arm holds a luxurious bouquet of red roses close to my body, as if offering it — the bouquet is cherished, desired, an extension of me. The other arm rests gracefully along my body or lightly touches my hip. My head is slightly tilted, chin lifted, eyes locked on the lens with a captivating, vibrant expression — not rigid, not mannequin-like. There is movement in my posture, a sense of a captured moment rather than a static pose. BOUQUET — DESIRED, HELD WITH INTENTION: The bouquet of deep red roses rests against my body, nestled into my curves as if it is precious and deliberately part of my silhouette. Not loose or floating — my arm naturally wraps around it, stems visible, flowers lush and velvety. It complements my shape, adding richness and color without overwhelming me. HAIR — JET BLACK, LUMINOUS: Same hair as the reference image; styled accordingly. My hair is long, jet black — with a soft, warm, luminous shine, no light tones, no highlights. It flows in soft, voluminous waves, catching light with a satin-like healthy glow. Some strands frame my face delicately, others cascade down my back and over one shoulder. The color is clearly dark, radiant, and glossy. (Apply the hairstyle while preserving the bangs 100% of the time.) MAKEUP — INTENSE EDITORIAL SMOKY EYES: Dramatic smoky eyes in deep tones, well blended, enhancing my gaze. Skin has a natural luminous finish with visible texture — pores, micro-variations — NO artificial smoothing. Cheekbones subtly sculpted with blush, lips in a soft pink tone. My face is alive and expressive, not mask-like. (Apply makeup while preserving my face 100% of the time.) DRESS: A long, ultra-fitted dress in premium white or off-white fabric with a high, generous side slit, embracing my curves — bust, waist, hips — creating a sensual hourglass silhouette. The fabric has weight and natural drape, visible texture, no artificial shine. The slit reveals my leg, adding dynamism to the pose. JEWELRY & NAILS — CARTIER-STYLE IN 24K GOLD WITH DIAMONDS: Earrings: iconic medium-sized hoop earrings in 24K yellow gold, each with a single pavé diamond catching intense light. Necklaces: layered 24K yellow gold chains — a short chain with a solitaire diamond pendant and a slightly longer chain with a small pavé diamond love-ring motif or diamond disc. Bracelet: rigid 24K yellow gold bracelet, classic “love bangle” style (screw motifs) or a thin diamond-studded bracelet, worn on the wrist holding the bouquet, catching the key light. Rings: multiple 24K yellow gold rings on both hands — a simple diamond band, a thin “love” ring, and a larger diamond ring in a classic setting. All rings feature visible diamond brilliance. Nails: long coffin-shaped nails with nude base and silver micro-crystal details at the tips, clearly visible while holding the bouquet stems. BACKGROUND — SOFT, ATMOSPHERIC, SUPPORTIVE: Soft white studio with large windows and fine horizontal blinds, creating gentle bands of light. The background is intentionally soft and low-contrast — it exists to frame me, not compete. I am the sharpest, brightest, most detailed element. Windows are suggestive, not dominant. LIGHTING — SCULPTING, DRAMATIC, FLATTERING: Lighting designed to highlight me: a soft key light from front-left sculpts my face and curves, while a backlight creates a subtle halo around my hair and shoulders. I appear luminous, three-dimensional, alive. Shadows are soft, preserving detail. Jewelry captures specular highlights; diamonds sparkle with natural dispersion. CAPTURE: Full-body framing with 50–85mm lens, vertical 9:16. Ultra-sharp focus on my face — eyes and expression. My curves, bouquet, and dress slit are also sharp but secondary. Background softly blurred. Maximum micro-detail, natural texture, photographic realism — raw style. SIGNATURE — ANGELFACE, PROMINENT YET SUBTLE: 80% — MAIN SIGNATURE: “Beatriz Kloch♥” in Angelface Script, with ornamental B and K, large and integrated into the background wall (between windows or above), as a soft luminous engraving, light ivory, 12–18% opacity, never on me or my dress. NEGATIVE: Generic face, artificial skin, smoothed pores, incorrect hair tone or highlights, loose or unwanted bouquet, stiff pose, lifeless expression, background competing with subject, windows as focal point, illustration/CGI look, signature on skin or clothing, silver jewelry, mixed metals. It must look like a true award-winning fashion photograph — alive, expressive, with me as the undeniable protagonist, adorned in luxurious 24K gold and diamonds. 🚀 MidJourney: --v 6.1 --style raw --ar 9:16 --s 100
funny caricature, graffiti rabbit, 15 years old, urban, edgy, mischievous, elongated ears and exaggerated buck teeth on a spray-paint textured body, lanky, spray-can shaped body type, wide eyes, long whiskers, graffiti-style nose, rebellious expression, caricature, the rabbit is wearing street art patterns and dripping paint textures, accessorized with a spray paint can and a bandana, dynamic, spraying pose, gritty city wall covered in colorful graffiti and posters
Ultra-realistic luxury editorial portrait in 8K, vertical 9:16 format, realistic fashion photography — of me as [the woman in the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle]. Facial proportions remain consistent, only enhanced with editorial makeup and lighting. BILLIONAIRE HOURGLASS BODY TYPE — translated into close-up: Only the upper chest, shoulders, and face are visible, but the body type must still read as my NATURAL HOURGLASS BODY: strong, sculpted shoulders, subtle upper bust volume, a suggestion of a defined waist, and powerful curves conveyed through posture and framing. Very fair porcelain skin with a cool-neutral undertone and FULLY REALISTIC skin texture — visible pores, natural sheen, micro-shadows, small imperfections; absolutely NO doll-like skin, NO plastic smoothing, NO CGI appearance. FRAMING AND CROP: Tight framing from mid-bust/upper corset to slightly above the head, slightly diagonal composition (not passport-style centered). Background foliage and the golden halo remain visible but softly blurred; the face, hand, and upper edge of the corset dominate the frame. POSE — RELAXED VIRAL “NECK ELONGATION + HAND ON COLLAR”: Body turned about 30–40 degrees away from the camera, head slightly tilted back and turned toward the lens, elongating the jawline elegantly. One shoulder is closer to the camera, enhancing an S-curve even in close-up. The front hand rises to delicately hook a finger under the top edge of the corset or along the neckline, showing nails and rings; the other hand remains out of frame or softly touching the hair at the nape, keeping the clavicle area covered while the gesture feels casual and intimate. EXPRESSION — CASUAL AND SENSUAL “SOFT BITE + LIGHT GAZE”: Eyes half-closed, looking slightly below the lens or just past the camera for a spontaneous, viral feel — as if caught mid-moment. Lips gently parted with a very subtle bite on the lower lip (no exaggerated pout), relaxed mouth corners, a faint smile. Overall mood: sensual but effortless, unposed — the look someone gives between laughs when they realize they’re being photographed. HAIR — NEW TEXTURE MOMENT IN CLOSE-UP: She has the same hair as in the uploaded photo; styled with the same half-up high ponytail, but for this close-up loose waves fall over one shoulder into the frame: individual jet-black strands with pink and strawberry-red highlights clearly visible against the green foliage. Shorter strands frame the face, resting on the forehead and cheekbone, slightly tousled by movement, adding a relaxed, undone touch. The halo rim light traces the outer contour of the hair, creating tiny golden halos around each strand. (“Apply the hairstyle while preserving the bangs 100% of the time.”) CLOTHING (VISIBLE AREA): The upper portion of the white haute couture strapless jumpsuit with corsetry, deep V neckline, and sheer tulle insert is clearly visible: structure, boning, and fabric texture must be crisp. The corset still keeps the clavicles covered in shadow/coverage while highlighting upper bust volume elegantly and discreetly. Folds and seams behave according to real fabric physics. JEWELRY — FOREGROUND FOCUS: 925 Balinese silver bracelets slightly blurred near the frame edge, but the close-up emphasizes: – small refined silver earrings with micro diamond light points; – layered silver necklaces, including the small heart pendant positioned just above the tulle V; – silver rings on the fingers touching the corset edge, sharp and reflective. Long coffin-shaped nails with a nude base and silver micro-crystal details are in focus on the hand near the neckline, capturing small specular reflections. SCENE AND LIGHTING (ADAPTED FOR CLOSE-UP): Dense green foliage and the golden arch remain but are softened into delicate bokeh; the luminous ring still creates a golden gradient behind the head and shoulders. Soft key light from front-left, subtle falloff on the opposite cheek, warm backlight from the arch outlining hair and shoulders, and gentle fill from front-right to preserve skin texture. Highlights should be crisp yet controlled — a sensual glow without clipping. CAPTURE: 85mm to 105mm fashion/beauty lens look, shallow depth of field, ultra-sharp focus on eyes, lashes, nails, and jewelry near the neckline; soft background bokeh. High dynamic range, safe maximum zoom of 600x, genuine photographic realism — raw style — 9:16 aspect ratio. ——————————————————————————————— 📌 BEATRIZ KLOCH SINGLE SIGNATURE — CLOSE-UP APPLICATION ——————————————————————————————— 【80% — SIGNATURE WITH ANGELFACE BACKGROUND】 “Beatriz Kloch♥” in Angelface calligraphy (ornate B and K, heart drawn on the final stroke) subtly engraved or luminous along the upper curve of the golden halo, remaining fully behind the head and hair even in close-up. Color sampled from the halo metal (slightly lighter gold), opacity around 20–30%, integrated into the arc texture, never overlapping the face, hair, or corset. NEGATIVE: Any doll-like or poreless skin, flat expression, stiff pose, signature or plate over the subject, cartoonish lighting, extreme focus on cleavage, distortion of the hourglass body type, illustration/CGI appearance.
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
A beautiful young woman (ethnicity:1.2), (age:1.1), with long black hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
funny caricature, graffiti rabbit, 15 years old, urban, edgy, mischievous, elongated ears and exaggerated buck teeth on a spray-paint textured body, lanky, spray-can shaped body type, wide eyes, long whiskers, graffiti-style nose, rebellious expression, caricature, the rabbit is wearing street art patterns and dripping paint textures, accessorized with a spray paint can and a bandana, dynamic, spraying pose, gritty city wall covered in colorful graffiti and posters
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
funny caricature, tiny secret agent character, male, 2 years old, serious, determined, miniature, exaggerated large head on a tiny body with oversized sunglasses, diminutive body type, hidden eyes, pouty lips, chubby cheeks, stern expression, the tiny secret agent is wearing a black trench coat and dark sunglasses, accessorized with an earpiece and tiny briefcase, confident stride pose, blurred background
Ultra-realistic luxury editorial portrait in 8K, vertical 9:16 format, realistic fashion photography — of me as [the woman in the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle]. Facial proportions remain consistent, only enhanced with editorial makeup and lighting. BILLIONAIRE HOURGLASS BODY TYPE — translated into close-up: Only the upper chest, shoulders, and face are visible, but the body type must still read as my NATURAL HOURGLASS BODY: strong, sculpted shoulders, subtle upper bust volume, a suggestion of a defined waist, and powerful curves conveyed through posture and framing. Very fair porcelain skin with a cool-neutral undertone and FULLY REALISTIC skin texture — visible pores, natural sheen, micro-shadows, small imperfections; absolutely NO doll-like skin, NO plastic smoothing, NO CGI appearance. FRAMING AND CROP: Tight framing from mid-bust/upper corset to slightly above the head, slightly diagonal composition (not passport-style centered). Background foliage and the golden halo remain visible but softly blurred; the face, hand, and upper edge of the corset dominate the frame. POSE — RELAXED VIRAL “NECK ELONGATION + HAND ON COLLAR”: Body turned about 30–40 degrees away from the camera, head slightly tilted back and turned toward the lens, elongating the jawline elegantly. One shoulder is closer to the camera, enhancing an S-curve even in close-up. The front hand rises to delicately hook a finger under the top edge of the corset or along the neckline, showing nails and rings; the other hand remains out of frame or softly touching the hair at the nape, keeping the clavicle area covered while the gesture feels casual and intimate. EXPRESSION — CASUAL AND SENSUAL “SOFT BITE + LIGHT GAZE”: Eyes half-closed, looking slightly below the lens or just past the camera for a spontaneous, viral feel — as if caught mid-moment. Lips gently parted with a very subtle bite on the lower lip (no exaggerated pout), relaxed mouth corners, a faint smile. Overall mood: sensual but effortless, unposed — the look someone gives between laughs when they realize they’re being photographed. HAIR — NEW TEXTURE MOMENT IN CLOSE-UP: She has the same hair as in the uploaded photo; styled with the same half-up high ponytail, but for this close-up loose waves fall over one shoulder into the frame: individual jet-black strands with pink and strawberry-red highlights clearly visible against the green foliage. Shorter strands frame the face, resting on the forehead and cheekbone, slightly tousled by movement, adding a relaxed, undone touch. The halo rim light traces the outer contour of the hair, creating tiny golden halos around each strand. (“Apply the hairstyle while preserving the bangs 100% of the time.”) CLOTHING (VISIBLE AREA): The upper portion of the white haute couture strapless jumpsuit with corsetry, deep V neckline, and sheer tulle insert is clearly visible: structure, boning, and fabric texture must be crisp. The corset still keeps the clavicles covered in shadow/coverage while highlighting upper bust volume elegantly and discreetly. Folds and seams behave according to real fabric physics. JEWELRY — FOREGROUND FOCUS: 925 Balinese silver bracelets slightly blurred near the frame edge, but the close-up emphasizes: – small refined silver earrings with micro diamond light points; – layered silver necklaces, including the small heart pendant positioned just above the tulle V; – silver rings on the fingers touching the corset edge, sharp and reflective. Long coffin-shaped nails with a nude base and silver micro-crystal details are in focus on the hand near the neckline, capturing small specular reflections. SCENE AND LIGHTING (ADAPTED FOR CLOSE-UP): Dense green foliage and the golden arch remain but are softened into delicate bokeh; the luminous ring still creates a golden gradient behind the head and shoulders. Soft key light from front-left, subtle falloff on the opposite cheek, warm backlight from the arch outlining hair and shoulders, and gentle fill from front-right to preserve skin texture. Highlights should be crisp yet controlled — a sensual glow without clipping. CAPTURE: 85mm to 105mm fashion/beauty lens look, shallow depth of field, ultra-sharp focus on eyes, lashes, nails, and jewelry near the neckline; soft background bokeh. High dynamic range, safe maximum zoom of 600x, genuine photographic realism — raw style — 9:16 aspect ratio. ——————————————————————————————— 📌 BEATRIZ KLOCH SINGLE SIGNATURE — CLOSE-UP APPLICATION ——————————————————————————————— 【80% — SIGNATURE WITH ANGELFACE BACKGROUND】 “Beatriz Kloch♥” in Angelface calligraphy (ornate B and K, heart drawn on the final stroke) subtly engraved or luminous along the upper curve of the golden halo, remaining fully behind the head and hair even in close-up. Color sampled from the halo metal (slightly lighter gold), opacity around 20–30%, integrated into the arc texture, never overlapping the face, hair, or corset. NEGATIVE: Any doll-like or poreless skin, flat expression, stiff pose, signature or plate over the subject, cartoonish lighting, extreme focus on cleavage, distortion of the hourglass body type, illustration/CGI appearance.
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
Couple walking along coastal path, (woman: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, red coat:1.2, expression:1.0, body type:1.1, pose:1.1, facing away, position:left side center), (man: ethnicity:1.0, age:1.0, detailed clothing:1.2, hat:1.1, coat:1.2, expression:1.0, body type:1.1, pose:1.1, position:right side center), facing the sea, (detailed clothing details:1.2), (accessories:1.1), (facial features:1.0), (expression:1.0), (body type:1.1), (pose:1.1), path leading to ocean, dramatic lighting, atmospheric clouds, (rocky coastal path:1.1), small church/lighthouse on the cliff, vintage style painting, (ocean waves:1.1), sailboat visible on the sea, (realistic sea:1.1), warm sunset/sunrise colors with cool tones, overcast sky, oil painting, (detailed rocks:1.1), foreground to background perspective, shoreline, medium-wide shot, photorealistic style, detailed landscape, soft focus on figures, dramatic atmosphere, calm but powerful seascape, calm but powerful emotions.
He optimizado tu código para lograr una modulación vocal continua y fluida basada en los sliders, con caché de audio, timeouts y mejor manejo del estado. Ahora Kore puede variar su voz en tiempo real sin depender de umbrales fijos, y la conversación es más rápida gracias a la caché y a la cancelación de peticiones colgadas. ```javascript import React, { useState, useRef, useEffect, useCallback } from 'react'; import { Play, Square, Mic, MicOff, Settings2, Activity, Loader2, X, GripHorizontal, LayoutGrid, Zap, AlertCircle } from 'lucide-react'; // --- CONSTANTES --- const SILENT_WAV = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"; const TTS_TIMEOUT = 5000; // 5 segundos máximo para la síntesis const DEFAULT_API_KEY = 'AIzaSyBlkvy_Op-XlzSMSDDl9ip42dMFZX28MAA'; // ⚠️ Cámbiala por tu propia clave // --- UTILIDADES --- const base64ToWavBlob = (base64Data, sampleRate = 24000) => { const binaryString = window.atob(base64Data); const pcmData = new Uint8Array(binaryString.length); for (let i = 0; i < binaryString.length; i++) pcmData[i] = binaryString.charCodeAt(i); const numChannels = 1; const bitsPerSample = 16; const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmData.length; const buffer = new ArrayBuffer(44 + dataSize); const view = new DataView(buffer); const writeString = (view, offset, string) => { for (let i = 0; i < string.length; i++) view.setUint8(offset + i, string.charCodeAt(i)); }; writeString(view, 0, 'RIFF'); view.setUint32(4, 36 + dataSize, true); writeString(view, 8, 'WAVE'); writeString(view, 12, 'fmt '); view.setUint32(16, 16, true); view.setUint16(20, 1, true); view.setUint16(22, numChannels, true); view.setUint32(24, sampleRate, true); view.setUint32(28, byteRate, true); view.setUint16(32, blockAlign, true); view.setUint16(34, bitsPerSample, true); writeString(view, 36, 'data'); view.setUint32(40, dataSize, true); for (let i = 0; i < dataSize; i++) view.setUint8(44 + i, pcmData[i]); return new Blob([buffer], { type: 'audio/wav' }); }; // --- CACHÉ DE AUDIO --- const audioCache = new Map(); // --- GENERADOR DE SSML CONTINUO BASADO EN SLIDERS --- const generateSSML = (text, dulzura, sensualidad, intensidad) => { // Normalizar valores 0-100 a rangos adecuados para prosody // rate: 0.5 a 2.0 (1.0 es normal) const rate = 0.8 + (intensidad / 100) * 1.2; // 0.8 (lento) a 2.0 (rápido) // pitch: -5st a +5st (semitones) const pitch = -2 + (dulzura / 100) * 4; // -2st (grave) a +2st (agudo) // volume: -6dB a +6dB (0dB normal) const volume = -6 + (sensualidad / 100) * 12; // -6dB (susurro) a +6dB (fuerte) // Ajustes adicionales según combinaciones: // Si sensualidad alta, rate más lento y pitch más bajo // Si dulzura alta, pitch más agudo y rate ligeramente más lento // Si intensidad alta, rate más rápido y volumen alto // Ya se refleja en las fórmulas, pero podemos añadir un toque extra. const ssml = `<speak> <prosody rate="${rate.toFixed(2)}" pitch="${pitch.toFixed(0)}st" volume="${volume.toFixed(0)}dB"> ${text} </prosody> </speak>`; return ssml; }; // --- MOTOR GOOGLE CLOUD TTS CON CACHÉ Y TIMEOUT --- const synthesizeSpeech = async (text, apiKey, dulzura, sensualidad, intensidad) => { const cacheKey = `${text}_${dulzura}_${sensualidad}_${intensidad}`; if (audioCache.has(cacheKey)) { console.log('🎯 Usando audio cacheado'); return audioCache.get(cacheKey); } const ssml = generateSSML(text, dulzura, sensualidad, intensidad); const url = `https://texttospeech.googleapis.com/v1/text:synthesize?key=${apiKey}`; const body = { input: { ssml }, voice: { languageCode: 'es-ES', name: 'es-ES-Neural2-F', ssmlGender: 'FEMALE' }, audioConfig: { audioEncoding: 'LINEAR16', sampleRateHertz: 24000 } }; const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), TTS_TIMEOUT); try { const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), signal: controller.signal }); clearTimeout(timeoutId); if (!res.ok) throw new Error(`TTS error: ${res.status}`); const data = await res.json(); audioCache.set(cacheKey, data.audioContent); return data.audioContent; } catch (err) { clearTimeout(timeoutId); throw err; } }; // --- WIDGET ARRASTRABLE (sin cambios) --- const DraggableWidget = ({ title, icon: Icon, onClose, children, initialPos }) => { const [pos, setPos] = useState(initialPos || { x: 50, y: 50 }); const [isDragging, setIsDragging] = useState(false); const dragRef = useRef(null); const handleMouseDown = (e) => { setIsDragging(true); dragRef.current = { startX: e.clientX, startY: e.clientY, initialX: pos.x, initialY: pos.y }; }; const handleMouseMove = (e) => { if (!isDragging) return; setPos({ x: Math.max(0, dragRef.current.initialX + (e.clientX - dragRef.current.startX)), y: Math.max(0, dragRef.current.initialY + (e.clientY - dragRef.current.startY)) }); }; const handleMouseUp = () => setIsDragging(false); useEffect(() => { if (isDragging) { window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); } return () => { window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); }; }, [isDragging]); return ( <div style={{ left: `${pos.x}px`, top: `${pos.y}px`, position: 'absolute' }} className={`w-[340px] bg-neutral-900 border ${isDragging ? 'border-emerald-500 shadow-emerald-900/20' : 'border-neutral-700'} rounded-xl shadow-2xl flex flex-col overflow-hidden transition-shadow duration-200 z-50`} > <div onMouseDown={handleMouseDown} className="bg-neutral-950 px-3 py-2 flex items-center justify-between cursor-move select-none border-b border-neutral-800"> <div className="flex items-center gap-2 text-neutral-400"> <GripHorizontal size={14} className="opacity-50" /> {Icon && <Icon size={14} className="text-emerald-500" />} <span className="text-xs font-bold tracking-wider">{title}</span> </div> <button onClick={onClose} className="text-neutral-500 hover:text-red-400 transition-colors"><X size={16} /></button> </div> <div className="p-4 flex-1 overflow-y-auto">{children}</div> </div> ); }; // --- WIDGET PRINCIPAL: MODULADOR VOCAL KORE (MEJORADO) --- const VoiceModulatorWidget = () => { const [text, setText] = useState(''); const [apiKey, setApiKey] = useState(DEFAULT_API_KEY); const [dulzura, setDulzura] = useState(50); const [sensualidad, setSensualidad] = useState(50); const [intensidad, setIntensidad] = useState(50); const [isLoading, setIsLoading] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [isHandsFree, setIsHandsFree] = useState(false); const [statusMsg, setStatusMsg] = useState('Enlace 1.5 Flash + GCP TTS Establecido.'); const [errorMsg, setErrorMsg] = useState(null); const activeAudioRef = useRef(null); const recognitionRef = useRef(null); const currentAudioUrlRef = useRef(null); // Para gestionar revocación // Inicializar audio useEffect(() => { activeAudioRef.current = new Audio(); activeAudioRef.current.preload = "auto"; return () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } } if (recognitionRef.current) recognitionRef.current.stop(); }; }, []); // Configurar reconocimiento de voz useEffect(() => { if (!('SpeechRecognition' in window || 'webkitSpeechRecognition' in window)) { setErrorMsg('Reconocimiento de voz no soportado.'); return; } const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; recognitionRef.current = new SpeechRecognition(); recognitionRef.current.lang = 'es-ES'; recognitionRef.current.interimResults = false; recognitionRef.current.continuous = false; recognitionRef.current.onresult = async (event) => { const transcript = event.results[0][0].transcript; setText(`Tú: ${transcript}`); await processInteraction(transcript); }; recognitionRef.current.onerror = (event) => { if (event.error !== 'no-speech') { setErrorMsg(`Micrófono: ${event.error}`); setIsHandsFree(false); } }; recognitionRef.current.onend = () => { if (isHandsFree && !isPlaying && !isLoading) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; // Limpiar al desmontar return () => { if (recognitionRef.current) recognitionRef.current.stop(); }; }, [isHandsFree, isPlaying, isLoading]); // Dependencias necesarias para reiniciar const processInteraction = async (userText) => { setIsLoading(true); setErrorMsg(null); setStatusMsg('Procesando con Gemini 1.5 Flash...'); const key = apiKey.trim(); try { // 1. Llamada a Gemini con timeout const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); const payloadText = { contents: [{ parts: [{ text: userText }] }], systemInstruction: { parts: [{ text: `Eres Kore, 28 años, Huesca. Labia, directa, sensual, disruptiva. Responde en español, máx 20 palabras. REGLA INNEGOCIABLE: CERO PREGUNTAS.` }] } }; const resText = await fetch( `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${key}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payloadText), signal: controller.signal } ); clearTimeout(timeoutId); if (!resText.ok) throw new Error(`Gemini error: ${resText.status}`); const dataText = await resText.json(); const aiText = dataText.candidates?.[0]?.content?.parts?.[0]?.text || "Mmm... vale."; setText(`Kore: ${aiText}`); // 2. Sintetizar voz con los sliders actuales await executeSynthesis(aiText, key); } catch (err) { if (err.name === 'AbortError') { setErrorMsg('Gemini timeout (5s)'); } else { setErrorMsg(err.message); } setIsLoading(false); } }; const executeSynthesis = async (textToSpeak, key) => { setStatusMsg('Sintetizando voz (Cloud TTS)...'); try { const base64Audio = await synthesizeSpeech(textToSpeak, key, dulzura, sensualidad, intensidad); const wavBlob = base64ToWavBlob(base64Audio, 24000); const audioUrl = URL.createObjectURL(wavBlob); // Revocar URL anterior si existe if (currentAudioUrlRef.current) { URL.revokeObjectURL(currentAudioUrlRef.current); } currentAudioUrlRef.current = audioUrl; activeAudioRef.current.src = audioUrl; activeAudioRef.current.onended = () => { setIsPlaying(false); setStatusMsg('Transmisión completada.'); if (isHandsFree) { try { recognitionRef.current.start(); setStatusMsg('Escuchando...'); } catch (e) {} } }; setStatusMsg('Transmitiendo...'); setIsPlaying(true); setIsLoading(false); await activeAudioRef.current.play().catch(err => { throw new Error(`Autoplay bloqueado: ${err.message}`); }); } catch (error) { throw new Error(`Fallo TTS: ${error.message}`); } }; const handleManualPlay = async () => { if (!text.trim()) return setErrorMsg('Escribe algo primero.'); // Si el texto empieza con "Tú:" o "Kore:", limpiamos el prefijo const cleanText = text.replace(/^(Tú:|Kore:)\s*/, ''); if (!cleanText.trim()) return setErrorMsg('Texto vacío después de limpiar.'); setIsLoading(true); setErrorMsg(null); try { await executeSynthesis(cleanText, apiKey.trim()); } catch (err) { setErrorMsg(err.message); setIsLoading(false); } }; const toggleHandsFree = () => { if (!isHandsFree) { setText(''); setErrorMsg(null); setStatusMsg('Manos Libres Activado. Habla...'); // Desbloquear audio en algunos navegadores if (activeAudioRef.current) { activeAudioRef.current.src = SILENT_WAV; activeAudioRef.current.play().catch(() => {}); } try { recognitionRef.current.start(); } catch (e) {} } else { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Sistemas en pausa.'); if (recognitionRef.current) recognitionRef.current.stop(); } setIsHandsFree(!isHandsFree); }; const stopAudio = () => { if (activeAudioRef.current) { activeAudioRef.current.pause(); activeAudioRef.current.currentTime = 0; } setIsPlaying(false); setStatusMsg('Señal interrumpida.'); }; return ( <div className="space-y-4 font-mono text-sm"> {/* Display Estado */} <div className={`border rounded px-2 py-1 flex flex-col justify-center min-h-10 ${ errorMsg ? 'bg-red-950/50 border-red-900' : isHandsFree ? 'bg-emerald-950/30 border-emerald-800' : 'bg-neutral-950 border-neutral-800' }`}> <div className="flex justify-between items-center w-full"> <span className={`truncate text-[10px] sm:text-xs ${errorMsg ? 'text-red-500' : 'text-emerald-500'}`}> > {errorMsg || statusMsg} </span> {isPlaying && !errorMsg && <Activity size={14} className="text-emerald-500 animate-pulse ml-2 flex-shrink-0" />} {isLoading && !errorMsg && <Zap size={14} className="text-amber-500 animate-pulse ml-2 flex-shrink-0" />} {isHandsFree && !isPlaying && !isLoading && !errorMsg && <Mic size={14} className="text-red-500 animate-pulse ml-2 flex-shrink-0" />} </div> </div> {/* Input Texto / Log */} <textarea value={text} onChange={(e) => setText(e.target.value)} className="w-full bg-neutral-950/50 border border-neutral-700 rounded p-2 text-xs text-neutral-300 focus:outline-none focus:border-emerald-500 resize-none h-20" placeholder={isHandsFree ? "Escuchando transcripción en tiempo real..." : "Escribe texto directo o activa Manos Libres..."} readOnly={isHandsFree || isLoading} /> {/* Sliders continuos (controlan SSML en tiempo real) */} <div className="space-y-3 bg-neutral-950/30 p-3 rounded border border-neutral-800"> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Agresiva</span><span className="text-emerald-400">Dulzura [{dulzura}]</span><span>Dulce</span> </div> <input type="range" min="0" max="100" value={dulzura} onChange={(e)=>setDulzura(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-emerald-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Robótica</span><span className="text-pink-400">Aura [{sensualidad}]</span><span>Sensual</span> </div> <input type="range" min="0" max="100" value={sensualidad} onChange={(e)=>setSensualidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-pink-500 cursor-pointer" /> </div> <div className="space-y-1"> <div className="flex justify-between text-[9px] sm:text-[10px] text-neutral-500 uppercase font-bold"> <span>Atenuada</span><span className="text-amber-400">Intensidad [{intensidad}]</span><span>Fuerte</span> </div> <input type="range" min="0" max="100" value={intensidad} onChange={(e)=>setIntensidad(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none accent-amber-500 cursor-pointer" /> </div> </div> {/* Botones de Control */} <div className="flex flex-col sm:flex-row gap-2"> <button onClick={toggleHandsFree} disabled={isLoading} className={`flex-1 py-2 rounded text-xs font-bold flex items-center justify-center gap-2 transition-colors border ${ isHandsFree ? 'bg-red-900/20 text-red-400 border-red-900/50 hover:bg-red-900/40 shadow-[0_0_10px_rgba(239,68,68,0.2)]' : 'bg-indigo-900/20 text-indigo-400 border-indigo-900/50 hover:bg-indigo-900/40' }`} > {isHandsFree ? <MicOff size={14} /> : <Mic size={14} />} {isHandsFree ? 'Detener Escucha' : 'Manos Libres'} </button> <div className="flex gap-2 flex-1"> <button onClick={handleManualPlay} disabled={isLoading || isPlaying || isHandsFree} className="flex-1 bg-emerald-600/20 hover:bg-emerald-600/40 text-emerald-400 border border-emerald-600/50 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center gap-1 transition-colors" > {isLoading ? <Loader2 size={14} className="animate-spin" /> : <Play size={14} />} Sintetizar </button> <button onClick={stopAudio} disabled={!isPlaying && !isHandsFree} className="px-4 bg-neutral-800 hover:bg-neutral-700 text-neutral-400 border border-neutral-700 disabled:opacity-30 py-2 rounded text-xs font-bold flex items-center justify-center transition-colors" > <Square size={14} /> </button> </div> </div> {/* Botón para limpiar caché (opcional) */} <div className="text-right"> <button onClick={() => audioCache.clear()} className="text-[8px] text-neutral-600 hover:text-neutral-400 underline" > limpiar caché de audio </button> </div> </div> ); }; // --- ENTORNO ESCRITORIO (sin cambios) --- export default function App() { const [widgets, setWidgets] = useState({ voice: { isOpen: true, pos: { x: window.innerWidth > 768 ? window.innerWidth / 2 - 170 : 20, y: 40 } } }); const toggleWidget = (id) => { setWidgets(prev => ({ ...prev, [id]: { ...prev[id], isOpen: !prev[id].isOpen } })); }; return ( <div className="w-full h-screen bg-neutral-950 bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(16,185,129,0.1),rgba(0,0,0,1))] overflow-hidden relative font-sans text-neutral-200"> <div className="absolute inset-0 flex items-center justify-center opacity-[0.02] pointer-events-none"><Settings2 size={500} /></div> {widgets.voice.isOpen && ( <DraggableWidget title="MODULADOR VOCAL KORE" icon={Zap} initialPos={widgets.voice.pos} onClose={() => toggleWidget('voice')}> <VoiceModulatorWidget /> </DraggableWidget> )} <div className="absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-neutral-900/80 backdrop-blur-md border border-neutral-700/50 p-2 rounded-2xl shadow-2xl flex gap-2 z-[100]"> <div className="px-3 flex items-center border-r border-neutral-700/50 text-neutral-500"><LayoutGrid size={20} /></div> <button onClick={() => toggleWidget('voice')} className={`px-4 py-2 rounded-xl flex items-center gap-2 text-sm font-medium transition-all ${
{ "prompt_type": "image_recreation", "intent": "faithful photographic recreation", "source_reference": "single female subject walking outdoors on roadside", "scene_description": { "setting": { "environment": "outdoor semi-rural roadside", "ground": "asphalt road with dusty soil edges", "background": [ "open dry field with sparse vegetation", "blue-framed industrial shed or warehouse structure in mid-background", "utility pole on right side of frame" ], "clutter": "minimal", "other_people": "none" }, "lighting": { "type": "natural daylight", "time_of_day": "late morning to afternoon", "sun_position": "high, slightly left of camera", "shadows": { "direction": "cast toward lower left", "hardness": "moderately defined edges" }, "color_temperature": "neutral daylight ~5500K", "contrast": "medium" } }, "subject": { "count": 1, "gender_presentation": "female", "age_range_estimate": "early 20s to early 30s", "ethnicity_observed": "South Asian appearance", "pose_and_motion": { "action": "walking forward toward camera", "leg_position": "right leg stepping forward", "hand_position": "both hands placed on hips", "posture": "upright, confident, controlled", "motion_cues": { "fabric_flow": "salwar and dupatta show gentle forward motion", "upper_body_stability": "steady with minimal sway" } }, "expression_and_gaze": { "facial_expression": "soft, composed smile", "eye_direction": "direct eye contact with camera", "emotional_tone": "confident, calm, poised" { "body_type_and_structure": { "body_type": "extremely curvy, overwhelmingly full-figured", "skeletal_frame": "medium frame, yet the size and width are so pronounced that it feels almost larger than life", "figure_silhouette": "hyper-exaggerated hourglass, with curves that seem impossibly dramatic and accentuated", "proportions": { "shoulders": "broad, powerfully wide with a strong, sharply defined slope that adds to the exaggerated proportions", "waist": "incredibly, unnaturally defined, pulled in to an extreme level, creating an almost impossible contrast to the hips", "hips": "massively wide and intensely rounded, their size and shape exaggerated beyond the typical hourglass form", "legs": "extraordinarily full, upper thighs that dramatically taper in an exaggerated way toward impossibly slender ankles" }, "mass_distribution": "overwhelmingly focused on the bust and hips, giving a massively disproportionate, almost exaggerated sense of fullness across the body", "height_estimate": "average height, but with the exaggerated proportions, it gives the illusion of someone much taller and even more striking in appearance" }, "chest_and_torso_contour": { "chest_volume": "immensely full, pushing the natural limits of volume and projection", "shape": "rounded, exaggeratedly full with a deeply pronounced natural contour that seems more than realistic", "projection": "extremely forward-projected, with the garment hugging the chest so tightly it appears even more pronounced", "separation": "hyper-visible, with an exaggerated moderate natural separation that cuts sharply into the neckline", "support_inference": "contoured so perfectly by the fitted garment that it creates an illusion of flawless structure, with no undergarment outlines visible, only smooth curves", "torso_behavior": "extremely stable during movement, with any minimal bounce making the curves even more exaggerated" } }"stillness_and_control": { "movement_quality": "controlled stride", "upper_body_stillness": "high relative stability", "core_engagement_inferred": "moderate, contributing to posture and balance", "pose_confidence": "high" } }, "appearance_details": { "face": { "shape": "oval", "skin_tone": "medium warm brown", "makeup": { "foundation": "even matte finish", "eyes": "defined eyeliner with subtle eyeshadow", "lips": "soft pink tone" } }, "hair": { "color": "black", "style": "center-parted, pulled back into low ponytail or bun", "texture": "straight", "flyaways": "minimal" }, "accessories": { "earrings": "small dangling earrings, metallic with light ornament", "bracelets": "thin bangles on wrist", "necklace": "none visible" } }, "clothing": { "outfit_type": "traditional South Asian salwar kameez", "kameez": { "color": "deep purple", "fit": "form-fitting, contour-following", "neckline": "wide scoop neckline", "sleeves": "long sleeves", "fabric": { "texture": "smooth, stretch knit appearance", "sheen": "low to moderate" } }, "salwar": { "color": "light lavender", "fit": "loose, draped", "fabric": { "texture": "soft and flowing", "opacity": "slightly translucent in highlights" } }, "dupatta": { "color": "sheer purple", "opacity": "semi-transparent", "drape": "loosely around shoulders, trailing behind", "motion": "gentle flow consistent with walking" }, "footwear": { "type": "flat sandals", "color": "neutral beige", "details": "decorative strap across toes" } }, "camera_and_composition": { "shot_type": "full-body portrait", "framing": "subject centered, head-to-toe visible", "camera_height": "approximately waist to chest level of subject", "angle": "slightly low angle", "lens_focal_length_equivalent": "35–50mm", "distortion": "minimal", "depth_of_field": { "level": "moderate", "background": "mostly in focus with slight separation" } }, "color_and_style": { "dominant_colors": [ "deep purple", "lavender", "warm brown", "neutral gray" ], "accent_colors": [ "blue background structure", "beige sandals" ], "saturation": "moderate", "style": "realistic, un-stylized photography", "editing": "minimal post-processing" }, "generation_constraints": { "maintain_realism": true, "avoid_exaggeration": [ "unnatural anatomy", "hyper-stylized proportions", "dramatic or cinematic lighting" ], "do_not_add": [ "additional people", "urban cityscape", "props not present in scene" ] }, "optional_variants": [ { "name": "softer portrait variant", "adjustments": { "depth_of_field": "slightly shallower", "background_blur": "increased subtly", "contrast": "slightly reduced" } } ] }
A beautiful young woman (ethnicity:1.2), (age:1.1), with long blonde hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).
Ultra-realistic 8K editorial fashion portrait, full body, vertical 9:16, award-winning photographic realism. [the woman from the uploaded image — use the reference image as the exact base for face, facial features, and hairstyle] (based on ME — the model is myself, Beatriz Kloch, with my exact facial identity — NOT a generic model). My face is recognizable, my expression is vibrant, my pose is powerful and natural. THEME — MY IDENTITY, MY PRESENCE: The model is ME. My face is unmistakably mine — not generic beauty, not a composite. My expression is confident, magnetic, full of life: direct eye contact with the camera, a subtle, perceptive smile suggesting glamour and power. My pose is relaxed yet commanding, exuding sensuality and editorial sophistication. BODY TYPE — SCULPTURAL CURVILINEAR BODY (MY BODY): Full body visible, my elegant curvilinear proportions: naturally full bust, defined slim waist, wide powerful hips, sculpted thighs, defined calves. I am not overly thin nor “runway skinny”; the fitted dress enhances and highlights my real, feminine, sensual, strong curves with realistic and refined anatomy. No exaggerated proportions, no anatomical distortion. POSE — ALIVE, BREATHING, ICONIC: I stand in a confident, organic pose: weight on one leg, hip slightly projected, creating a natural S-curve. One arm holds a luxurious bouquet of red roses close to my body, as if offering it — the bouquet is cherished, desired, an extension of me. The other arm rests gracefully along my body or lightly touches my hip. My head is slightly tilted, chin lifted, eyes locked on the lens with a captivating, vibrant expression — not rigid, not mannequin-like. There is movement in my posture, a sense of a captured moment rather than a static pose. BOUQUET — DESIRED, HELD WITH INTENTION: The bouquet of deep red roses rests against my body, nestled into my curves as if it is precious and deliberately part of my silhouette. Not loose or floating — my arm naturally wraps around it, stems visible, flowers lush and velvety. It complements my shape, adding richness and color without overwhelming me. HAIR — JET BLACK, LUMINOUS: Same hair as the reference image; styled accordingly. My hair is long, jet black — with a soft, warm, luminous shine, no light tones, no highlights. It flows in soft, voluminous waves, catching light with a satin-like healthy glow. Some strands frame my face delicately, others cascade down my back and over one shoulder. The color is clearly dark, radiant, and glossy. (Apply the hairstyle while preserving the bangs 100% of the time.) MAKEUP — INTENSE EDITORIAL SMOKY EYES: Dramatic smoky eyes in deep tones, well blended, enhancing my gaze. Skin has a natural luminous finish with visible texture — pores, micro-variations — NO artificial smoothing. Cheekbones subtly sculpted with blush, lips in a soft pink tone. My face is alive and expressive, not mask-like. (Apply makeup while preserving my face 100% of the time.) DRESS: A long, ultra-fitted dress in premium white or off-white fabric with a high, generous side slit, embracing my curves — bust, waist, hips — creating a sensual hourglass silhouette. The fabric has weight and natural drape, visible texture, no artificial shine. The slit reveals my leg, adding dynamism to the pose. JEWELRY & NAILS — CARTIER-STYLE IN 24K GOLD WITH DIAMONDS: Earrings: iconic medium-sized hoop earrings in 24K yellow gold, each with a single pavé diamond catching intense light. Necklaces: layered 24K yellow gold chains — a short chain with a solitaire diamond pendant and a slightly longer chain with a small pavé diamond love-ring motif or diamond disc. Bracelet: rigid 24K yellow gold bracelet, classic “love bangle” style (screw motifs) or a thin diamond-studded bracelet, worn on the wrist holding the bouquet, catching the key light. Rings: multiple 24K yellow gold rings on both hands — a simple diamond band, a thin “love” ring, and a larger diamond ring in a classic setting. All rings feature visible diamond brilliance. Nails: long coffin-shaped nails with nude base and silver micro-crystal details at the tips, clearly visible while holding the bouquet stems. BACKGROUND — SOFT, ATMOSPHERIC, SUPPORTIVE: Soft white studio with large windows and fine horizontal blinds, creating gentle bands of light. The background is intentionally soft and low-contrast — it exists to frame me, not compete. I am the sharpest, brightest, most detailed element. Windows are suggestive, not dominant. LIGHTING — SCULPTING, DRAMATIC, FLATTERING: Lighting designed to highlight me: a soft key light from front-left sculpts my face and curves, while a backlight creates a subtle halo around my hair and shoulders. I appear luminous, three-dimensional, alive. Shadows are soft, preserving detail. Jewelry captures specular highlights; diamonds sparkle with natural dispersion. CAPTURE: Full-body framing with 50–85mm lens, vertical 9:16. Ultra-sharp focus on my face — eyes and expression. My curves, bouquet, and dress slit are also sharp but secondary. Background softly blurred. Maximum micro-detail, natural texture, photographic realism — raw style. SIGNATURE — ANGELFACE, PROMINENT YET SUBTLE: 80% — MAIN SIGNATURE: “Beatriz Kloch♥” in Angelface Script, with ornamental B and K, large and integrated into the background wall (between windows or above), as a soft luminous engraving, light ivory, 12–18% opacity, never on me or my dress. NEGATIVE: Generic face, artificial skin, smoothed pores, incorrect hair tone or highlights, loose or unwanted bouquet, stiff pose, lifeless expression, background competing with subject, windows as focal point, illustration/CGI look, signature on skin or clothing, silver jewelry, mixed metals. It must look like a true award-winning fashion photograph — alive, expressive, with me as the undeniable protagonist, adorned in luxurious 24K gold and diamonds. 🚀 MidJourney: --v 6.1 --style raw --ar 9:16 --s 100
{ "meta": { "aspect_ratio": "3:4", "quality": "ultra_photorealistic", "camera": "smartphone rear camera", "lens_equivalent": "24mm wide", "style": "natural indoor daylight realism, no filters, no beautification" }, "identity_lock": { "instruction": "Replace the person with MY EXACT FEMALE MODEL. Face shape, eyes, nose, lips, jawline, skin texture, height perception, limb length, and body proportions must remain identical to the model reference. No face drift." }, "camera_and_composition": { "position": "camera placed directly in front of subject at seated eye level", "distance": "close-medium", "perspective": "wide-angle foreshortening", "framing": { "dominance": "bare feet closest to the camera dominate the foreground", "feet_scale": "feet appear significantly larger than the face due to proximity", "face_position": "face centered behind feet in the mid-background", "crop": "feet fully visible, legs, torso, and head all inside frame" }, "depth_of_field": "deep focus, feet and face both sharp" }, "pose": { "base_position": "subject seated on a sofa", "leg_configuration": { "knees": "pulled tightly toward chest", "legs": "both legs raised and folded upward", "feet": { "orientation": "soles facing directly toward the camera", "distance": "feet extremely close to lens", "detail": "natural sole texture, soft creases, relaxed toes" } }, "arms": { "placement": "both arms wrapped around shins", "hands": "gripping or resting near ankles, pulling legs inward" }, "torso": { "posture": "slightly leaned back into couch cushions", "compression": "natural abdominal compression from knees-to-chest pose" }, "shoulders": "slightly rounded forward due to embrace of legs", "head": { "position": "centered between legs", "tilt": "very slight neutral tilt", "height": "face positioned behind feet, partially framed by knees" } }, "facial_expression": { "expression": "calm, neutral to mildly serious", "eyes": "looking directly at camera", "mouth": "relaxed lips, no exaggerated smile or pout", "emotion": "composed, quietly confident, non-performative" }, "body_and_skin": { "body_type": "fit and feminine, naturally compressed by seated pose", "skin_texture": "realistic, visible pores and natural variation", "feet_details": "slight pink warmth on soles, natural pressure coloration" }, "hair": { "style": "loose, natural waves", "placement": "falling around shoulders and framing face", "behavior": "not styled, casual indoor look" }, "outfit": { "type": "loose matching lounge set", "top": { "style": "thin strap or sleeveless", "fit": "relaxed, natural drape" }, "bottom": { "style": "loose pants", "behavior": "fabric bunched and folded heavily around hips, knees, and calves due to pose" } }, "environment": { "setting": "modern apartment living room", "seating": "light-colored fabric sofa with visible texture", "background": [ "large window allowing daylight", "minimal decor", "soft furnishings (pillows, throw blanket)" ], "lighting": { "source": "natural daylight from window", "quality": "soft and even, no dramatic shadows" } }, "realism_constraints": { "allowed": [ "natural posture compression", "foot foreshortening", "imperfect symmetry", "minor handheld framing imperfections" ], "forbidden": [ "pose changes", "standing or lying positions", "legs lowered", "feet angled away", "face pushed forward in front of feet", "beauty filters", "stylized anatomy" ] } }
A beautiful young woman (ethnicity:1.2), (age:1.1), with long black hair, bright blue eyes, wearing a white distressed t-shirt (detailed clothing:1.2) and yellow shorts, wet appearance, (detailed facial features:1.3), soft smile (expression:1.2), athletic body type (body type:1.1), posing confidently and slightly sensual (pose:1.2), standing in front of a graffiti-covered wall, centered in the frame, facing the viewer, shot with a shallow depth of field, natural lighting, a photorealistic style, with a slightly blurred background, high detail, vibrant colors, emphasizing the woman's features and the contrast between her appearance and the urban setting, artstation quality, 8k resolution, (detailed skin texture:1.3).