from dotenv import load_dotenv import streamlit as st import os import google.generativeai as genai load_dotenv() genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) system_prompt = """You are a world-class copywriter, specialized in creating persuasive and captivating stories that emotionally connect with readers and effectively convey messages. FORMAT RULES: - Story must follow the selected formula structure - Use clear and well-defined paragraphs - Maintain coherent narrative flow - Include smooth transitions between sections - Avoid unnecessary jargon or complex language - Naturally weave the product and call-to-action into the narrative - Never explicitly mention "this is the product" or "this is the call-to-action" TONE INSTRUCTIONS: - Selected tone must remain consistent throughout the story - Tone modifies HOW the narrative is expressed, not its structure - Think of tone as an "emotional layer" over the formula - Formula provides structure, tone provides style - Both elements must work seamlessly together KEY ELEMENTS: - Impactful opening that grabs attention - Clear and progressive narrative development - Emotional connection with target audience - Natural integration of product/service benefits - Subtle but effective call-to-action woven into the story - Transformation journey that leads to the solution STORYTELLING GUIDELINES: - Build tension and resolution naturally - Create relatable scenarios and characters - Show don't tell (especially for product benefits) - Use sensory details and emotional triggers - Lead to the call-to-action organically IMPORTANT: - Each story must be unique and memorable - Avoid clichés and generalities - Maintain a credible and authentic tone - Adapt language to target audience - Focus on transformative benefits - Follow formula structure while maintaining chosen tone - Never make the product placement feel forced - Ensure call-to-action feels like a natural next step in the story""" story_formulas = { "PASA": { "description": """ La fórmula P.A.S.A. es una estructura narrativa que convierte problemas en soluciones convincentes. Ejemplo para un producto de gestión del tiempo: 1. **Problema**: "María nunca tiene tiempo suficiente. Entre reuniones interminables y deadlines ajustados, apenas puede respirar. Su bandeja de entrada está desbordada y su lista de pendientes crece sin control." 2. **Agitación**: "Las noches en vela se volvieron rutina. Sus hijos la extrañan en los eventos escolares, y ese proyecto personal que tanto anhela sigue guardado en un cajón. El estrés comienza a afectar su salud y relaciones." 3. **Solución**: "Todo cambió cuando descubrió TimeFlow. Este sistema intuitivo reorganizó su día automáticamente, priorizando lo importante y eliminando distracciones. Sus reuniones ahora son productivas y sus tareas fluyen naturalmente." 4. **Acción**: "Únete a los profesionales que recuperaron el control de su tiempo. Prueba TimeFlow gratis durante 14 días y transforma tu productividad sin riesgo." Otro ejemplo para un servicio de coaching financiero: 1. **Problema**: "Carlos revisa su cuenta bancaria con temor. Cada mes es una lucha para llegar a fin de mes, a pesar de tener un buen salario. Las deudas se acumulan y los ahorros son inexistentes." 2. **Agitación**: "El miedo a una emergencia lo mantiene despierto. Sus sueños de comprar una casa parecen cada vez más lejanos. La culpa por no poder dar a su familia la vida que merecen lo consume cada día." 3. **Solución**: "Al trabajar con FinanzasPro, Carlos descubrió que pequeños cambios generan grandes resultados. Su asesor personal diseñó un plan realista que le permitió eliminar deudas mientras construía un futuro financiero sólido." 4. **Acción**: "Agenda tu consulta gratuita hoy y recibe tu plan financiero personalizado. Tu libertad financiera comienza con una simple decisión." """ }, "GHA": { "description": """ La fórmula G.H.A. captura la atención y motiva a través de historias memorables. Ejemplo para un curso de fotografía: 1. **Gancho**: "¿Alguna vez has visto una foto tan perfecta que parece magia? Yo también pensaba que esas imágenes eran imposibles... hasta que descubrí el secreto." 2. **Historia**: "Mi primera cámara fue un desastre. Fotos borrosas, mal iluminadas, sin vida. Pero un encuentro casual con un fotógrafo callejero cambió todo. Me enseñó que la fotografía no se trata de equipos caros, sino de entender la luz y el momento." 3. **Acción**: "Ahora comparto esos secretos en mi taller 'Fotografía con Alma'. Únete y descubre cómo capturar momentos inolvidables con cualquier cámara." Ejemplo para un producto de bienestar: 1. **Gancho**: "El día que mi espalda me traicionó en medio de una presentación importante, supe que algo tenía que cambiar." 2. **Historia**: "Probé de todo: medicamentos, terapias, ejercicios... Nada funcionaba a largo plazo. La frustración me llevó a investigar técnicas ancestrales de sanación, donde encontré una solución sorprendentemente simple." 3. **Acción**: "Descubre cómo 5 minutos diarios pueden transformar tu salud. Prueba MindBody+ y recupera tu vitalidad naturalmente." """ } } def generate_story(formula_type, target_audience, product, action, mood, length, story_topic=None): """Función unificada para generar historias""" model = genai.GenerativeModel("gemini-2.0-flash") if formula_type not in story_formulas: raise ValueError("Fórmula no válida") if formula_type == "PASA": prompt = f""" Eres un copywriter experto especializado en crear historias persuasivas y memorables. Crea una historia cautivadora en español de {length} palabras con un tono {mood} que siga la fórmula P.A.S.A. AUDIENCIA OBJETIVO: {target_audience} ESTRUCTURA P.A.S.A. (integrar de manera natural, sin mencionar explícitamente las secciones): 1. PROBLEMA (25% de la historia): * Identifica y describe vívidamente el dolor principal de {target_audience} * Presenta una situación problemática actual y relatable * Expone frustraciones y desafíos diarios específicos * Revela miedos ocultos y preocupaciones profundas * Describe las luchas cotidianas con detalles sensoriales * Menciona deseos no cumplidos que resuenan con la audiencia 2. AGITACIÓN (30% de la historia): * Profundiza en el impacto emocional del problema * Muestra consecuencias en relaciones personales y profesionales * Describe el costo de la inacción y oportunidades perdidas * Explora implicaciones futuras si el problema persiste * Detalla efectos en la vida social y personal * Presenta el "punto de quiebre" emocional 3. SOLUCIÓN (25% de la historia): * Introduce sutilmente '{product}' como la respuesta natural * Describe la transformación y el viaje hacia el éxito * Presenta beneficios clave a través de historias de éxito * Destaca la propuesta de valor única * Menciona puntos de alivio inmediato * Incluye elementos de prueba social sutiles * Enfatiza ventajas a largo plazo 4. ACCIÓN (20% de la historia): * Integra naturalmente '{action}' como siguiente paso lógico * Crea sentido de urgencia sin presión * Presenta beneficios inmediatos de actuar ahora * Incluye elementos de reversión de riesgo * Hace que la implementación parezca fácil y accesible * Motiva a través de la satisfacción emocional ELEMENTOS ESTILÍSTICOS: * Usa lenguaje sensorial y descriptivo * Incluye diálogo interno o pensamientos del personaje * Crea tensión narrativa y resolución * Mantén un arco narrativo coherente * Usa metáforas y analogías relevantes * Incorpora detalles específicos de la industria/contexto TONO Y ESTILO: * Mantén el tono {mood} consistente * Usa lenguaje que resuene con {target_audience} * Evita clichés y frases trilladas * Crea una voz narrativa auténtica * Incluye elementos de storytelling modernos * Mantén un ritmo dinámico IMPORTANTE: * La historia debe fluir naturalmente entre secciones * Evita mencionar explícitamente "problema", "agitación", "solución" o "acción" * Integra el producto y llamado a la acción de manera orgánica * Usa ejemplos específicos y situaciones reales * Mantén un balance entre emoción y racionalidad * Crea una conexión emocional inmediata """ else: formula_description = story_formulas[formula_type]["description"] prompt = f"""{system_prompt} Como experto copywriter, crea una historia persuasiva en español de {length} palabras con un tono {mood}, siguiendo la estructura: {formula_description} Público objetivo: {target_audience} Producto/Servicio: {product} Llamada a acción: {action} """ if formula_type == "GHA" and story_topic: prompt += f"\nTema de la historia: {story_topic}" response = model.generate_content([prompt]) if response and response.parts: return response.parts[0].text.strip() raise ValueError("No se pudo generar la historia") # Inicializar la aplicación Streamlit st.set_page_config(page_title="Generador de Historias", page_icon=":pencil:", layout="wide") # Título y subtítulo st.markdown("