File size: 14,178 Bytes
91a0d7e a8fd769 d51e47b a8fd769 d51e47b 659c702 de356ae 659c702 de356ae 659c702 de356ae 659c702 de356ae 659c702 de356ae 2bef2ae de356ae 2bef2ae de356ae 2bef2ae de356ae 2bef2ae de356ae 2bef2ae de356ae 522d135 ec618b2 de356ae 6c969bc 063a515 de356ae 522d135 52fe894 6c969bc 2bef2ae 6c969bc 2bef2ae 6c969bc 2bef2ae 6c969bc 52fe894 6c969bc 52fe894 6c969bc 1ff0df4 522d135 d51e47b ae4c2eb bef3dc5 070b033 af53b67 8ac4d65 af53b67 8ac4d65 af53b67 151411d 8ac4d65 af53b67 85052d2 34cb5f8 a8fd769 8ac4d65 34cb5f8 8ac4d65 60ce54c 34cb5f8 8ac4d65 1da5874 8ac4d65 1da5874 8ac4d65 34cb5f8 8ac4d65 34cb5f8 8ac4d65 34cb5f8 8ac4d65 34cb5f8 8ac4d65 ec618b2 34cb5f8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 |
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("<h1 style='text-align: center;'>Story Genius Maker</h1>", unsafe_allow_html=True)
st.markdown("<h3 style='text-align: center;'>Teje historias inolvidables en segundos, guiado por la magia de la inteligencia artificial que da vida a tus ideas en relatos cautivadores.</h3>", unsafe_allow_html=True)
# Acorde贸n para elegir la f贸rmula
with st.expander("Selecciona la f贸rmula para generar tu historia"):
# Obtener las f贸rmulas disponibles del diccionario story_formulas y crear nombres de visualizaci贸n
available_formulas = list(story_formulas.keys())
formula_display_names = []
formula_mapping = {}
# Crear mapeo entre nombres de visualizaci贸n y claves internas
for formula in available_formulas:
display_name = '.'.join(list(formula)) if formula.isupper() else formula
formula_display_names.append(display_name)
formula_mapping[display_name] = formula
# Radio button con nombres de visualizaci贸n
formula = st.radio(
"Selecciona la f贸rmula para generar tu historia:",
formula_display_names
)
# Obtener la clave interna correspondiente al nombre seleccionado
selected_formula = formula_mapping[formula]
# Crear las columnas para el dise帽o (40% para la izquierda, 60% para la derecha)
col1, col2 = st.columns([2, 3])
# Cambiar el comportamiento del slider cuando se seleccione "GHA"
with col1:
target_audience = st.text_input("P煤blico objetivo",
placeholder="驴A qui茅n est谩 dirigido tu mensaje?")
product = st.text_input("Producto/Servicio",
placeholder="驴Qu茅 est谩s ofreciendo?")
action = st.text_area("Llamado a la acci贸n",
placeholder="驴Qu茅 acci贸n espec铆fica debe tomar tu audiencia?")
# Personalizaci贸n adicional
with st.expander("Personaliza tu historia"):
mood = st.selectbox("Tono de la historia:",
["Emocional", "Triste", "Feliz", "Horror", "Comedia", "Rom谩ntico"])
# Ajustar el slider seg煤n la f贸rmula seleccionada
if selected_formula == "GHA":
length = st.slider("Longitud de la historia (palabras):",
min_value=50, max_value=200, value=150, step=10)
else:
length = st.slider("Longitud de la historia (palabras):",
min_value=50, max_value=150, value=100, step=10)
# Mostrar campo adicional solo para GHA
story_topic = None
if selected_formula == "GHA":
story_topic = st.text_area(
"De qu茅 quieres que trate la historia",
placeholder="Explica si hay algo espec铆fico sobre lo que te gustar铆a contar (puede ser una vivencia personal, pel铆cula, cuento, personaje ficticio, etc.)."
)
# Bot贸n para generar contenido
submit = st.button("Generar mi historia")
# Mostrar el contenido generado en la columna derecha (col2)
with col2:
if submit:
if target_audience and product and action:
try:
# Verificar si es GHA y necesita story_topic
if selected_formula == "GHA":
if story_topic:
response = generate_story(selected_formula, target_audience, product,
action, mood, length, story_topic)
else:
st.error("Por favor, completa todos los campos requeridos para la f贸rmula G.H.A.")
response = ""
else:
response = generate_story(selected_formula, target_audience, product,
action, mood, length)
if response:
st.subheader("Historia generada:")
st.write(response)
except ValueError as e:
st.error(f"Error: {str(e)}")
else:
st.error("Por favor, completa todos los campos requeridos (P煤blico objetivo, Producto y Acci贸n).")
|