A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
{ "format": { "orientation": "vertical poster", "aspect_ratio": "approximately 4:5", "resolution_character": "print-style, high clarity with intentional grain" }, "composition": { "layout": "asymmetrical editorial layout", "visual_hierarchy": [ "large headline typography at top left", "subheadline directly beneath", "body copy block mid-left", "vehicle occupying lower right quadrant", "small brand mark top right" ], "cropping": "partial vehicle crop showing front-left quarter only", "negative_space": "generous negative space in upper half for typography" }, "subject": { "primary": "BMW E30 M3 sports sedan", "view": "front-left three-quarter, low angle", "details_visible": [ "dual round headlights", "kidney grille", "box flared wheel arch", "mesh-style wheel", "front splitter" ], "pose": "static, grounded, performance-oriented stance" }, "background": { "type": "solid studio backdrop", "color": "muted forest green", "texture": "subtle film grain / matte paper feel", "depth": "flat, no depth cues" }, "color_palette": { "dominant_colors": [ "deep desaturated green", "off-white / cream", "charcoal black" ], "accent_colors": [ "warm gray", "soft metallic silver" ], "overall_tone": "vintage, muted, low-saturation" }, "lighting": { "style": "soft studio lighting", "direction": "diffused frontal with slight top-left bias", "contrast": "low to medium", "shadows": "soft, minimal edge definition", "highlights": "controlled, non-specular" }, "typography": { "headline": { "text": "E30", "font_style": "high-contrast serif", "weight": "thin to medium", "case": "uppercase", "color": "off-white", "scale": "oversized, dominant" }, "subheadline": { "text": "BMW M3", "font_style": "classic serif", "weight": "medium", "case": "uppercase", "tracking": "slightly expanded" }, "body_copy": { "font_style": "traditional serif", "size": "small", "line_height": "tight", "alignment": "left-aligned", "color": "off-white" }, "caption": { "placement": "bottom center", "font_style": "small serif", "opacity": "slightly reduced" } }, "branding": { "logo": { "placement": "top right corner", "scale": "small", "treatment": "monochrome white" }, "brand_presence": "minimal, editorial" }, "artistic_style": { "influences": [ "1980s automotive print ads", "modern retro editorial design", "luxury heritage branding" ], "mood": "nostalgic, refined, performance-focused", "aesthetic": "timeless, understated, premium" }, "technical_traits": { "grain": "intentional film grain overlay", "sharpness": "moderate, slightly softened", "color_grading": "green-biased vintage grade", "print_emulation": "matte magazine paper look" }, "intended_use": { "application": [ "automotive poster", "editorial spread", "brand storytelling content", "social media retro car feature" ], "audience": "enthusiasts, collectors, design-focused viewers" } }
ULTRA-STRICT multi-product commercial advertising generation. Use ALL attached images of the included products as mandatory references. Each product must remain 100% identical to its attached reference image. Preserve exact proportions, scale, packaging, colors, labels, and structure. No redesign. No reinterpretation. No stylization. No product blending. No dimension distortion. COMPOSITION RULE: All products must be arranged symmetrically and centered horizontally. Maintain proportional scale balance between products. Equal visual weight distribution. Natural spacing between products. No overlap hiding important details. MANDATORY SAFE ZONE PLACEMENT: All attached products must be positioned strictly within the central third (middle horizontal third) of the generated image. The upper third 1080x360 pixels and lower third 1080x360 pixels must remain completely free of products. No product elements. No shadows crossing into these areas. No reflections. No objects in top third. No objects in bottom third. TEXT STRUCTURE AND TYPOGRAPHY RULES: 1) Advertisement Title Placement: Place the advertisement title directly under the logo inside the upper third area. - First line: Arabic title (عكّازات) Font: Montaser Arabic Bold (gras) Color: #02a649 - Second line: French title (Cannes et Béquilles) Font: Montaser Arabic Normal Color: #004aad Ensure clean hierarchy, perfect spacing, and professional alignment. Text must remain fully inside the upper third safe zone (1080x360 pixels). Do not overlap any product elements. 2) Motivational Text Above CTA Button: Place a two-line motivational text directly above the shopping button inside the lower third. - First line (ثبات وأمان لفترة النّقاهة.) Font: Almarai Normal - Second line (قابلة للتعديل ومقاومة للانزلاق.) Font: Almarai Light (léger) Maintain clean spacing and premium advertising balance. Text must remain strictly inside the lower third safe zone (1080x360 pixels). This requirement is extremely mandatory to allow ideal text placement later inside Facebook Ads Manager without covering the products. Use the attached background as the background for the image. Soft professional diffused lighting. Subtle realistic shadows strictly contained inside the central third only. Premium medical advertising catalog look. Square format 1:1 (1080x1080). High-end Facebook Carousel visual. Nano Banana Gemini optimized. Any deviation from attached reference images is strictly prohibited. If mismatch occurs, regenerate until exact structural match is achieved. NEGATIVE PROMPT: distorted proportions, wrong scale, modified packaging, changed labels, missing details, extra objects, additional accessories, cropped products, zoomed-in composition, oversized products, undersized products, objects outside central third, shadows entering top third, shadows entering bottom third, reflections outside safe zone, text outside designated thirds, misaligned typography, wrong font usage, low contrast text, poor readability, cluttered layout, overcrowded badges, unbalanced composition, watermarks, logos, branding additions, background clutter, medical scenes, people, hands, 3D stylization, cartoon effect, illustration style, color shifts, oversaturated colors, harsh lighting, dramatic shadows, vignette too strong, blur, low resolution, noise, compression artifacts
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
Use the uploaded image as the exact reference. Do not change the layout, numbers (1–10), fonts, or overall design. Keep the same font chart structure. Improve the overall image quality to make it clearer, sharper, and more professional for an Etsy product listing. Enhance brightness, contrast, and sharpness so every letter and font style is easy to read. Make the background cleaner, smoother, and more uniform while keeping the soft blue decorative style. Ensure all font numbers (1–10) appear crisp and clearly visible with high clarity. Improve the definition of all letters so the alphabet examples look sharp and high resolution. Style: Clean modern Etsy listing style, minimal and professional. Lighting: Bright soft studio lighting with balanced contrast and even illumination across the image. Quality: Ultra-sharp, high resolution, professional e-commerce product listing image, 4K quality, extremely clear typography.
A professional church event flyer with a modern, dark, high-contrast digital-urban design aesthetic, featuring text and an image of a smiling Black man in a suit. Overall Design: The flyer is a clean, graphic layout with a distinct horizontal division. The top two-thirds features a dark, vibrant background. The bottom third is a clean white section for detailed information. Top Section (Dark): • Background: A dark city night scene with vibrant red and blue neon light trails, suggesting a digital or cyber environment, and subtle geometric patterns. The edge of the white bottom section has a paint-brushed or ripped-paper effect. • Text (All-Caps, Large, Stacked): • SKY CHURCH PRESENT (in smaller, sans-serif white text at the very top) • SUNDAY (large, white, sans-serif font) • SERVICE (large, gold/yellow, sans-serif font) • Portrait: On the right side, there is a realistic photo of a smiling Black man with short-cropped hair, wearing glasses, a grey suit jacket, a white shirt, and a dark blue tie. His arms are crossed, and a gold-colored watch is visible on his left wrist. • Date/Time (Centered): • FEB 25TH (large, white, sans-serif font) • SUNDAY MORNING (smaller, white, sans-serif font directly below) • Effect: A prominent horizontal red-to-gold flare or burst effect runs across the composition, below "SERVICE" and across the man's lower chest, creating a sense of energy. Bottom Section (White): • Background: Clean, solid white with the upper edge textured like paint or torn paper. • Elements: • Facebook Live Icon: A large, round, 3D-effect blue Facebook logo with a separate smaller "LIVE" text in a red circular bubble next to it. • "Time" Text: The word "Time" written in stylized, cursive red script. • Service Time: "8.00PM" in smaller, black, sans-serif font directly below "Time". • Speaker Text (Right Aligned): • PROPHET (large, black, sans-serif font) • ANDREW JAMES SMITH (large, red, sans-serif font below "PROPHET") • Contact Info (At the very bottom, on a subtle red bar): • CHURCH NAME, 44 NEW DESIGN STREET, NY 1105 (smaller, white text on red bar) • WATCH ONLINE VISIT WWW.WEBSITE.COM (smaller, white text below the address text on the red bar) Visual Style: A modern, energetic blend of professional photography, graphic text overlays, and futuristic city elements with strong contrasting colors (red, gold, white on black). The typography is predominantly bold and clean sans-serif, with the notable exception of the cursive "Time" script.
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
Create a detailed food infographic in a professional style, presented from a top-down perspective with a completely clean white background.Display the ingredients in an Exploded View, each clearly separated, with clear and concise labels in Modern Standard Arabic, arranged from bottom to top as follows:The base of the long bun is separated.Mayonnaise (20g) is separated, with a clear creamy consistency.Thin, long strips of fresh American lettuce (40g) are separated.Two crispy, golden-brown crispy strips are placed side by side to cover the length of the sandwich.A slice of cheddar cheese is cut into two adjacent triangles.Two halved slices of fresh tomato are placed side by side.The top of the long sesame bun is separated.Connect the ingredients with the step icons using thin, black dashed lines in one direction in a simple and clear manner. Also, connect the step icons with dashed lines and display a picture of the finished product at the bottom of the diagram.At the bottom of the diagram, display a final image of the sandwich complete with all the above ingredients, in the correct order, with high realism and professional lighting.Remove the backgrounds from all food images and place them on a white background only.Attach the attached logo in the bottom right corner of the design, sized 3 cm x 3 cm, without any distortion.Write the sandwich name at the top center of the page as follows:“Filler Sandwich”In bold, black, large, clear, and central Arabic font.Design style: Simple, clean, professional, suitable for restaurant menus and marketing materials.🖋️ Suggested fonts (important for you 👇)🔹 Sandwich Name:Font: Cairo Black or DIN Next Arabic BoldColor: Solid Black (#000000)🔹 Ingredient Labels:Font: Cairo Regular or Tajawal MediumColor: Dark Gray (#333333)🔹 Description and Icons:Font: Tajawal LightColor: Dark Gray (#555555)
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
A high-quality image showcasing a stylish logo with the text 'AiFlux Coffee Bar' in an elegant and modern font. The design should have a coffee-themed background, with warm tones and subtle coffee elements like coffee beans or steam. The logo should be visually striking and centered, with 'AiFlux' in a bold font and 'Coffee Bar' in a slightly smaller, complementary font underneath. The overall style should convey a sophisticated and inviting coffee brand atmosphere.
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
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 ${
{ "format": { "orientation": "vertical poster", "aspect_ratio": "approximately 4:5", "resolution_character": "print-style, high clarity with intentional grain" }, "composition": { "layout": "asymmetrical editorial layout", "visual_hierarchy": [ "large headline typography at top left", "subheadline directly beneath", "body copy block mid-left", "vehicle occupying lower right quadrant", "small brand mark top right" ], "cropping": "partial vehicle crop showing front-left quarter only", "negative_space": "generous negative space in upper half for typography" }, "subject": { "primary": "BMW E30 M3 sports sedan", "view": "front-left three-quarter, low angle", "details_visible": [ "dual round headlights", "kidney grille", "box flared wheel arch", "mesh-style wheel", "front splitter" ], "pose": "static, grounded, performance-oriented stance" }, "background": { "type": "solid studio backdrop", "color": "muted forest green", "texture": "subtle film grain / matte paper feel", "depth": "flat, no depth cues" }, "color_palette": { "dominant_colors": [ "deep desaturated green", "off-white / cream", "charcoal black" ], "accent_colors": [ "warm gray", "soft metallic silver" ], "overall_tone": "vintage, muted, low-saturation" }, "lighting": { "style": "soft studio lighting", "direction": "diffused frontal with slight top-left bias", "contrast": "low to medium", "shadows": "soft, minimal edge definition", "highlights": "controlled, non-specular" }, "typography": { "headline": { "text": "E30", "font_style": "high-contrast serif", "weight": "thin to medium", "case": "uppercase", "color": "off-white", "scale": "oversized, dominant" }, "subheadline": { "text": "BMW M3", "font_style": "classic serif", "weight": "medium", "case": "uppercase", "tracking": "slightly expanded" }, "body_copy": { "font_style": "traditional serif", "size": "small", "line_height": "tight", "alignment": "left-aligned", "color": "off-white" }, "caption": { "placement": "bottom center", "font_style": "small serif", "opacity": "slightly reduced" } }, "branding": { "logo": { "placement": "top right corner", "scale": "small", "treatment": "monochrome white" }, "brand_presence": "minimal, editorial" }, "artistic_style": { "influences": [ "1980s automotive print ads", "modern retro editorial design", "luxury heritage branding" ], "mood": "nostalgic, refined, performance-focused", "aesthetic": "timeless, understated, premium" }, "technical_traits": { "grain": "intentional film grain overlay", "sharpness": "moderate, slightly softened", "color_grading": "green-biased vintage grade", "print_emulation": "matte magazine paper look" }, "intended_use": { "application": [ "automotive poster", "editorial spread", "brand storytelling content", "social media retro car feature" ], "audience": "enthusiasts, collectors, design-focused viewers" } }
A professional church event flyer with a modern, dark, high-contrast digital-urban design aesthetic, featuring text and an image of a smiling Black man in a suit. Overall Design: The flyer is a clean, graphic layout with a distinct horizontal division. The top two-thirds features a dark, vibrant background. The bottom third is a clean white section for detailed information. Top Section (Dark): • Background: A dark city night scene with vibrant red and blue neon light trails, suggesting a digital or cyber environment, and subtle geometric patterns. The edge of the white bottom section has a paint-brushed or ripped-paper effect. • Text (All-Caps, Large, Stacked): • SKY CHURCH PRESENT (in smaller, sans-serif white text at the very top) • SUNDAY (large, white, sans-serif font) • SERVICE (large, gold/yellow, sans-serif font) • Portrait: On the right side, there is a realistic photo of a smiling Black man with short-cropped hair, wearing glasses, a grey suit jacket, a white shirt, and a dark blue tie. His arms are crossed, and a gold-colored watch is visible on his left wrist. • Date/Time (Centered): • FEB 25TH (large, white, sans-serif font) • SUNDAY MORNING (smaller, white, sans-serif font directly below) • Effect: A prominent horizontal red-to-gold flare or burst effect runs across the composition, below "SERVICE" and across the man's lower chest, creating a sense of energy. Bottom Section (White): • Background: Clean, solid white with the upper edge textured like paint or torn paper. • Elements: • Facebook Live Icon: A large, round, 3D-effect blue Facebook logo with a separate smaller "LIVE" text in a red circular bubble next to it. • "Time" Text: The word "Time" written in stylized, cursive red script. • Service Time: "8.00PM" in smaller, black, sans-serif font directly below "Time". • Speaker Text (Right Aligned): • PROPHET (large, black, sans-serif font) • ANDREW JAMES SMITH (large, red, sans-serif font below "PROPHET") • Contact Info (At the very bottom, on a subtle red bar): • CHURCH NAME, 44 NEW DESIGN STREET, NY 1105 (smaller, white text on red bar) • WATCH ONLINE VISIT WWW.WEBSITE.COM (smaller, white text below the address text on the red bar) Visual Style: A modern, energetic blend of professional photography, graphic text overlays, and futuristic city elements with strong contrasting colors (red, gold, white on black). The typography is predominantly bold and clean sans-serif, with the notable exception of the cursive "Time" script.
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
Create a detailed food infographic in a professional style, presented from a top-down perspective with a completely clean white background.Display the ingredients in an Exploded View, each clearly separated, with clear and concise labels in Modern Standard Arabic, arranged from bottom to top as follows:The base of the long bun is separated.Mayonnaise (20g) is separated, with a clear creamy consistency.Thin, long strips of fresh American lettuce (40g) are separated.Two crispy, golden-brown crispy strips are placed side by side to cover the length of the sandwich.A slice of cheddar cheese is cut into two adjacent triangles.Two halved slices of fresh tomato are placed side by side.The top of the long sesame bun is separated.Connect the ingredients with the step icons using thin, black dashed lines in one direction in a simple and clear manner. Also, connect the step icons with dashed lines and display a picture of the finished product at the bottom of the diagram.At the bottom of the diagram, display a final image of the sandwich complete with all the above ingredients, in the correct order, with high realism and professional lighting.Remove the backgrounds from all food images and place them on a white background only.Attach the attached logo in the bottom right corner of the design, sized 3 cm x 3 cm, without any distortion.Write the sandwich name at the top center of the page as follows:“Filler Sandwich”In bold, black, large, clear, and central Arabic font.Design style: Simple, clean, professional, suitable for restaurant menus and marketing materials.🖋️ Suggested fonts (important for you 👇)🔹 Sandwich Name:Font: Cairo Black or DIN Next Arabic BoldColor: Solid Black (#000000)🔹 Ingredient Labels:Font: Cairo Regular or Tajawal MediumColor: Dark Gray (#333333)🔹 Description and Icons:Font: Tajawal LightColor: Dark Gray (#555555)
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
A high-quality image showcasing a stylish logo with the text 'AiFlux Coffee Bar' in an elegant and modern font. The design should have a coffee-themed background, with warm tones and subtle coffee elements like coffee beans or steam. The logo should be visually striking and centered, with 'AiFlux' in a bold font and 'Coffee Bar' in a slightly smaller, complementary font underneath. The overall style should convey a sophisticated and inviting coffee brand atmosphere.
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
ULTRA-STRICT multi-product commercial advertising generation. Use ALL attached images of the included products as mandatory references. Each product must remain 100% identical to its attached reference image. Preserve exact proportions, scale, packaging, colors, labels, and structure. No redesign. No reinterpretation. No stylization. No product blending. No dimension distortion. COMPOSITION RULE: All products must be arranged symmetrically and centered horizontally. Maintain proportional scale balance between products. Equal visual weight distribution. Natural spacing between products. No overlap hiding important details. MANDATORY SAFE ZONE PLACEMENT: All attached products must be positioned strictly within the central third (middle horizontal third) of the generated image. The upper third 1080x360 pixels and lower third 1080x360 pixels must remain completely free of products. No product elements. No shadows crossing into these areas. No reflections. No objects in top third. No objects in bottom third. TEXT STRUCTURE AND TYPOGRAPHY RULES: 1) Advertisement Title Placement: Place the advertisement title directly under the logo inside the upper third area. - First line: Arabic title (عكّازات) Font: Montaser Arabic Bold (gras) Color: #02a649 - Second line: French title (Cannes et Béquilles) Font: Montaser Arabic Normal Color: #004aad Ensure clean hierarchy, perfect spacing, and professional alignment. Text must remain fully inside the upper third safe zone (1080x360 pixels). Do not overlap any product elements. 2) Motivational Text Above CTA Button: Place a two-line motivational text directly above the shopping button inside the lower third. - First line (ثبات وأمان لفترة النّقاهة.) Font: Almarai Normal - Second line (قابلة للتعديل ومقاومة للانزلاق.) Font: Almarai Light (léger) Maintain clean spacing and premium advertising balance. Text must remain strictly inside the lower third safe zone (1080x360 pixels). This requirement is extremely mandatory to allow ideal text placement later inside Facebook Ads Manager without covering the products. Use the attached background as the background for the image. Soft professional diffused lighting. Subtle realistic shadows strictly contained inside the central third only. Premium medical advertising catalog look. Square format 1:1 (1080x1080). High-end Facebook Carousel visual. Nano Banana Gemini optimized. Any deviation from attached reference images is strictly prohibited. If mismatch occurs, regenerate until exact structural match is achieved. NEGATIVE PROMPT: distorted proportions, wrong scale, modified packaging, changed labels, missing details, extra objects, additional accessories, cropped products, zoomed-in composition, oversized products, undersized products, objects outside central third, shadows entering top third, shadows entering bottom third, reflections outside safe zone, text outside designated thirds, misaligned typography, wrong font usage, low contrast text, poor readability, cluttered layout, overcrowded badges, unbalanced composition, watermarks, logos, branding additions, background clutter, medical scenes, people, hands, 3D stylization, cartoon effect, illustration style, color shifts, oversaturated colors, harsh lighting, dramatic shadows, vignette too strong, blur, low resolution, noise, compression artifacts
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
Use the uploaded image as the exact reference. Do not change the layout, numbers (1–10), fonts, or overall design. Keep the same font chart structure. Improve the overall image quality to make it clearer, sharper, and more professional for an Etsy product listing. Enhance brightness, contrast, and sharpness so every letter and font style is easy to read. Make the background cleaner, smoother, and more uniform while keeping the soft blue decorative style. Ensure all font numbers (1–10) appear crisp and clearly visible with high clarity. Improve the definition of all letters so the alphabet examples look sharp and high resolution. Style: Clean modern Etsy listing style, minimal and professional. Lighting: Bright soft studio lighting with balanced contrast and even illumination across the image. Quality: Ultra-sharp, high resolution, professional e-commerce product listing image, 4K quality, extremely clear typography.
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
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 ${
ULTRA-STRICT multi-product commercial advertising generation. Use ALL attached images of the included products as mandatory references. Each product must remain 100% identical to its attached reference image. Preserve exact proportions, scale, packaging, colors, labels, and structure. No redesign. No reinterpretation. No stylization. No product blending. No dimension distortion. COMPOSITION RULE: All products must be arranged symmetrically and centered horizontally. Maintain proportional scale balance between products. Equal visual weight distribution. Natural spacing between products. No overlap hiding important details. MANDATORY SAFE ZONE PLACEMENT: All attached products must be positioned strictly within the central third (middle horizontal third) of the generated image. The upper third 1080x360 pixels and lower third 1080x360 pixels must remain completely free of products. No product elements. No shadows crossing into these areas. No reflections. No objects in top third. No objects in bottom third. TEXT STRUCTURE AND TYPOGRAPHY RULES: 1) Advertisement Title Placement: Place the advertisement title directly under the logo inside the upper third area. - First line: Arabic title (عكّازات) Font: Montaser Arabic Bold (gras) Color: #02a649 - Second line: French title (Cannes et Béquilles) Font: Montaser Arabic Normal Color: #004aad Ensure clean hierarchy, perfect spacing, and professional alignment. Text must remain fully inside the upper third safe zone (1080x360 pixels). Do not overlap any product elements. 2) Motivational Text Above CTA Button: Place a two-line motivational text directly above the shopping button inside the lower third. - First line (ثبات وأمان لفترة النّقاهة.) Font: Almarai Normal - Second line (قابلة للتعديل ومقاومة للانزلاق.) Font: Almarai Light (léger) Maintain clean spacing and premium advertising balance. Text must remain strictly inside the lower third safe zone (1080x360 pixels). This requirement is extremely mandatory to allow ideal text placement later inside Facebook Ads Manager without covering the products. Use the attached background as the background for the image. Soft professional diffused lighting. Subtle realistic shadows strictly contained inside the central third only. Premium medical advertising catalog look. Square format 1:1 (1080x1080). High-end Facebook Carousel visual. Nano Banana Gemini optimized. Any deviation from attached reference images is strictly prohibited. If mismatch occurs, regenerate until exact structural match is achieved. NEGATIVE PROMPT: distorted proportions, wrong scale, modified packaging, changed labels, missing details, extra objects, additional accessories, cropped products, zoomed-in composition, oversized products, undersized products, objects outside central third, shadows entering top third, shadows entering bottom third, reflections outside safe zone, text outside designated thirds, misaligned typography, wrong font usage, low contrast text, poor readability, cluttered layout, overcrowded badges, unbalanced composition, watermarks, logos, branding additions, background clutter, medical scenes, people, hands, 3D stylization, cartoon effect, illustration style, color shifts, oversaturated colors, harsh lighting, dramatic shadows, vignette too strong, blur, low resolution, noise, compression artifacts
Use the uploaded image as the exact reference. Do not change the layout, numbers (1–10), fonts, or overall design. Keep the same font chart structure. Improve the overall image quality to make it clearer, sharper, and more professional for an Etsy product listing. Enhance brightness, contrast, and sharpness so every letter and font style is easy to read. Make the background cleaner, smoother, and more uniform while keeping the soft blue decorative style. Ensure all font numbers (1–10) appear crisp and clearly visible with high clarity. Improve the definition of all letters so the alphabet examples look sharp and high resolution. Style: Clean modern Etsy listing style, minimal and professional. Lighting: Bright soft studio lighting with balanced contrast and even illumination across the image. Quality: Ultra-sharp, high resolution, professional e-commerce product listing image, 4K quality, extremely clear typography.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
A professional church event flyer with a modern, dark, high-contrast digital-urban design aesthetic, featuring text and an image of a smiling Black man in a suit. Overall Design: The flyer is a clean, graphic layout with a distinct horizontal division. The top two-thirds features a dark, vibrant background. The bottom third is a clean white section for detailed information. Top Section (Dark): • Background: A dark city night scene with vibrant red and blue neon light trails, suggesting a digital or cyber environment, and subtle geometric patterns. The edge of the white bottom section has a paint-brushed or ripped-paper effect. • Text (All-Caps, Large, Stacked): • SKY CHURCH PRESENT (in smaller, sans-serif white text at the very top) • SUNDAY (large, white, sans-serif font) • SERVICE (large, gold/yellow, sans-serif font) • Portrait: On the right side, there is a realistic photo of a smiling Black man with short-cropped hair, wearing glasses, a grey suit jacket, a white shirt, and a dark blue tie. His arms are crossed, and a gold-colored watch is visible on his left wrist. • Date/Time (Centered): • FEB 25TH (large, white, sans-serif font) • SUNDAY MORNING (smaller, white, sans-serif font directly below) • Effect: A prominent horizontal red-to-gold flare or burst effect runs across the composition, below "SERVICE" and across the man's lower chest, creating a sense of energy. Bottom Section (White): • Background: Clean, solid white with the upper edge textured like paint or torn paper. • Elements: • Facebook Live Icon: A large, round, 3D-effect blue Facebook logo with a separate smaller "LIVE" text in a red circular bubble next to it. • "Time" Text: The word "Time" written in stylized, cursive red script. • Service Time: "8.00PM" in smaller, black, sans-serif font directly below "Time". • Speaker Text (Right Aligned): • PROPHET (large, black, sans-serif font) • ANDREW JAMES SMITH (large, red, sans-serif font below "PROPHET") • Contact Info (At the very bottom, on a subtle red bar): • CHURCH NAME, 44 NEW DESIGN STREET, NY 1105 (smaller, white text on red bar) • WATCH ONLINE VISIT WWW.WEBSITE.COM (smaller, white text below the address text on the red bar) Visual Style: A modern, energetic blend of professional photography, graphic text overlays, and futuristic city elements with strong contrasting colors (red, gold, white on black). The typography is predominantly bold and clean sans-serif, with the notable exception of the cursive "Time" script.
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
A high-quality image showcasing a stylish logo with the text 'AiFlux Coffee Bar' in an elegant and modern font. The design should have a coffee-themed background, with warm tones and subtle coffee elements like coffee beans or steam. The logo should be visually striking and centered, with 'AiFlux' in a bold font and 'Coffee Bar' in a slightly smaller, complementary font underneath. The overall style should convey a sophisticated and inviting coffee brand atmosphere.
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 ${
{ "format": { "orientation": "vertical poster", "aspect_ratio": "approximately 4:5", "resolution_character": "print-style, high clarity with intentional grain" }, "composition": { "layout": "asymmetrical editorial layout", "visual_hierarchy": [ "large headline typography at top left", "subheadline directly beneath", "body copy block mid-left", "vehicle occupying lower right quadrant", "small brand mark top right" ], "cropping": "partial vehicle crop showing front-left quarter only", "negative_space": "generous negative space in upper half for typography" }, "subject": { "primary": "BMW E30 M3 sports sedan", "view": "front-left three-quarter, low angle", "details_visible": [ "dual round headlights", "kidney grille", "box flared wheel arch", "mesh-style wheel", "front splitter" ], "pose": "static, grounded, performance-oriented stance" }, "background": { "type": "solid studio backdrop", "color": "muted forest green", "texture": "subtle film grain / matte paper feel", "depth": "flat, no depth cues" }, "color_palette": { "dominant_colors": [ "deep desaturated green", "off-white / cream", "charcoal black" ], "accent_colors": [ "warm gray", "soft metallic silver" ], "overall_tone": "vintage, muted, low-saturation" }, "lighting": { "style": "soft studio lighting", "direction": "diffused frontal with slight top-left bias", "contrast": "low to medium", "shadows": "soft, minimal edge definition", "highlights": "controlled, non-specular" }, "typography": { "headline": { "text": "E30", "font_style": "high-contrast serif", "weight": "thin to medium", "case": "uppercase", "color": "off-white", "scale": "oversized, dominant" }, "subheadline": { "text": "BMW M3", "font_style": "classic serif", "weight": "medium", "case": "uppercase", "tracking": "slightly expanded" }, "body_copy": { "font_style": "traditional serif", "size": "small", "line_height": "tight", "alignment": "left-aligned", "color": "off-white" }, "caption": { "placement": "bottom center", "font_style": "small serif", "opacity": "slightly reduced" } }, "branding": { "logo": { "placement": "top right corner", "scale": "small", "treatment": "monochrome white" }, "brand_presence": "minimal, editorial" }, "artistic_style": { "influences": [ "1980s automotive print ads", "modern retro editorial design", "luxury heritage branding" ], "mood": "nostalgic, refined, performance-focused", "aesthetic": "timeless, understated, premium" }, "technical_traits": { "grain": "intentional film grain overlay", "sharpness": "moderate, slightly softened", "color_grading": "green-biased vintage grade", "print_emulation": "matte magazine paper look" }, "intended_use": { "application": [ "automotive poster", "editorial spread", "brand storytelling content", "social media retro car feature" ], "audience": "enthusiasts, collectors, design-focused viewers" } }
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
Create a detailed food infographic in a professional style, presented from a top-down perspective with a completely clean white background.Display the ingredients in an Exploded View, each clearly separated, with clear and concise labels in Modern Standard Arabic, arranged from bottom to top as follows:The base of the long bun is separated.Mayonnaise (20g) is separated, with a clear creamy consistency.Thin, long strips of fresh American lettuce (40g) are separated.Two crispy, golden-brown crispy strips are placed side by side to cover the length of the sandwich.A slice of cheddar cheese is cut into two adjacent triangles.Two halved slices of fresh tomato are placed side by side.The top of the long sesame bun is separated.Connect the ingredients with the step icons using thin, black dashed lines in one direction in a simple and clear manner. Also, connect the step icons with dashed lines and display a picture of the finished product at the bottom of the diagram.At the bottom of the diagram, display a final image of the sandwich complete with all the above ingredients, in the correct order, with high realism and professional lighting.Remove the backgrounds from all food images and place them on a white background only.Attach the attached logo in the bottom right corner of the design, sized 3 cm x 3 cm, without any distortion.Write the sandwich name at the top center of the page as follows:“Filler Sandwich”In bold, black, large, clear, and central Arabic font.Design style: Simple, clean, professional, suitable for restaurant menus and marketing materials.🖋️ Suggested fonts (important for you 👇)🔹 Sandwich Name:Font: Cairo Black or DIN Next Arabic BoldColor: Solid Black (#000000)🔹 Ingredient Labels:Font: Cairo Regular or Tajawal MediumColor: Dark Gray (#333333)🔹 Description and Icons:Font: Tajawal LightColor: Dark Gray (#555555)
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
Create a detailed food infographic in a professional style, presented from a top-down perspective with a completely clean white background.Display the ingredients in an Exploded View, each clearly separated, with clear and concise labels in Modern Standard Arabic, arranged from bottom to top as follows:The base of the long bun is separated.Mayonnaise (20g) is separated, with a clear creamy consistency.Thin, long strips of fresh American lettuce (40g) are separated.Two crispy, golden-brown crispy strips are placed side by side to cover the length of the sandwich.A slice of cheddar cheese is cut into two adjacent triangles.Two halved slices of fresh tomato are placed side by side.The top of the long sesame bun is separated.Connect the ingredients with the step icons using thin, black dashed lines in one direction in a simple and clear manner. Also, connect the step icons with dashed lines and display a picture of the finished product at the bottom of the diagram.At the bottom of the diagram, display a final image of the sandwich complete with all the above ingredients, in the correct order, with high realism and professional lighting.Remove the backgrounds from all food images and place them on a white background only.Attach the attached logo in the bottom right corner of the design, sized 3 cm x 3 cm, without any distortion.Write the sandwich name at the top center of the page as follows:“Filler Sandwich”In bold, black, large, clear, and central Arabic font.Design style: Simple, clean, professional, suitable for restaurant menus and marketing materials.🖋️ Suggested fonts (important for you 👇)🔹 Sandwich Name:Font: Cairo Black or DIN Next Arabic BoldColor: Solid Black (#000000)🔹 Ingredient Labels:Font: Cairo Regular or Tajawal MediumColor: Dark Gray (#333333)🔹 Description and Icons:Font: Tajawal LightColor: Dark Gray (#555555)
{ "format": { "orientation": "vertical poster", "aspect_ratio": "approximately 4:5", "resolution_character": "print-style, high clarity with intentional grain" }, "composition": { "layout": "asymmetrical editorial layout", "visual_hierarchy": [ "large headline typography at top left", "subheadline directly beneath", "body copy block mid-left", "vehicle occupying lower right quadrant", "small brand mark top right" ], "cropping": "partial vehicle crop showing front-left quarter only", "negative_space": "generous negative space in upper half for typography" }, "subject": { "primary": "BMW E30 M3 sports sedan", "view": "front-left three-quarter, low angle", "details_visible": [ "dual round headlights", "kidney grille", "box flared wheel arch", "mesh-style wheel", "front splitter" ], "pose": "static, grounded, performance-oriented stance" }, "background": { "type": "solid studio backdrop", "color": "muted forest green", "texture": "subtle film grain / matte paper feel", "depth": "flat, no depth cues" }, "color_palette": { "dominant_colors": [ "deep desaturated green", "off-white / cream", "charcoal black" ], "accent_colors": [ "warm gray", "soft metallic silver" ], "overall_tone": "vintage, muted, low-saturation" }, "lighting": { "style": "soft studio lighting", "direction": "diffused frontal with slight top-left bias", "contrast": "low to medium", "shadows": "soft, minimal edge definition", "highlights": "controlled, non-specular" }, "typography": { "headline": { "text": "E30", "font_style": "high-contrast serif", "weight": "thin to medium", "case": "uppercase", "color": "off-white", "scale": "oversized, dominant" }, "subheadline": { "text": "BMW M3", "font_style": "classic serif", "weight": "medium", "case": "uppercase", "tracking": "slightly expanded" }, "body_copy": { "font_style": "traditional serif", "size": "small", "line_height": "tight", "alignment": "left-aligned", "color": "off-white" }, "caption": { "placement": "bottom center", "font_style": "small serif", "opacity": "slightly reduced" } }, "branding": { "logo": { "placement": "top right corner", "scale": "small", "treatment": "monochrome white" }, "brand_presence": "minimal, editorial" }, "artistic_style": { "influences": [ "1980s automotive print ads", "modern retro editorial design", "luxury heritage branding" ], "mood": "nostalgic, refined, performance-focused", "aesthetic": "timeless, understated, premium" }, "technical_traits": { "grain": "intentional film grain overlay", "sharpness": "moderate, slightly softened", "color_grading": "green-biased vintage grade", "print_emulation": "matte magazine paper look" }, "intended_use": { "application": [ "automotive poster", "editorial spread", "brand storytelling content", "social media retro car feature" ], "audience": "enthusiasts, collectors, design-focused viewers" } }
A professional church event flyer with a modern, dark, high-contrast digital-urban design aesthetic, featuring text and an image of a smiling Black man in a suit. Overall Design: The flyer is a clean, graphic layout with a distinct horizontal division. The top two-thirds features a dark, vibrant background. The bottom third is a clean white section for detailed information. Top Section (Dark): • Background: A dark city night scene with vibrant red and blue neon light trails, suggesting a digital or cyber environment, and subtle geometric patterns. The edge of the white bottom section has a paint-brushed or ripped-paper effect. • Text (All-Caps, Large, Stacked): • SKY CHURCH PRESENT (in smaller, sans-serif white text at the very top) • SUNDAY (large, white, sans-serif font) • SERVICE (large, gold/yellow, sans-serif font) • Portrait: On the right side, there is a realistic photo of a smiling Black man with short-cropped hair, wearing glasses, a grey suit jacket, a white shirt, and a dark blue tie. His arms are crossed, and a gold-colored watch is visible on his left wrist. • Date/Time (Centered): • FEB 25TH (large, white, sans-serif font) • SUNDAY MORNING (smaller, white, sans-serif font directly below) • Effect: A prominent horizontal red-to-gold flare or burst effect runs across the composition, below "SERVICE" and across the man's lower chest, creating a sense of energy. Bottom Section (White): • Background: Clean, solid white with the upper edge textured like paint or torn paper. • Elements: • Facebook Live Icon: A large, round, 3D-effect blue Facebook logo with a separate smaller "LIVE" text in a red circular bubble next to it. • "Time" Text: The word "Time" written in stylized, cursive red script. • Service Time: "8.00PM" in smaller, black, sans-serif font directly below "Time". • Speaker Text (Right Aligned): • PROPHET (large, black, sans-serif font) • ANDREW JAMES SMITH (large, red, sans-serif font below "PROPHET") • Contact Info (At the very bottom, on a subtle red bar): • CHURCH NAME, 44 NEW DESIGN STREET, NY 1105 (smaller, white text on red bar) • WATCH ONLINE VISIT WWW.WEBSITE.COM (smaller, white text below the address text on the red bar) Visual Style: A modern, energetic blend of professional photography, graphic text overlays, and futuristic city elements with strong contrasting colors (red, gold, white on black). The typography is predominantly bold and clean sans-serif, with the notable exception of the cursive "Time" script.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
A high-quality image showcasing a stylish logo with the text 'AiFlux Coffee Bar' in an elegant and modern font. The design should have a coffee-themed background, with warm tones and subtle coffee elements like coffee beans or steam. The logo should be visually striking and centered, with 'AiFlux' in a bold font and 'Coffee Bar' in a slightly smaller, complementary font underneath. The overall style should convey a sophisticated and inviting coffee brand atmosphere.
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 ${
ULTRA-STRICT multi-product commercial advertising generation. Use ALL attached images of the included products as mandatory references. Each product must remain 100% identical to its attached reference image. Preserve exact proportions, scale, packaging, colors, labels, and structure. No redesign. No reinterpretation. No stylization. No product blending. No dimension distortion. COMPOSITION RULE: All products must be arranged symmetrically and centered horizontally. Maintain proportional scale balance between products. Equal visual weight distribution. Natural spacing between products. No overlap hiding important details. MANDATORY SAFE ZONE PLACEMENT: All attached products must be positioned strictly within the central third (middle horizontal third) of the generated image. The upper third 1080x360 pixels and lower third 1080x360 pixels must remain completely free of products. No product elements. No shadows crossing into these areas. No reflections. No objects in top third. No objects in bottom third. TEXT STRUCTURE AND TYPOGRAPHY RULES: 1) Advertisement Title Placement: Place the advertisement title directly under the logo inside the upper third area. - First line: Arabic title (عكّازات) Font: Montaser Arabic Bold (gras) Color: #02a649 - Second line: French title (Cannes et Béquilles) Font: Montaser Arabic Normal Color: #004aad Ensure clean hierarchy, perfect spacing, and professional alignment. Text must remain fully inside the upper third safe zone (1080x360 pixels). Do not overlap any product elements. 2) Motivational Text Above CTA Button: Place a two-line motivational text directly above the shopping button inside the lower third. - First line (ثبات وأمان لفترة النّقاهة.) Font: Almarai Normal - Second line (قابلة للتعديل ومقاومة للانزلاق.) Font: Almarai Light (léger) Maintain clean spacing and premium advertising balance. Text must remain strictly inside the lower third safe zone (1080x360 pixels). This requirement is extremely mandatory to allow ideal text placement later inside Facebook Ads Manager without covering the products. Use the attached background as the background for the image. Soft professional diffused lighting. Subtle realistic shadows strictly contained inside the central third only. Premium medical advertising catalog look. Square format 1:1 (1080x1080). High-end Facebook Carousel visual. Nano Banana Gemini optimized. Any deviation from attached reference images is strictly prohibited. If mismatch occurs, regenerate until exact structural match is achieved. NEGATIVE PROMPT: distorted proportions, wrong scale, modified packaging, changed labels, missing details, extra objects, additional accessories, cropped products, zoomed-in composition, oversized products, undersized products, objects outside central third, shadows entering top third, shadows entering bottom third, reflections outside safe zone, text outside designated thirds, misaligned typography, wrong font usage, low contrast text, poor readability, cluttered layout, overcrowded badges, unbalanced composition, watermarks, logos, branding additions, background clutter, medical scenes, people, hands, 3D stylization, cartoon effect, illustration style, color shifts, oversaturated colors, harsh lighting, dramatic shadows, vignette too strong, blur, low resolution, noise, compression artifacts
Use the uploaded image as the exact reference. Do not change the layout, numbers (1–10), fonts, or overall design. Keep the same font chart structure. Improve the overall image quality to make it clearer, sharper, and more professional for an Etsy product listing. Enhance brightness, contrast, and sharpness so every letter and font style is easy to read. Make the background cleaner, smoother, and more uniform while keeping the soft blue decorative style. Ensure all font numbers (1–10) appear crisp and clearly visible with high clarity. Improve the definition of all letters so the alphabet examples look sharp and high resolution. Style: Clean modern Etsy listing style, minimal and professional. Lighting: Bright soft studio lighting with balanced contrast and even illumination across the image. Quality: Ultra-sharp, high resolution, professional e-commerce product listing image, 4K quality, extremely clear typography.
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
Use the uploaded image as the exact reference. Do not change the layout, numbers (1–10), fonts, or overall design. Keep the same font chart structure. Improve the overall image quality to make it clearer, sharper, and more professional for an Etsy product listing. Enhance brightness, contrast, and sharpness so every letter and font style is easy to read. Make the background cleaner, smoother, and more uniform while keeping the soft blue decorative style. Ensure all font numbers (1–10) appear crisp and clearly visible with high clarity. Improve the definition of all letters so the alphabet examples look sharp and high resolution. Style: Clean modern Etsy listing style, minimal and professional. Lighting: Bright soft studio lighting with balanced contrast and even illumination across the image. Quality: Ultra-sharp, high resolution, professional e-commerce product listing image, 4K quality, extremely clear typography.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
{ "format": { "orientation": "vertical poster", "aspect_ratio": "approximately 4:5", "resolution_character": "print-style, high clarity with intentional grain" }, "composition": { "layout": "asymmetrical editorial layout", "visual_hierarchy": [ "large headline typography at top left", "subheadline directly beneath", "body copy block mid-left", "vehicle occupying lower right quadrant", "small brand mark top right" ], "cropping": "partial vehicle crop showing front-left quarter only", "negative_space": "generous negative space in upper half for typography" }, "subject": { "primary": "BMW E30 M3 sports sedan", "view": "front-left three-quarter, low angle", "details_visible": [ "dual round headlights", "kidney grille", "box flared wheel arch", "mesh-style wheel", "front splitter" ], "pose": "static, grounded, performance-oriented stance" }, "background": { "type": "solid studio backdrop", "color": "muted forest green", "texture": "subtle film grain / matte paper feel", "depth": "flat, no depth cues" }, "color_palette": { "dominant_colors": [ "deep desaturated green", "off-white / cream", "charcoal black" ], "accent_colors": [ "warm gray", "soft metallic silver" ], "overall_tone": "vintage, muted, low-saturation" }, "lighting": { "style": "soft studio lighting", "direction": "diffused frontal with slight top-left bias", "contrast": "low to medium", "shadows": "soft, minimal edge definition", "highlights": "controlled, non-specular" }, "typography": { "headline": { "text": "E30", "font_style": "high-contrast serif", "weight": "thin to medium", "case": "uppercase", "color": "off-white", "scale": "oversized, dominant" }, "subheadline": { "text": "BMW M3", "font_style": "classic serif", "weight": "medium", "case": "uppercase", "tracking": "slightly expanded" }, "body_copy": { "font_style": "traditional serif", "size": "small", "line_height": "tight", "alignment": "left-aligned", "color": "off-white" }, "caption": { "placement": "bottom center", "font_style": "small serif", "opacity": "slightly reduced" } }, "branding": { "logo": { "placement": "top right corner", "scale": "small", "treatment": "monochrome white" }, "brand_presence": "minimal, editorial" }, "artistic_style": { "influences": [ "1980s automotive print ads", "modern retro editorial design", "luxury heritage branding" ], "mood": "nostalgic, refined, performance-focused", "aesthetic": "timeless, understated, premium" }, "technical_traits": { "grain": "intentional film grain overlay", "sharpness": "moderate, slightly softened", "color_grading": "green-biased vintage grade", "print_emulation": "matte magazine paper look" }, "intended_use": { "application": [ "automotive poster", "editorial spread", "brand storytelling content", "social media retro car feature" ], "audience": "enthusiasts, collectors, design-focused viewers" } }
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
A high-quality image showcasing a stylish logo with the text 'AiFlux Coffee Bar' in an elegant and modern font. The design should have a coffee-themed background, with warm tones and subtle coffee elements like coffee beans or steam. The logo should be visually striking and centered, with 'AiFlux' in a bold font and 'Coffee Bar' in a slightly smaller, complementary font underneath. The overall style should convey a sophisticated and inviting coffee brand atmosphere.
ULTRA-STRICT multi-product commercial advertising generation. Use ALL attached images of the included products as mandatory references. Each product must remain 100% identical to its attached reference image. Preserve exact proportions, scale, packaging, colors, labels, and structure. No redesign. No reinterpretation. No stylization. No product blending. No dimension distortion. COMPOSITION RULE: All products must be arranged symmetrically and centered horizontally. Maintain proportional scale balance between products. Equal visual weight distribution. Natural spacing between products. No overlap hiding important details. MANDATORY SAFE ZONE PLACEMENT: All attached products must be positioned strictly within the central third (middle horizontal third) of the generated image. The upper third 1080x360 pixels and lower third 1080x360 pixels must remain completely free of products. No product elements. No shadows crossing into these areas. No reflections. No objects in top third. No objects in bottom third. TEXT STRUCTURE AND TYPOGRAPHY RULES: 1) Advertisement Title Placement: Place the advertisement title directly under the logo inside the upper third area. - First line: Arabic title (عكّازات) Font: Montaser Arabic Bold (gras) Color: #02a649 - Second line: French title (Cannes et Béquilles) Font: Montaser Arabic Normal Color: #004aad Ensure clean hierarchy, perfect spacing, and professional alignment. Text must remain fully inside the upper third safe zone (1080x360 pixels). Do not overlap any product elements. 2) Motivational Text Above CTA Button: Place a two-line motivational text directly above the shopping button inside the lower third. - First line (ثبات وأمان لفترة النّقاهة.) Font: Almarai Normal - Second line (قابلة للتعديل ومقاومة للانزلاق.) Font: Almarai Light (léger) Maintain clean spacing and premium advertising balance. Text must remain strictly inside the lower third safe zone (1080x360 pixels). This requirement is extremely mandatory to allow ideal text placement later inside Facebook Ads Manager without covering the products. Use the attached background as the background for the image. Soft professional diffused lighting. Subtle realistic shadows strictly contained inside the central third only. Premium medical advertising catalog look. Square format 1:1 (1080x1080). High-end Facebook Carousel visual. Nano Banana Gemini optimized. Any deviation from attached reference images is strictly prohibited. If mismatch occurs, regenerate until exact structural match is achieved. NEGATIVE PROMPT: distorted proportions, wrong scale, modified packaging, changed labels, missing details, extra objects, additional accessories, cropped products, zoomed-in composition, oversized products, undersized products, objects outside central third, shadows entering top third, shadows entering bottom third, reflections outside safe zone, text outside designated thirds, misaligned typography, wrong font usage, low contrast text, poor readability, cluttered layout, overcrowded badges, unbalanced composition, watermarks, logos, branding additions, background clutter, medical scenes, people, hands, 3D stylization, cartoon effect, illustration style, color shifts, oversaturated colors, harsh lighting, dramatic shadows, vignette too strong, blur, low resolution, noise, compression artifacts
A professional church event flyer with a modern, dark, high-contrast digital-urban design aesthetic, featuring text and an image of a smiling Black man in a suit. Overall Design: The flyer is a clean, graphic layout with a distinct horizontal division. The top two-thirds features a dark, vibrant background. The bottom third is a clean white section for detailed information. Top Section (Dark): • Background: A dark city night scene with vibrant red and blue neon light trails, suggesting a digital or cyber environment, and subtle geometric patterns. The edge of the white bottom section has a paint-brushed or ripped-paper effect. • Text (All-Caps, Large, Stacked): • SKY CHURCH PRESENT (in smaller, sans-serif white text at the very top) • SUNDAY (large, white, sans-serif font) • SERVICE (large, gold/yellow, sans-serif font) • Portrait: On the right side, there is a realistic photo of a smiling Black man with short-cropped hair, wearing glasses, a grey suit jacket, a white shirt, and a dark blue tie. His arms are crossed, and a gold-colored watch is visible on his left wrist. • Date/Time (Centered): • FEB 25TH (large, white, sans-serif font) • SUNDAY MORNING (smaller, white, sans-serif font directly below) • Effect: A prominent horizontal red-to-gold flare or burst effect runs across the composition, below "SERVICE" and across the man's lower chest, creating a sense of energy. Bottom Section (White): • Background: Clean, solid white with the upper edge textured like paint or torn paper. • Elements: • Facebook Live Icon: A large, round, 3D-effect blue Facebook logo with a separate smaller "LIVE" text in a red circular bubble next to it. • "Time" Text: The word "Time" written in stylized, cursive red script. • Service Time: "8.00PM" in smaller, black, sans-serif font directly below "Time". • Speaker Text (Right Aligned): • PROPHET (large, black, sans-serif font) • ANDREW JAMES SMITH (large, red, sans-serif font below "PROPHET") • Contact Info (At the very bottom, on a subtle red bar): • CHURCH NAME, 44 NEW DESIGN STREET, NY 1105 (smaller, white text on red bar) • WATCH ONLINE VISIT WWW.WEBSITE.COM (smaller, white text below the address text on the red bar) Visual Style: A modern, energetic blend of professional photography, graphic text overlays, and futuristic city elements with strong contrasting colors (red, gold, white on black). The typography is predominantly bold and clean sans-serif, with the notable exception of the cursive "Time" script.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
Create a detailed food infographic in a professional style, presented from a top-down perspective with a completely clean white background.Display the ingredients in an Exploded View, each clearly separated, with clear and concise labels in Modern Standard Arabic, arranged from bottom to top as follows:The base of the long bun is separated.Mayonnaise (20g) is separated, with a clear creamy consistency.Thin, long strips of fresh American lettuce (40g) are separated.Two crispy, golden-brown crispy strips are placed side by side to cover the length of the sandwich.A slice of cheddar cheese is cut into two adjacent triangles.Two halved slices of fresh tomato are placed side by side.The top of the long sesame bun is separated.Connect the ingredients with the step icons using thin, black dashed lines in one direction in a simple and clear manner. Also, connect the step icons with dashed lines and display a picture of the finished product at the bottom of the diagram.At the bottom of the diagram, display a final image of the sandwich complete with all the above ingredients, in the correct order, with high realism and professional lighting.Remove the backgrounds from all food images and place them on a white background only.Attach the attached logo in the bottom right corner of the design, sized 3 cm x 3 cm, without any distortion.Write the sandwich name at the top center of the page as follows:“Filler Sandwich”In bold, black, large, clear, and central Arabic font.Design style: Simple, clean, professional, suitable for restaurant menus and marketing materials.🖋️ Suggested fonts (important for you 👇)🔹 Sandwich Name:Font: Cairo Black or DIN Next Arabic BoldColor: Solid Black (#000000)🔹 Ingredient Labels:Font: Cairo Regular or Tajawal MediumColor: Dark Gray (#333333)🔹 Description and Icons:Font: Tajawal LightColor: Dark Gray (#555555)
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 ${
Use the uploaded image as the exact reference. Do not change the layout, numbers (1–10), fonts, or overall design. Keep the same font chart structure. Improve the overall image quality to make it clearer, sharper, and more professional for an Etsy product listing. Enhance brightness, contrast, and sharpness so every letter and font style is easy to read. Make the background cleaner, smoother, and more uniform while keeping the soft blue decorative style. Ensure all font numbers (1–10) appear crisp and clearly visible with high clarity. Improve the definition of all letters so the alphabet examples look sharp and high resolution. Style: Clean modern Etsy listing style, minimal and professional. Lighting: Bright soft studio lighting with balanced contrast and even illumination across the image. Quality: Ultra-sharp, high resolution, professional e-commerce product listing image, 4K quality, extremely clear typography.
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
A professional church event flyer with a modern, dark, high-contrast digital-urban design aesthetic, featuring text and an image of a smiling Black man in a suit. Overall Design: The flyer is a clean, graphic layout with a distinct horizontal division. The top two-thirds features a dark, vibrant background. The bottom third is a clean white section for detailed information. Top Section (Dark): • Background: A dark city night scene with vibrant red and blue neon light trails, suggesting a digital or cyber environment, and subtle geometric patterns. The edge of the white bottom section has a paint-brushed or ripped-paper effect. • Text (All-Caps, Large, Stacked): • SKY CHURCH PRESENT (in smaller, sans-serif white text at the very top) • SUNDAY (large, white, sans-serif font) • SERVICE (large, gold/yellow, sans-serif font) • Portrait: On the right side, there is a realistic photo of a smiling Black man with short-cropped hair, wearing glasses, a grey suit jacket, a white shirt, and a dark blue tie. His arms are crossed, and a gold-colored watch is visible on his left wrist. • Date/Time (Centered): • FEB 25TH (large, white, sans-serif font) • SUNDAY MORNING (smaller, white, sans-serif font directly below) • Effect: A prominent horizontal red-to-gold flare or burst effect runs across the composition, below "SERVICE" and across the man's lower chest, creating a sense of energy. Bottom Section (White): • Background: Clean, solid white with the upper edge textured like paint or torn paper. • Elements: • Facebook Live Icon: A large, round, 3D-effect blue Facebook logo with a separate smaller "LIVE" text in a red circular bubble next to it. • "Time" Text: The word "Time" written in stylized, cursive red script. • Service Time: "8.00PM" in smaller, black, sans-serif font directly below "Time". • Speaker Text (Right Aligned): • PROPHET (large, black, sans-serif font) • ANDREW JAMES SMITH (large, red, sans-serif font below "PROPHET") • Contact Info (At the very bottom, on a subtle red bar): • CHURCH NAME, 44 NEW DESIGN STREET, NY 1105 (smaller, white text on red bar) • WATCH ONLINE VISIT WWW.WEBSITE.COM (smaller, white text below the address text on the red bar) Visual Style: A modern, energetic blend of professional photography, graphic text overlays, and futuristic city elements with strong contrasting colors (red, gold, white on black). The typography is predominantly bold and clean sans-serif, with the notable exception of the cursive "Time" script.
Create a detailed food infographic in a professional style, presented from a top-down perspective with a completely clean white background.Display the ingredients in an Exploded View, each clearly separated, with clear and concise labels in Modern Standard Arabic, arranged from bottom to top as follows:The base of the long bun is separated.Mayonnaise (20g) is separated, with a clear creamy consistency.Thin, long strips of fresh American lettuce (40g) are separated.Two crispy, golden-brown crispy strips are placed side by side to cover the length of the sandwich.A slice of cheddar cheese is cut into two adjacent triangles.Two halved slices of fresh tomato are placed side by side.The top of the long sesame bun is separated.Connect the ingredients with the step icons using thin, black dashed lines in one direction in a simple and clear manner. Also, connect the step icons with dashed lines and display a picture of the finished product at the bottom of the diagram.At the bottom of the diagram, display a final image of the sandwich complete with all the above ingredients, in the correct order, with high realism and professional lighting.Remove the backgrounds from all food images and place them on a white background only.Attach the attached logo in the bottom right corner of the design, sized 3 cm x 3 cm, without any distortion.Write the sandwich name at the top center of the page as follows:“Filler Sandwich”In bold, black, large, clear, and central Arabic font.Design style: Simple, clean, professional, suitable for restaurant menus and marketing materials.🖋️ Suggested fonts (important for you 👇)🔹 Sandwich Name:Font: Cairo Black or DIN Next Arabic BoldColor: Solid Black (#000000)🔹 Ingredient Labels:Font: Cairo Regular or Tajawal MediumColor: Dark Gray (#333333)🔹 Description and Icons:Font: Tajawal LightColor: Dark Gray (#555555)
{ "format": { "orientation": "vertical poster", "aspect_ratio": "approximately 4:5", "resolution_character": "print-style, high clarity with intentional grain" }, "composition": { "layout": "asymmetrical editorial layout", "visual_hierarchy": [ "large headline typography at top left", "subheadline directly beneath", "body copy block mid-left", "vehicle occupying lower right quadrant", "small brand mark top right" ], "cropping": "partial vehicle crop showing front-left quarter only", "negative_space": "generous negative space in upper half for typography" }, "subject": { "primary": "BMW E30 M3 sports sedan", "view": "front-left three-quarter, low angle", "details_visible": [ "dual round headlights", "kidney grille", "box flared wheel arch", "mesh-style wheel", "front splitter" ], "pose": "static, grounded, performance-oriented stance" }, "background": { "type": "solid studio backdrop", "color": "muted forest green", "texture": "subtle film grain / matte paper feel", "depth": "flat, no depth cues" }, "color_palette": { "dominant_colors": [ "deep desaturated green", "off-white / cream", "charcoal black" ], "accent_colors": [ "warm gray", "soft metallic silver" ], "overall_tone": "vintage, muted, low-saturation" }, "lighting": { "style": "soft studio lighting", "direction": "diffused frontal with slight top-left bias", "contrast": "low to medium", "shadows": "soft, minimal edge definition", "highlights": "controlled, non-specular" }, "typography": { "headline": { "text": "E30", "font_style": "high-contrast serif", "weight": "thin to medium", "case": "uppercase", "color": "off-white", "scale": "oversized, dominant" }, "subheadline": { "text": "BMW M3", "font_style": "classic serif", "weight": "medium", "case": "uppercase", "tracking": "slightly expanded" }, "body_copy": { "font_style": "traditional serif", "size": "small", "line_height": "tight", "alignment": "left-aligned", "color": "off-white" }, "caption": { "placement": "bottom center", "font_style": "small serif", "opacity": "slightly reduced" } }, "branding": { "logo": { "placement": "top right corner", "scale": "small", "treatment": "monochrome white" }, "brand_presence": "minimal, editorial" }, "artistic_style": { "influences": [ "1980s automotive print ads", "modern retro editorial design", "luxury heritage branding" ], "mood": "nostalgic, refined, performance-focused", "aesthetic": "timeless, understated, premium" }, "technical_traits": { "grain": "intentional film grain overlay", "sharpness": "moderate, slightly softened", "color_grading": "green-biased vintage grade", "print_emulation": "matte magazine paper look" }, "intended_use": { "application": [ "automotive poster", "editorial spread", "brand storytelling content", "social media retro car feature" ], "audience": "enthusiasts, collectors, design-focused viewers" } }
A luxury high-fashion magazine cover. Magazine name at the very top in massive elegant serif font reads "LUMIÈRE" — the letters are large, slightly transparent/ghost-style overlapping the model's head just like ELLE magazine, in soft platinum silver color blending into the background. Character: A young beautiful white woman, early 20s, soft feminine features, big blue eyes, naturally full lips, flawless porcelain skin, subtle makeup — rosy cheeks, nude lips, defined brows. Her hair is platinum blonde, long and wavy, loosely flowing over one shoulder. She looks directly into the camera with a soft yet powerful gaze. Slight tilt of the head, naturally elegant posture. Outfit: She is wearing a dramatic deep burgundy wine-red ballgown — structured corset top with off-shoulder neckline, voluminous layered satin skirt billowing around her dramatically. Behind her shoulders, large sculptural fabric rises like rose petals — same architectural drama as reference. She leans slightly forward, both hands resting gently on her knees. Background: Pure soft warm white/ivory background — completely clean, minimal, high-end studio editorial. Soft diffused light, no harsh shadows. Typography — placed EXACTLY like ELLE magazine reference: Top: "LUMIÈRE" massive serif, platinum/silver, overlapping model's head slightly Left mid: "GRACE & POWER" bold serif, then smaller below "THE NEW VISION OF LUXURY" Right mid: "TIMELESS & FEARLESS" bold, then "PURE OPULENCE" smaller below Bottom right large: "ICONIC & UNSTOPPABLE" elegant large serif All text in deep charcoal/dark navy. Font style: classic high fashion serif — same weight, spacing, and elegance as ELLE. Text naturally integrated into the composition, NOT floating randomly. Ultra photorealistic, 8K, real magazine cover quality, perfect typography placement, vertical 9:13 format.
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 ${
ULTRA-STRICT multi-product commercial advertising generation. Use ALL attached images of the included products as mandatory references. Each product must remain 100% identical to its attached reference image. Preserve exact proportions, scale, packaging, colors, labels, and structure. No redesign. No reinterpretation. No stylization. No product blending. No dimension distortion. COMPOSITION RULE: All products must be arranged symmetrically and centered horizontally. Maintain proportional scale balance between products. Equal visual weight distribution. Natural spacing between products. No overlap hiding important details. MANDATORY SAFE ZONE PLACEMENT: All attached products must be positioned strictly within the central third (middle horizontal third) of the generated image. The upper third 1080x360 pixels and lower third 1080x360 pixels must remain completely free of products. No product elements. No shadows crossing into these areas. No reflections. No objects in top third. No objects in bottom third. TEXT STRUCTURE AND TYPOGRAPHY RULES: 1) Advertisement Title Placement: Place the advertisement title directly under the logo inside the upper third area. - First line: Arabic title (عكّازات) Font: Montaser Arabic Bold (gras) Color: #02a649 - Second line: French title (Cannes et Béquilles) Font: Montaser Arabic Normal Color: #004aad Ensure clean hierarchy, perfect spacing, and professional alignment. Text must remain fully inside the upper third safe zone (1080x360 pixels). Do not overlap any product elements. 2) Motivational Text Above CTA Button: Place a two-line motivational text directly above the shopping button inside the lower third. - First line (ثبات وأمان لفترة النّقاهة.) Font: Almarai Normal - Second line (قابلة للتعديل ومقاومة للانزلاق.) Font: Almarai Light (léger) Maintain clean spacing and premium advertising balance. Text must remain strictly inside the lower third safe zone (1080x360 pixels). This requirement is extremely mandatory to allow ideal text placement later inside Facebook Ads Manager without covering the products. Use the attached background as the background for the image. Soft professional diffused lighting. Subtle realistic shadows strictly contained inside the central third only. Premium medical advertising catalog look. Square format 1:1 (1080x1080). High-end Facebook Carousel visual. Nano Banana Gemini optimized. Any deviation from attached reference images is strictly prohibited. If mismatch occurs, regenerate until exact structural match is achieved. NEGATIVE PROMPT: distorted proportions, wrong scale, modified packaging, changed labels, missing details, extra objects, additional accessories, cropped products, zoomed-in composition, oversized products, undersized products, objects outside central third, shadows entering top third, shadows entering bottom third, reflections outside safe zone, text outside designated thirds, misaligned typography, wrong font usage, low contrast text, poor readability, cluttered layout, overcrowded badges, unbalanced composition, watermarks, logos, branding additions, background clutter, medical scenes, people, hands, 3D stylization, cartoon effect, illustration style, color shifts, oversaturated colors, harsh lighting, dramatic shadows, vignette too strong, blur, low resolution, noise, compression artifacts
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
A fun, engaging, and high-quality children's coloring book cover designed in a **cartoon-style with thick black outlines**, matching the exact design of the animals featured inside the book. The cover should be **bright, playful, and visually appealing to children aged 4-8**, with a well-balanced layout that is simple yet exciting. #### **📖 Title & Text Elements** * The title **'50 Animals Coloring Book & Fun Facts for Kids'** should be displayed prominently at the top in **a large, bold, rounded font**, making it easy for kids and parents to read. * Below the title, add a **cheerful tagline** that says: **'Discover a Colorful World of Amazing Animals!'** in a friendly, fun font. * Include a **bright yellow badge** or sticker on the side that says: **'50 Cute Animals to Color!'** #### **🎨 Background & Composition** * The background should be bright and cheerful, using **soft pastel colors** with a **nature-inspired scene**: * **Blue sky with fluffy white clouds** * **Rolling green hills, grass, and a few simple flowers** * A **playful, cartoon-style sun** in the top corner * The animals should be placed in a **semi-circle or group formation**, appearing friendly and inviting. #### **🐾 Featured Cartoon-Style Animals (Matching Inside Designs)** The cover must feature a **selection of the cutest animals from inside the book**, drawn in the same **simple, thick-lined cartoon style**. The animals should be arranged to **interact playfully**, making them look fun and engaging. The featured animals include: 🦁 **A smiling lion sitting proudly** in the center with a fluffy mane 🐘 **A cheerful elephant** with big ears, raising its trunk playfully 🦒 **A gentle giraffe** tilting its head with a friendly expression 🐬 **A happy dolphin** leaping from a small wave, adding a fun ocean element 🦊 **A cute fox sitting with perked-up ears**, looking curious 🐵 **A silly monkey hanging from a tree branch**, waving 🐢 **A small, happy turtle walking** on the grass with a big smile 🦉 **A wise owl perched on a branch**, looking friendly 🐄 **A joyful cow standing in the field**, giving a warm expression 🦜 **A colorful parrot spreading its wings**, appearing excited Each animal should have **a thick black outline with no shading**, keeping the **same consistency** as the book’s **interior pages**. #### **🌟 Extra Elements for Appeal** * A **cute, playful border or frame** around the main image to give a polished look. * Keep the **focus on the animals**, ensuring they stand out with a **clean and uncluttered layout**. * **Bright and bold colors** but not overly saturated to maintain a **kid-friendly aesthetic**. * The back cover can include a **"Thank you for choosing this book!"** message with **a small preview of additional pages** inside. ### **🔹 Important Design Notes:** * Maintain the **same art style** as the book’s interior animals (thick black outlines, cartoon-style). * The title and elements should be **high contrast and easy to read**. * Ensure **high resolution (300 DPI) for print quality** if publishing. * Design should be **balanced**, with **no overcrowding of elements**. This cover should **instantly attract** both children and parents by looking fun, educational, and engaging!"\* In the foreground, an assortment of adorable, cartoon-style animals is prominently displayed. The characters should include a **smiling lion, a happy elephant, a cheerful giraffe, a playful dolphin leaping, and a cute fox sitting with a curious expression**. Each animal is drawn with **thick black outlines** and a simple, friendly design suited for young children (ages 4-8). The animals should be arranged in a semi-circle, inviting young artists to explore their creativity. The title should be placed at the top in large, colorful text, while a small tagline below reads, **'Discover a Colorful World of Amazing Animals!'** in a fun, bubbly font. A **round, yellow badge** in one corner highlights ‘50 Animals to Color!’ to grab attention. A small, fun, handwritten-style callout at the bottom says, **'Color, Learn, and Explore!'** for extra excitement. A vibrant, engaging children's coloring book cover featuring a playful, cartoon-style design. The title, **'50 Animals Coloring Book & Fun Facts for Kids,'** is large, bold, and colorful, using a fun, rounded font suitable for young children. The background is bright and cheerful, featuring a **soft blue sky with fluffy white clouds** and **rolling green grasslands**, making the cover visually inviting. The foreground showcases **adorable, cartoon-style animals**, carefully chosen to match those inside the book. The featured animals should include: 🦁 **A friendly lion** sitting with a happy expression 🐘 **A joyful elephant** with big ears and a raised trunk 🦒 **A cheerful giraffe** with a long neck and gentle smile 🐬 **A playful dolphin** jumping from the water 🦊 **A curious fox** sitting with perked-up ears 🐵 **A mischievous monkey** hanging from a tree 🐢 **A cute turtle** with a rounded shell and happy eyes 🦉 **A wise owl** perched on a branch, looking friendly 🐄 **A smiling cow** standing in a field 🦜 **A colorful parrot** spreading its wings Each animal is drawn with **thick black outlines** and a simple, friendly design, making them appealing for children ages **4-8**. They should be arranged in a **semi-circle**, making them look as if they are happily posing for a group picture, ready for kids to color. The **title** is placed at the top in large, colorful text, while a **small tagline below reads**: **'Discover a Colorful World of Amazing Animals!'** in a playful, bubbly font. A **bright yellow badge** on one side highlights **‘50 Animals to Color!’** to grab attention. At the bottom, a small fun callout says, **'Color, Learn, and Explore!'** for extra excitement. The overall design should be **clean, balanced, and high-quality**, ensuring **vibrant but not overly saturated colors** for a visually appealing book cover. Only cheerful, inviting expressions on the animals to make it engaging for kids and parents alike
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
[1] FLS Atmospheres written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word Atmospheres can be written in a different font, but one that complements the font used for FLS. [3] Below the text, you can place a rusted gearwheel that accents the steampunk style. [4] The image should be vertical and in 3D, as you requested. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text.
[1] "FLS Atmospheres" written in large, eye-catching letters, with a font style that evokes the steampunk aesthetic. [2] The word "Atmospheres" can be written in a different font, but one that complements the font used for "FLS". [3] Below the text, you can place a rusted gearwheel that accents the steampunk style in high-quality, photorealistic resolution. [4] The image should be vertical and in 3D, with an 8K resolution for outstanding quality. Make sure to choose an image that has a clearly visible gearwheel and leaves enough space for the text. Make sure the letters are centered and do not drift outside of the gearwheel. Avoid having the letters be crooked or slanted, as this can affect the readability of the text. Adjust the size of the letters so that they are legible, but not so large that they overlap with the gearwheel. Ensure that the gearwheel is clearly visible in the image, without being covered by the letters or any other design elements. Use a color palette that complements the steampunk style, such as shades of brown, antique gold, and oxidized green.
Generate a visual representation of text where the letters 'IA' are prominently displayed in a large, damaged font. The design should convey a sense of distress or decay in the appearance of the letters. Beneath the 'IA,' incorporate smaller text that reads 'inappropriate advances' in a contrasting font. The combination of the damaged large font and the smaller, more refined font should evoke a visual contrast, emphasizing the seriousness of the message conveyed by the phrase 'inappropriate advances.'"
A high-quality image showcasing a stylish logo with the text 'AiFlux Coffee Bar' in an elegant and modern font. The design should have a coffee-themed background, with warm tones and subtle coffee elements like coffee beans or steam. The logo should be visually striking and centered, with 'AiFlux' in a bold font and 'Coffee Bar' in a slightly smaller, complementary font underneath. The overall style should convey a sophisticated and inviting coffee brand atmosphere.