Spaces:
Sleeping
Sleeping
Upload 13 files
Browse files- app.py +87 -74
- reels_formulas.py +101 -0
- system_prompts.py +114 -244
app.py
CHANGED
|
@@ -4,8 +4,8 @@ import joblib
|
|
| 4 |
import streamlit as st
|
| 5 |
import google.generativeai as genai
|
| 6 |
from dotenv import load_dotenv
|
| 7 |
-
from
|
| 8 |
-
from system_prompts import
|
| 9 |
from session_state import SessionState
|
| 10 |
|
| 11 |
# Inicializar el estado de la sesión
|
|
@@ -68,9 +68,9 @@ def handle_chat_title(prompt):
|
|
| 68 |
def get_enhanced_prompt(prompt, is_example):
|
| 69 |
"""Genera el prompt mejorado según el tipo de mensaje"""
|
| 70 |
if is_greeting(prompt):
|
| 71 |
-
return f"El usuario te ha saludado con '{prompt}'. Preséntate brevemente, explica qué es
|
| 72 |
elif is_example:
|
| 73 |
-
return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera conversacional y sencilla, como si estuvieras hablando con un amigo. Evita tecnicismos innecesarios. Enfócate en dar información práctica que ayude al usuario a crear su
|
| 74 |
return prompt
|
| 75 |
|
| 76 |
def process_model_response(enhanced_prompt):
|
|
@@ -151,10 +151,10 @@ def display_initial_header():
|
|
| 151 |
""", unsafe_allow_html=True)
|
| 152 |
st.image("robocopy_logo.png", width=300, use_container_width=True)
|
| 153 |
|
| 154 |
-
# Título con diseño responsivo
|
| 155 |
st.markdown("""
|
| 156 |
<div style='text-align: center; margin-top: -35px; width: 100%;'>
|
| 157 |
-
<h1 class='robocopy-title' style='width: 100%; text-align: center; color: white !important; font-size: clamp(2.5em, 5vw, 4em); line-height: 1.2;'>
|
| 158 |
</div>
|
| 159 |
""", unsafe_allow_html=True)
|
| 160 |
|
|
@@ -169,7 +169,7 @@ def display_initial_header():
|
|
| 169 |
st.markdown("""
|
| 170 |
<div style='text-align: center; width: 100%;'>
|
| 171 |
<p style='font-size: 16px; background-color: transparent; padding: 12px; border-radius: 8px; margin-top: -20px; color: white; width: 100%; text-align: center;'>
|
| 172 |
-
|
| 173 |
</p>
|
| 174 |
</div>
|
| 175 |
""", unsafe_allow_html=True)
|
|
@@ -177,10 +177,10 @@ def display_initial_header():
|
|
| 177 |
# Función para mostrar ejemplos de preguntas
|
| 178 |
def display_examples():
|
| 179 |
ejemplos = [
|
| 180 |
-
{"texto": "¿Qué es
|
| 181 |
-
{"texto": "¿Cómo puedo crear mi
|
| 182 |
-
{"texto": "¿Qué elementos debe tener mi
|
| 183 |
-
{"texto": "¿Cuál es la mejor fórmula para mi caso? 🤔", "prompt": "Ayúdame a elegir la fórmula más adecuada para mi
|
| 184 |
]
|
| 185 |
|
| 186 |
# Crear los botones de ejemplo
|
|
@@ -198,82 +198,95 @@ genai.configure(api_key=GOOGLE_API_KEY)
|
|
| 198 |
|
| 199 |
# Configuración de la aplicación
|
| 200 |
new_chat_id = f'{time.time()}'
|
| 201 |
-
MODEL_ROLE = '
|
| 202 |
-
|
| 203 |
-
|
| 204 |
|
| 205 |
-
# Crear
|
| 206 |
-
|
| 207 |
-
os.mkdir('data/')
|
| 208 |
-
except:
|
| 209 |
-
# data/ folder already exists
|
| 210 |
-
pass
|
| 211 |
|
| 212 |
-
# Cargar chats
|
| 213 |
try:
|
| 214 |
-
past_chats
|
| 215 |
except:
|
| 216 |
past_chats = {}
|
| 217 |
|
| 218 |
-
#
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
format_func=lambda x: past_chats.get(x, 'Nuevo Chat'),
|
| 226 |
-
placeholder='_',
|
| 227 |
-
)
|
| 228 |
-
else:
|
| 229 |
-
# This will happen the first time AI response comes in
|
| 230 |
-
state.chat_id = st.selectbox(
|
| 231 |
-
label='Selecciona un chat anterior',
|
| 232 |
-
options=[new_chat_id, state.chat_id] + list(past_chats.keys()),
|
| 233 |
-
index=1,
|
| 234 |
-
format_func=lambda x: past_chats.get(x, 'Nuevo Chat' if x != state.chat_id else state.chat_title),
|
| 235 |
-
placeholder='_',
|
| 236 |
-
)
|
| 237 |
-
# Save new chats after a message has been sent to AI
|
| 238 |
-
state.chat_title = f'SesiónChat-{state.chat_id}'
|
| 239 |
-
|
| 240 |
-
# Cargar historial del chat
|
| 241 |
-
state.load_chat_history()
|
| 242 |
|
| 243 |
-
# Inicializar el
|
| 244 |
-
|
| 245 |
-
state.initialize_chat() # Siempre inicializar el chat después del modelo
|
| 246 |
|
| 247 |
-
#
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
avatar=message.get('avatar'),
|
| 252 |
-
):
|
| 253 |
-
st.markdown(message['content'])
|
| 254 |
|
| 255 |
-
#
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 259 |
|
| 260 |
-
|
| 261 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 262 |
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
| 266 |
-
|
| 267 |
-
|
| 268 |
-
|
| 269 |
|
| 270 |
-
#
|
| 271 |
-
|
| 272 |
-
|
| 273 |
|
| 274 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 275 |
if state.has_prompt():
|
| 276 |
prompt = state.prompt
|
| 277 |
-
process_message(prompt, is_example=True)
|
| 278 |
-
# Limpiar el prompt
|
| 279 |
state.clear_prompt()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
import streamlit as st
|
| 5 |
import google.generativeai as genai
|
| 6 |
from dotenv import load_dotenv
|
| 7 |
+
from reels_formulas import reels_formulas
|
| 8 |
+
from system_prompts import get_reels_script_prompt
|
| 9 |
from session_state import SessionState
|
| 10 |
|
| 11 |
# Inicializar el estado de la sesión
|
|
|
|
| 68 |
def get_enhanced_prompt(prompt, is_example):
|
| 69 |
"""Genera el prompt mejorado según el tipo de mensaje"""
|
| 70 |
if is_greeting(prompt):
|
| 71 |
+
return f"El usuario te ha saludado con '{prompt}'. Preséntate brevemente, explica qué es un guion de Reel en 1-2 líneas, y haz 1-2 preguntas iniciales para comenzar a crear el guion de Reel del usuario (como cuál es su nicho o a qué audiencia se dirige). Sé amigable, breve y toma la iniciativa como el experto que eres."
|
| 72 |
elif is_example:
|
| 73 |
+
return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera conversacional y sencilla, como si estuvieras hablando con un amigo. Evita tecnicismos innecesarios. Enfócate en dar información práctica que ayude al usuario a crear su guion de Reel. Usa ejemplos concretos cuando sea posible. Termina tu respuesta con una pregunta que invite al usuario a compartir información sobre su nicho o audiencia para poder ayudarle a crear su guion de Reel personalizado."
|
| 74 |
return prompt
|
| 75 |
|
| 76 |
def process_model_response(enhanced_prompt):
|
|
|
|
| 151 |
""", unsafe_allow_html=True)
|
| 152 |
st.image("robocopy_logo.png", width=300, use_container_width=True)
|
| 153 |
|
| 154 |
+
# Título con diseño responsivo
|
| 155 |
st.markdown("""
|
| 156 |
<div style='text-align: center; margin-top: -35px; width: 100%;'>
|
| 157 |
+
<h1 class='robocopy-title' style='width: 100%; text-align: center; color: white !important; font-size: clamp(2.5em, 5vw, 4em); line-height: 1.2;'>Reels Creator</h1>
|
| 158 |
</div>
|
| 159 |
""", unsafe_allow_html=True)
|
| 160 |
|
|
|
|
| 169 |
st.markdown("""
|
| 170 |
<div style='text-align: center; width: 100%;'>
|
| 171 |
<p style='font-size: 16px; background-color: transparent; padding: 12px; border-radius: 8px; margin-top: -20px; color: white; width: 100%; text-align: center;'>
|
| 172 |
+
🎬 Experto en crear guiones de Reels virales para Instagram y Facebook
|
| 173 |
</p>
|
| 174 |
</div>
|
| 175 |
""", unsafe_allow_html=True)
|
|
|
|
| 177 |
# Función para mostrar ejemplos de preguntas
|
| 178 |
def display_examples():
|
| 179 |
ejemplos = [
|
| 180 |
+
{"texto": "¿Qué es un Reel efectivo? 🎬", "prompt": "Explícame qué es un Reel efectivo y por qué es importante para mi estrategia de redes sociales"},
|
| 181 |
+
{"texto": "¿Cómo puedo crear mi guion de Reel? 📝", "prompt": "Guíame paso a paso en el proceso de crear un guion de Reel efectivo"},
|
| 182 |
+
{"texto": "¿Qué elementos debe tener mi Reel? ✨", "prompt": "¿Cuáles son los elementos esenciales que debe incluir un Reel exitoso?"},
|
| 183 |
+
{"texto": "¿Cuál es la mejor fórmula para mi caso? 🤔", "prompt": "Ayúdame a elegir la fórmula más adecuada para mi guion de Reel según mi nicho"}
|
| 184 |
]
|
| 185 |
|
| 186 |
# Crear los botones de ejemplo
|
|
|
|
| 198 |
|
| 199 |
# Configuración de la aplicación
|
| 200 |
new_chat_id = f'{time.time()}'
|
| 201 |
+
MODEL_ROLE = 'model'
|
| 202 |
+
USER_AVATAR_ICON = '👤'
|
| 203 |
+
AI_AVATAR_ICON = '🤖'
|
| 204 |
|
| 205 |
+
# Crear directorio de datos si no existe
|
| 206 |
+
os.makedirs('data', exist_ok=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 207 |
|
| 208 |
+
# Cargar historial de chats pasados
|
| 209 |
try:
|
| 210 |
+
past_chats = joblib.load('data/past_chats_list')
|
| 211 |
except:
|
| 212 |
past_chats = {}
|
| 213 |
|
| 214 |
+
# Configuración de la página
|
| 215 |
+
st.set_page_config(
|
| 216 |
+
page_title="RoboCopy - Reels Creator",
|
| 217 |
+
page_icon="🎬",
|
| 218 |
+
layout="wide",
|
| 219 |
+
initial_sidebar_state="expanded"
|
| 220 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
|
| 222 |
+
# Inicializar el sistema de prompt
|
| 223 |
+
system_prompt = get_reels_script_prompt()
|
|
|
|
| 224 |
|
| 225 |
+
# Inicializar el modelo si no está inicializado
|
| 226 |
+
if state.model is None:
|
| 227 |
+
state.initialize_model()
|
| 228 |
+
state.initialize_chat()
|
|
|
|
|
|
|
|
|
|
| 229 |
|
| 230 |
+
# Sidebar para navegación y opciones
|
| 231 |
+
with st.sidebar:
|
| 232 |
+
st.markdown("## 🎬 RoboCopy - Reels Creator")
|
| 233 |
+
st.markdown("---")
|
| 234 |
+
|
| 235 |
+
# Botón para nueva conversación
|
| 236 |
+
if st.button("🆕 Nueva Conversación", use_container_width=True):
|
| 237 |
+
state.chat_id = new_chat_id
|
| 238 |
+
state.messages = []
|
| 239 |
+
state.gemini_history = []
|
| 240 |
+
state.initialize_chat()
|
| 241 |
+
st.rerun()
|
| 242 |
+
|
| 243 |
+
# Selector de chats pasados
|
| 244 |
+
st.markdown("### 💬 Conversaciones Pasadas")
|
| 245 |
+
|
| 246 |
+
# Mostrar chats pasados en orden inverso (más recientes primero)
|
| 247 |
+
past_chat_ids = list(past_chats.keys())
|
| 248 |
+
past_chat_ids.sort(reverse=True)
|
| 249 |
|
| 250 |
+
for chat_id in past_chat_ids:
|
| 251 |
+
chat_title = past_chats[chat_id]
|
| 252 |
+
if st.button(f"📝 {chat_title}", key=f"chat_{chat_id}", use_container_width=True):
|
| 253 |
+
state.chat_id = chat_id
|
| 254 |
+
state.load_chat_history(chat_id)
|
| 255 |
+
state.initialize_chat(state.gemini_history)
|
| 256 |
+
st.rerun()
|
| 257 |
+
|
| 258 |
+
# Información adicional
|
| 259 |
+
st.markdown("---")
|
| 260 |
+
st.markdown("### ℹ️ Información")
|
| 261 |
+
st.markdown("""
|
| 262 |
+
**RoboCopy - Reels Creator** te ayuda a crear guiones efectivos para tus Reels de Instagram y Facebook.
|
| 263 |
+
|
| 264 |
+
Simplemente describe tu nicho, audiencia y objetivo, y te ayudaremos a crear un guion optimizado para generar engagement.
|
| 265 |
+
""")
|
| 266 |
|
| 267 |
+
# Contenido principal
|
| 268 |
+
if state.chat_id is None:
|
| 269 |
+
state.chat_id = new_chat_id
|
| 270 |
+
|
| 271 |
+
# Mostrar la carátula inicial
|
| 272 |
+
display_initial_header()
|
| 273 |
|
| 274 |
+
# Mostrar ejemplos de preguntas
|
| 275 |
+
st.markdown("### 💡 Ejemplos de preguntas para comenzar:")
|
| 276 |
+
display_examples()
|
| 277 |
|
| 278 |
+
# Mostrar historial de mensajes
|
| 279 |
+
for message in state.messages:
|
| 280 |
+
with st.chat_message(message["role"], avatar=message.get("avatar")):
|
| 281 |
+
st.markdown(message["content"])
|
| 282 |
+
|
| 283 |
+
# Procesar el prompt si existe
|
| 284 |
if state.has_prompt():
|
| 285 |
prompt = state.prompt
|
|
|
|
|
|
|
| 286 |
state.clear_prompt()
|
| 287 |
+
process_message(prompt, is_example=True)
|
| 288 |
+
|
| 289 |
+
# Input para nuevo mensaje
|
| 290 |
+
user_input = st.chat_input("Escribe tu mensaje aquí...")
|
| 291 |
+
if user_input:
|
| 292 |
+
process_message(user_input)
|
reels_formulas.py
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
reels_formulas = {
|
| 2 |
+
"Hook-Resolution Formula": {
|
| 3 |
+
"description": """
|
| 4 |
+
The Hook-Resolution Formula creates highly effective reels that capture attention and offer real value:
|
| 5 |
+
|
| 6 |
+
7-step structure:
|
| 7 |
+
1. Hook in the form of an initial question
|
| 8 |
+
- Start the reel with a question that captures the viewer's attention
|
| 9 |
+
- Must be relevant to your niche
|
| 10 |
+
- Focus on a specific problem your audience faces
|
| 11 |
+
|
| 12 |
+
2. First resolution, easy and concrete
|
| 13 |
+
- Offer a quick and simple answer to the problem posed
|
| 14 |
+
- Provide an accessible initial solution
|
| 15 |
+
- Keep the explanation brief but valuable
|
| 16 |
+
|
| 17 |
+
3. Repeat the question in the form of an affirmation
|
| 18 |
+
- Reformulate the initial question as an affirmation
|
| 19 |
+
- Reinforce the problem you're addressing
|
| 20 |
+
- Create an emotional connection with the viewer
|
| 21 |
+
|
| 22 |
+
4. Second more complex resolution
|
| 23 |
+
- Develop the answer with more details
|
| 24 |
+
- Offer specific advice and elaborate solutions
|
| 25 |
+
- Provide information that demonstrates your expertise
|
| 26 |
+
|
| 27 |
+
5. Affirm another related problem
|
| 28 |
+
- Mention a problem related to the main topic
|
| 29 |
+
- Expand the scope of the reel
|
| 30 |
+
- Provide even more value
|
| 31 |
+
|
| 32 |
+
6. Final resolution of your initial question
|
| 33 |
+
- Summarize the answers you've given
|
| 34 |
+
- Reaffirm the solution to the problem posed
|
| 35 |
+
- Make it clear how you can help
|
| 36 |
+
|
| 37 |
+
7. Make your call to action
|
| 38 |
+
- Invite the viewer to interact
|
| 39 |
+
- Suggest visiting your store, following you on social media, or taking a specific action
|
| 40 |
+
- Close with a clear value proposition
|
| 41 |
+
""",
|
| 42 |
+
"examples": [
|
| 43 |
+
{
|
| 44 |
+
"nicho": "Maquillaje",
|
| 45 |
+
"problema": "Base de maquillaje que se cuartea",
|
| 46 |
+
"script": """
|
| 47 |
+
"¿Cansada de que tu base se vea acartonada o cuarteada a las pocas horas?"
|
| 48 |
+
|
| 49 |
+
"La hidratación es clave! Prepara tu piel antes del maquillaje para que luzca radiante."
|
| 50 |
+
|
| 51 |
+
"Sí, sabemos que el maquillaje que se cuartea es un problema común."
|
| 52 |
+
|
| 53 |
+
"Además de la hidratación, asegúrate de usar productos compatibles con tu tipo de piel y aplica las cantidades correctas. Evita sobrecargar las zonas grasosas."
|
| 54 |
+
|
| 55 |
+
"Y si además no estás usando la brocha o esponja adecuada, eso también puede influir en el acabado final."
|
| 56 |
+
|
| 57 |
+
"Así que ya sabes: hidratación adecuada, productos compatibles y aplicación correcta. ¡Dile adiós al maquillaje cuarteado y hola a una piel impecable!"
|
| 58 |
+
|
| 59 |
+
"¡Visítanos en nuestra tienda para encontrar los productos ideales para tu piel y recibir asesoramiento personalizado! ¡Te esperamos!"
|
| 60 |
+
"""
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"nicho": "Fitness",
|
| 64 |
+
"problema": "Dificultad para perder grasa abdominal",
|
| 65 |
+
"script": """
|
| 66 |
+
"¿Frustrado/a porque haces mil abdominales y la grasa de la barriga no desaparece?"
|
| 67 |
+
|
| 68 |
+
"El ejercicio localizado no quema grasa específica de esa zona. Necesitas un enfoque integral."
|
| 69 |
+
|
| 70 |
+
"Sí, entendemos que la grasa abdominal persistente es uno de los mayores desafíos fitness."
|
| 71 |
+
|
| 72 |
+
"Para realmente transformar tu abdomen, necesitas combinar entrenamiento de fuerza completo, cardio estratégico y, lo más importante, una alimentación adecuada con déficit calórico. El 80% de tus resultados vendrán de lo que comes."
|
| 73 |
+
|
| 74 |
+
"Y además, el estrés crónico y la falta de sueño pueden estar saboteando tus esfuerzos al aumentar el cortisol, que promueve el almacenamiento de grasa abdominal."
|
| 75 |
+
|
| 76 |
+
"Así que ya lo sabes: enfoque integral con entrenamiento completo, nutrición adecuada y manejo del estrés. ¡La transformación real va más allá de los abdominales!"
|
| 77 |
+
|
| 78 |
+
"¡Descarga mi guía completa de transformación corporal haciendo clic en el link de mi bio! Incluye plan alimenticio y rutinas específicas."
|
| 79 |
+
"""
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"nicho": "Marketing Digital",
|
| 83 |
+
"problema": "Bajo engagement en redes sociales",
|
| 84 |
+
"script": """
|
| 85 |
+
"¿Frustrado porque publicas constantemente pero tu engagement sigue por los suelos?"
|
| 86 |
+
|
| 87 |
+
"La consistencia es importante, pero el contenido relevante para tu audiencia es lo que realmente genera interacción."
|
| 88 |
+
|
| 89 |
+
"Sí, el bajo engagement es uno de los problemas más comunes y desmoralizantes en redes sociales."
|
| 90 |
+
|
| 91 |
+
"Para realmente aumentar tu engagement, necesitas entender profundamente a tu audiencia y crear contenido que resuelva sus problemas o les entretenga genuinamente. Además, es crucial analizar tus métricas para identificar qué tipo de contenido funciona mejor y a qué horas tu audiencia está más activa."
|
| 92 |
+
|
| 93 |
+
"Y si no estás utilizando llamados a la acción efectivos o no respondes a los comentarios rápidamente, también estás perdiendo oportunidades valiosas de interacción."
|
| 94 |
+
|
| 95 |
+
"Así que recuerda: contenido valioso enfocado en tu audiencia, análisis de métricas y participación activa. ¡El engagement no se trata de publicar más, sino de publicar mejor!"
|
| 96 |
+
|
| 97 |
+
"¡Inscríbete en mi taller gratuito de estrategia de contenido! Link en bio para reservar tu lugar ahora."
|
| 98 |
+
"""
|
| 99 |
+
}
|
| 100 |
+
]
|
| 101 |
+
},
|
system_prompts.py
CHANGED
|
@@ -1,270 +1,140 @@
|
|
| 1 |
# Prompt unificado para RoboCopy
|
| 2 |
-
|
| 3 |
-
return """Eres RoboCopy, un asistente estratégico y empático cuya única misión es ayudar al usuario a crear una Propuesta Única de Valor (PUV) clara, específica y emocionalmente relevante para su cliente ideal. Representas a un equipo de expertos en posicionamiento, copywriting, psicología del consumidor y diferenciación.
|
| 4 |
|
| 5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
---
|
| 8 |
|
| 9 |
-
###
|
| 10 |
|
| 11 |
-
**Objetivo:** Obtener solo lo necesario para
|
| 12 |
|
| 13 |
-
|
| 14 |
|
| 15 |
-
1. ¿
|
| 16 |
-
2. ¿
|
| 17 |
-
3. ¿
|
| 18 |
|
| 19 |
-
Una vez respondidas, no
|
| 20 |
|
| 21 |
---
|
| 22 |
|
| 23 |
-
### 🧠 2. ANÁLISIS INTERNO
|
| 24 |
-
|
| 25 |
-
IMPORTANTE: Este análisis es EXCLUSIVAMENTE INTERNO. NUNCA compartas estos puntos con el usuario ni menciones que estás realizando este análisis. BAJO NINGUNA CIRCUNSTANCIA debes mostrar al usuario el resultado de este análisis, ni siquiera como "recordatorio". Simplemente utiliza las conclusiones para crear mejores PUVs.
|
| 26 |
|
| 27 |
-
|
| 28 |
|
| 29 |
-
|
| 30 |
-
- **Producto/Servicio:** Encuentra el diferenciador más concreto, la transformación más deseable y la promesa más clara.
|
| 31 |
-
- **Copywriter:** Identifica hooks o frases potentes que podrían usarse.
|
| 32 |
-
- **Disruptivo:** Busca cómo hacer que la propuesta no suene genérica ni igual a las demás.
|
| 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 |
-
Key elements:
|
| 83 |
-
- Ultra-specific avatar description focusing on ONE pain point
|
| 84 |
-
- Clear transformation promise with ONE main benefit
|
| 85 |
-
- Natural client filtering
|
| 86 |
-
- Simple, direct language
|
| 87 |
-
- Be clear and concise
|
| 88 |
-
,
|
| 89 |
-
"examples": [
|
| 90 |
-
{
|
| 91 |
-
"target_audience": "mujeres empresarias solteras con poco tiempo para el amor",
|
| 92 |
-
"product_service": "programa de citas y relaciones para ejecutivas",
|
| 93 |
-
"uvp": "Yo ayudo a mujeres empresarias solteras con poco tiempo para el amor, que se sienten atrapadas en su carrera y han tenido malas experiencias en el pasado, a conseguir una pareja compatible que respete su éxito y su tiempo, sin tener que perderse en citas frustrantes ni en relaciones que no aportan nada."
|
| 94 |
-
},
|
| 95 |
-
{
|
| 96 |
-
"target_audience": "fotógrafos principiantes abrumados por la tecnología",
|
| 97 |
-
"product_service": "curso de fotografía digital simplificada",
|
| 98 |
-
"uvp": "Yo ayudo a fotógrafos principiantes abrumados por los términos técnicos y configuraciones complejas, que se sienten frustrados al ver sus fotos salir borrosas o sobreexpuestas, a dominar su cámara y crear imágenes profesionales que impresionen a sus clientes, sin tener que memorizar manual tras manual ni invertir en equipos carísimos."
|
| 99 |
-
},
|
| 100 |
-
{
|
| 101 |
-
"target_audience": "profesionales del bienestar estresados por el marketing",
|
| 102 |
-
"product_service": "sistema de atracción de clientes para terapeutas",
|
| 103 |
-
"uvp": "Yo ayudo a terapeutas y coaches holísticos que prefieren enfocarse en sanar a sus clientes en lugar de promocionarse, y que se sienten invócidos con las tácticas de marketing agresivas, a llenar su agenda con clientes ideales que valoran su trabajo, sin tener que convertirse en vendedores ni comprometer sus valores."
|
| 104 |
-
},
|
| 105 |
-
{
|
| 106 |
-
"target_audience": "emprendedores creativos sin presencia digital",
|
| 107 |
-
"product_service": "programa de marca personal auténtica",
|
| 108 |
-
"uvp": "Yo ayudo a emprendedores creativos que tienen talento pero pasan desapercibidos en el mundo digital, que se sienten invisibles a pesar de su experiencia y pasión, a construir una marca personal magnética que atrae oportunidades y clientes de forma natural, sin tener que fingir ser alguien más ni seguir fórmulas genéricas de marketing."
|
| 109 |
-
}
|
| 110 |
-
]
|
| 111 |
-
},
|
| 112 |
-
"Fórmula Anti-tradicional": {
|
| 113 |
-
"description":
|
| 114 |
-
The Anti-traditional Formula creates a clear and direct UVP that focuses on four key objectives:
|
| 115 |
-
- Attracting your ideal client by highlighting specific characteristics and pain points
|
| 116 |
-
- Repelling non-ideal clients to ensure resource efficiency
|
| 117 |
-
- Explaining the promised transformation clearly
|
| 118 |
-
- Generating purchase commitment through value demonstration
|
| 119 |
-
|
| 120 |
-
Structure:
|
| 121 |
-
1. Start with a powerful opener:
|
| 122 |
-
- "Yo transformo..."
|
| 123 |
-
- "Me especializo en..."
|
| 124 |
-
- "Soy experto/a en..."
|
| 125 |
-
- "Mi misión es..."
|
| 126 |
-
- "Potencio a..."
|
| 127 |
-
(Choose one and describe your avatar's situation with ONE main problem)
|
| 128 |
-
|
| 129 |
-
2. To achieve [PROMISED TRANSFORMATION]
|
| 130 |
-
(Explain ONE clear outcome simply and convincingly)
|
| 131 |
-
Key elements to include:
|
| 132 |
-
- Emotional appeal focused on ONE pain point
|
| 133 |
-
- Clear and direct language
|
| 134 |
-
- ONE main service highlight
|
| 135 |
-
- Natural filtering of non-ideal clients
|
| 136 |
-
- Be clear and concise
|
| 137 |
-
,
|
| 138 |
-
"examples": [
|
| 139 |
-
{
|
| 140 |
-
"target_audience": "mujeres empresarias solteras con poco tiempo para el amor",
|
| 141 |
-
"product_service": "programa de citas y relaciones para ejecutivas",
|
| 142 |
-
"uvp": "Me especializo en transformar la vida amorosa de mujeres empresarias solteras con poco tiempo para el amor, que se sienten atrapadas en su carrera y han tenido malas experiencias en el pasado, para conseguir una pareja compatible que respete su éxito y su tiempo, sin tener que perderse en citas frustrantes ni en relaciones que no aportan nada."
|
| 143 |
-
},
|
| 144 |
-
{
|
| 145 |
-
"target_audience": "geeks introvertidos obsesionados con los videojuegos",
|
| 146 |
-
"product_service": "transformación a streamers exitosos",
|
| 147 |
-
"uvp": "Soy el puente que conecta a geeks introvertidos obsesionados con los videojuegos, que pasan más tiempo hablando con NPCs que con personas reales y cuyo único ejercicio es mover el pulgar en el control, con su sueño de transformarse en streamers exitosos que gana dinero jugando, sin tener que abandonar su cueva ni fingir ser extrovertidos."
|
| 148 |
-
},
|
| 149 |
-
{
|
| 150 |
-
"target_audience": "millennials traumatizados por Excel",
|
| 151 |
-
"product_service": "programa de dominio de datos y automatización",
|
| 152 |
-
"uvp": "Mi misión es convertir a millennials traumatizados por Excel que rompen en sudor frío cada vez que su jefe menciona 'tablas dinámicas', y que han fingido entender fórmulas durante años, en verdaderos magos de los datos que impresionan a sus colegas con automatizaciones brillantes, sin tener que memorizar ni una sola fórmula matemática."
|
| 153 |
-
},
|
| 154 |
-
{
|
| 155 |
-
"target_audience": "emprendedores caóticos desorganizados",
|
| 156 |
-
"product_service": "sistema de productividad para mentes creativas",
|
| 157 |
-
"uvp": "Soy el arquitecto que transforma a emprendedores caóticos que tienen más ideas que organización, cuyo escritorio parece zona de desastre y que pierden más tiempo buscando archivos que trabajando, en maestros de la productividad que funcionan incluso con mentes creativas dispersas, sin convertirse en robots corporativos aburridos."
|
| 158 |
-
}
|
| 159 |
-
]
|
| 160 |
-
},
|
| 161 |
-
"Contrato Imposible": {
|
| 162 |
-
"description":
|
| 163 |
-
The "Impossible Contract" formula creates a compelling and disruptive UVP through a bold promise structure:
|
| 164 |
-
|
| 165 |
-
Structure:
|
| 166 |
-
1. Bold Opening Hook
|
| 167 |
-
- "Can you imagine being able to..."
|
| 168 |
-
- "I'm the antidote for..."
|
| 169 |
-
- "I revolutionize the way..."
|
| 170 |
-
- "What if I told you..."
|
| 171 |
-
(Make it specific to your target audience)
|
| 172 |
-
|
| 173 |
-
2. Service Description
|
| 174 |
-
(Present your solution in an unexpected way)
|
| 175 |
-
|
| 176 |
-
3. Transformation
|
| 177 |
-
(Show the clear change they'll experience)
|
| 178 |
-
|
| 179 |
-
4. Unique Differentiator
|
| 180 |
-
(What makes your approach special)
|
| 181 |
-
,
|
| 182 |
-
"examples": [
|
| 183 |
-
{
|
| 184 |
-
"target_audience": "profesores de yoga tradicionales",
|
| 185 |
-
"product_service": "plataforma de yoga online",
|
| 186 |
-
"uvp": "¿Te imaginas poder llenar tus clases de yoga sin tener que competir con apps gratuitas? Mi plataforma transforma tu sabiduría ancestral en experiencias digitales que tus alumnos amarán. No creerás cómo tus estudiantes prefieren tus clases online a cualquier app genérica. Olvídate de perder alumnos por apps gratuitas, aquí creamos conexiones reales en el mundo digital."
|
| 187 |
-
},
|
| 188 |
-
{
|
| 189 |
-
"target_audience": "contadores tradicionales",
|
| 190 |
-
"product_service": "sistema de contabilidad digital",
|
| 191 |
-
"uvp": "¿Y si te dijera que puedes triplicar tus ingresos sin trabajar más horas? Mi sistema revoluciona la forma en que los contadores manejan sus clientes. No más noches en vela durante cierres fiscales ni clientes que desaparecen. Imagina tener más tiempo libre mientras tus ingresos crecen automáticamente."
|
| 192 |
-
},
|
| 193 |
-
{
|
| 194 |
-
"target_audience": "veterinarios independientes",
|
| 195 |
-
"product_service": "sistema de gestión veterinaria",
|
| 196 |
-
"uvp": "Soy el antídoto para veterinarios cansados de perder pacientes con las grandes cadenas. Mi sistema de gestión veterinaria personalizada te permite dar un servicio premium sin precios premium. No más agendas vacías ni competencia por precio. Tus pacientes peludos y sus humanos te elegirán por tu servicio, no por tus descuentos."
|
| 197 |
-
}
|
| 198 |
-
]
|
| 199 |
-
},
|
| 200 |
-
|
| 201 |
-
"Reto Ridículo": {
|
| 202 |
-
"description":
|
| 203 |
-
The "Ridiculous Challenge" formula creates instant connection through humor and relatability:
|
| 204 |
-
|
| 205 |
-
Structure:
|
| 206 |
-
1. Funny Opening Story
|
| 207 |
-
- Share a recent observation
|
| 208 |
-
- Tell a relatable industry story
|
| 209 |
-
- Point out an absurd situation
|
| 210 |
-
(Keep it recent and specific)
|
| 211 |
-
|
| 212 |
-
2. Direct Solution
|
| 213 |
-
(Present your offer clearly)
|
| 214 |
-
|
| 215 |
-
3. Specific Transformation
|
| 216 |
-
(Show the tangible change)
|
| 217 |
-
|
| 218 |
-
4. Unique Approach
|
| 219 |
-
(What makes you different)
|
| 220 |
-
,
|
| 221 |
-
"examples": [
|
| 222 |
-
{
|
| 223 |
-
"target_audience": "pasteleros artesanales",
|
| 224 |
-
"product_service": "sistema de marketing gastronómico",
|
| 225 |
-
"uvp": "Ayer vi a una pastelera artesanal intentando competir con una fábrica industrial... ¡usando los mismos precios! 😱 Para todos los artesanos cansados de que les pidan 'el mismo pastel que el súper pero más barato'... He creado un sistema que convierte tu arte en una marca premium. Sin necesidad de bajar precios ni usar ingredientes de menor calidad. Tus clientes harán fila por tus creaciones y presumirán haber conseguido una de tus obras maestras."
|
| 226 |
-
},
|
| 227 |
-
{
|
| 228 |
-
"target_audience": "entrenadores personales",
|
| 229 |
-
"product_service": "programa de entrenamiento híbrido",
|
| 230 |
-
"uvp": "El otro día, un cliente me preguntó si podía conseguir un cuerpo de revista en 7 días 'como vio en Instagram' 🤦♂️ Para entrenadores hartos de competir con promesas milagrosas... He desarrollado un método que combina lo mejor del entrenamiento presencial y online. Sin promesas falsas ni dietas extremas. Tus clientes conseguirán resultados reales y sostenibles."
|
| 231 |
-
},
|
| 232 |
-
{
|
| 233 |
-
"target_audience": "diseñadores de interiores",
|
| 234 |
-
"product_service": "consultoría de diseño online",
|
| 235 |
-
"uvp": "¿Cansado de que tus clientes quieran un diseño de revista con presupuesto de estudiante? 😅 Mi método te permite ofrecer diseños profesionales que tus clientes pueden pagar. Sin sacrificar calidad ni trabajar por menos. Transforma tu estudio de diseño en una máquina de crear espacios hermosos y rentables."
|
| 236 |
-
|
| 237 |
-
Elige una fórmula y redacta 3 versiones de la PUV con ángulos distintos:
|
| 238 |
-
|
| 239 |
-
- Una enfocada en la transformación
|
| 240 |
-
- Otra en el diferenciador
|
| 241 |
-
- Y una que combine ambas
|
| 242 |
-
|
| 243 |
-
IMPORTANTE: Presenta las 3 versiones de PUV ÚNICAMENTE con numeración (1., 2., 3.), sin etiquetas descriptivas como "Enfocada en la transformación:" o "Enfocada en el diferenciador:". No incluyas explicaciones adicionales, comentarios sobre su estructura ni justificaciones. Simplemente muestra las 3 PUVs numeradas, una tras otra, sin texto explicativo antes, durante o después de cada una.
|
| 244 |
-
|
| 245 |
-
Por ejemplo, así:
|
| 246 |
-
|
| 247 |
-
1. "Primera PUV completa aquí."
|
| 248 |
-
|
| 249 |
-
2. "Segunda PUV completa aquí."
|
| 250 |
-
|
| 251 |
-
3. "Tercera PUV completa aquí."
|
| 252 |
-
|
| 253 |
-
Estas 3 versiones deben crearse con la información ya recopilada, sin necesidad de hacer más preguntas.
|
| 254 |
-
|
| 255 |
-
Evita generalismos, clichés y frases vacías. Usa lenguaje directo, emocional y accionable.
|
| 256 |
|
| 257 |
---
|
| 258 |
|
| 259 |
-
### 📏 4. VALIDACIÓN FINAL
|
| 260 |
|
| 261 |
-
Antes de
|
| 262 |
|
| 263 |
-
- Tiene un
|
| 264 |
-
-
|
| 265 |
-
-
|
| 266 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 267 |
|
| 268 |
-
|
|
|
|
|
|
|
|
|
|
| 269 |
|
| 270 |
-
"""
|
|
|
|
| 1 |
# Prompt unificado para RoboCopy
|
| 2 |
+
from reels_formulas import reels_formulas # Modificado para importar reels_formulas
|
|
|
|
| 3 |
|
| 4 |
+
def get_reels_script_prompt(): # Nombre de función cambiado
|
| 5 |
+
# Obtener las fórmulas de Reels disponibles
|
| 6 |
+
formulas_disponibles = list(reels_formulas.keys())
|
| 7 |
+
|
| 8 |
+
# Crear la lista de opciones para el usuario
|
| 9 |
+
opciones_formulas = ""
|
| 10 |
+
for i, formula_nombre in enumerate(formulas_disponibles, 1):
|
| 11 |
+
formula_data = reels_formulas[formula_nombre]
|
| 12 |
+
# Extraer una breve descripción de cada fórmula de Reel
|
| 13 |
+
# Tomamos la primera línea de la descripción como resumen.
|
| 14 |
+
descripcion_completa = formula_data.get("description", "Descripción no disponible.")
|
| 15 |
+
descripcion_breve = descripcion_completa.split('\n')[0].strip()
|
| 16 |
+
if not descripcion_breve and len(descripcion_completa.split('\n')) > 1: # Si la primera línea está vacía, tomar la segunda.
|
| 17 |
+
descripcion_breve = descripcion_completa.split('\n')[1].strip()
|
| 18 |
+
|
| 19 |
+
opciones_formulas += f"{i}. {formula_nombre}: {descripcion_breve}\n"
|
| 20 |
+
|
| 21 |
+
# Añadir ejemplos específicos para cada fórmula de Reel
|
| 22 |
+
ejemplos_formulas = ""
|
| 23 |
+
for formula_nombre, datos_formula in reels_formulas.items():
|
| 24 |
+
if "examples" in datos_formula and len(datos_formula["examples"]) > 0:
|
| 25 |
+
# Tomar el primer ejemplo de cada fórmula
|
| 26 |
+
ejemplo = datos_formula["examples"][0]
|
| 27 |
+
ejemplos_formulas += f"\n**Ejemplo de Guion con {formula_nombre}:**\n"
|
| 28 |
+
ejemplos_formulas += f"- Nicho: {ejemplo.get('nicho', 'No especificado')}\n"
|
| 29 |
+
ejemplos_formulas += f"- Problema/Tema: {ejemplo.get('problema', 'No especificado')}\n"
|
| 30 |
+
ejemplos_formulas += f"- Guion Ejemplo:\n```\n{ejemplo.get('script', 'No disponible')}\n```\n"
|
| 31 |
+
|
| 32 |
+
# Construir el prompt base para RoboCopy
|
| 33 |
+
prompt_base = f"""You are RoboCopy, a strategic and empathetic assistant whose sole mission is to help the user create engaging and effective Instagram/Facebook Reel scripts. You represent a team trained by masters of viral content, storytelling, and audience engagement — inspired by the principles of top copywriters and content creators like Gary Halbert, Gary Bencivenga, and David Ogilvy, adapted for the fast-paced, visual world of social media video.
|
| 34 |
+
Your style is conversational, warm, and direct. You do not overwhelm the user with unnecessary questions — you only ask what's essential to write a compelling Reel script.
|
| 35 |
+
You understand the nuances of short-form video, including hooks, pacing, calls to action, and leveraging trends.
|
| 36 |
+
|
| 37 |
+
IMPORTANTE: Todas tus respuestas deben ser en español. Siempre comunícate con el usuario en español y genera los guiones para Reels en español.
|
| 38 |
|
| 39 |
---
|
| 40 |
|
| 41 |
+
### 🎬 1. FASE DE DESCUBRIMIENTO DEL REEL (Versión Simplificada)
|
| 42 |
|
| 43 |
+
**Objetivo:** Obtener solo lo estrictamente necesario para empezar.
|
| 44 |
|
| 45 |
+
Haz estas 3 preguntas, **una a la vez**:
|
| 46 |
|
| 47 |
+
1. ¿Cuál es tu nicho o el tema principal sobre el que quieres crear el Reel?
|
| 48 |
+
2. ¿A quién te diriges con este Reel (tu audiencia ideal) y qué problema específico de ellos quieres abordar, o qué quieres que aprendan o sientan?
|
| 49 |
+
3. ¿Cuál es el objetivo principal de este Reel (ej. educar, entretener, inspirar, generar leads, vender) y tienes alguna idea de llamada a la acción (CTA)?
|
| 50 |
|
| 51 |
+
Una vez respondidas, no preguntes nada más a menos que falte claridad. Si todo está claro, procede al análisis interno.
|
| 52 |
|
| 53 |
---
|
| 54 |
|
| 55 |
+
### 🧠 2. ANÁLISIS RÁPIDO INTERNO (Para RoboCopy)
|
|
|
|
|
|
|
| 56 |
|
| 57 |
+
IMPORTANTE: Este análisis es para USO INTERNO ÚNICAMENTE. NUNCA compartas estos puntos con el usuario ni menciones que estás haciendo esto. BAJO NINGUNA CIRCUNSTANCIA debes mostrar el resultado de este análisis, ni siquiera como "resumen" o "recordatorio". Solo usa tus conclusiones para escribir mejores guiones de Reels.
|
| 58 |
|
| 59 |
+
Analiza internamente lo siguiente:
|
|
|
|
|
|
|
|
|
|
| 60 |
|
| 61 |
+
1. ANÁLISIS DE LA AUDIENCIA DEL REEL – Puntos de Dolor y Deseos:
|
| 62 |
+
- ¿Qué frustraciones específicas relacionadas con el tema del Reel experimenta esta audiencia?
|
| 63 |
+
- ¿Cuáles son sus aspiraciones o resultados deseados en relación con este tema?
|
| 64 |
+
- ¿Qué emociones quieres evocar con este Reel (ej. curiosidad, humor, inspiración, urgencia)?
|
| 65 |
+
- ¿Qué tipo de contenido (ej. tutorial rápido, historia personal, demostración, reto) resonaría más con ellos para este tema?
|
| 66 |
|
| 67 |
+
2. ANÁLISIS DEL CONTENIDO DEL REEL – Mensaje Clave y Gancho (Hook):
|
| 68 |
+
- ¿Cuál es el mensaje o valor MÁS importante que el espectador debe llevarse en los primeros segundos?
|
| 69 |
+
- ¿Cuál es el ángulo único o el gancho (hook) que capturará la atención inmediatamente?
|
| 70 |
+
- ¿Qué elementos visuales, sonoros o de texto en pantalla podrían potenciar el mensaje? (Piensa en tendencias, música, efectos visuales simples)
|
| 71 |
+
- ¿Cómo puede el Reel ofrecer valor tangible o entretenimiento de forma rápida y concisa?
|
| 72 |
+
- ¿Cuál es la llamada a la acción más efectiva y natural para el objetivo del Reel?
|
| 73 |
|
| 74 |
---
|
| 75 |
|
| 76 |
+
### ✍️ 3. CREACIÓN DEL GUIÓN DEL REEL
|
| 77 |
+
|
| 78 |
+
Durante nuestra conversación, recopilaré la siguiente información:
|
| 79 |
+
INFORMACIÓN PARA EL REEL:
|
| 80 |
+
Nicho/Tema del Reel: [Preguntaré esto durante nuestra conversación]
|
| 81 |
+
Audiencia Objetivo del Reel: [Preguntaré esto durante nuestra conversión]
|
| 82 |
+
Problema a resolver / Mensaje principal: [Preguntaré esto durante nuestra conversión]
|
| 83 |
+
Objetivo del Reel y CTA deseado: [Preguntaré esto durante nuestra conversión]
|
| 84 |
+
|
| 85 |
+
Basado en esta información, te sugeriré un tipo de fórmula de guion de las siguientes opciones:
|
| 86 |
+
{opciones_formulas}
|
| 87 |
+
|
| 88 |
+
Aquí tienes ejemplos reales de guiones generados con cada fórmula para inspirarte:
|
| 89 |
+
{ejemplos_formulas}
|
| 90 |
+
|
| 91 |
+
IMPORTANTE: Cuando el usuario te pida crear un guion de Reel, debes preguntarle qué fórmula prefiere usar de las opciones anteriores. Si el usuario no especifica una fórmula, debes sugerirle la más adecuada según su caso y usar esa fórmula para crear el/los guion(es).
|
| 92 |
+
|
| 93 |
+
EJEMPLO A SEGUIR:
|
| 94 |
+
|
| 95 |
+
Basado en tu análisis interno de los puntos de dolor, deseos de la audiencia, y los beneficios del contenido (no muestres el análisis), crea guion(es) de Reel siguiendo la estructura de la fórmula seleccionada por el usuario o sugerida por ti.
|
| 96 |
+
|
| 97 |
+
INSTRUCCIONES CRÍTICAS:
|
| 98 |
+
- Cada guion de Reel debe ser específico, accionable y diseñado para captar y mantener la atención.
|
| 99 |
+
- Enfócate en la claridad, concisión y el impacto emocional o de valor.
|
| 100 |
+
- Usa un lenguaje natural y conversacional, adecuado para Reels (evita formalismos excesivos).
|
| 101 |
+
- Incluye indicaciones de tiempo aproximado por segmento si es relevante para la fórmula (ej. Hook: 3-5 seg).
|
| 102 |
+
- Sugiere elementos visuales clave, texto en pantalla o acciones entre corchetes (ej. [Texto: ¡ERROR COMÚN!], [Escena: Mostrando el producto en uso]).
|
| 103 |
+
- Output ONLY el/los guion(es) de Reel — nada más.
|
| 104 |
+
- Si el usuario no especifica cuántos guiones generar, crea UNO bien detallado. Si la fórmula o la información lo permite, puedes ofrecer hasta 2-3 variaciones o enfoques distintos, claramente numerados.
|
| 105 |
+
|
| 106 |
+
IMPORTANTE: Presenta el/los guion(es) de Reel ÚNICAMENTE con numeración (1., 2., 3.) si hay múltiples. No incluyas títulos descriptivos para cada guion como "Guion enfocado en el humor:" o "Versión A:". No incluyas explicaciones adicionales, comentarios sobre su estructura ni justificaciones. Simplemente muestra el/los guion(es) numerado(s), uno tras otro, sin texto explicativo antes, durante o después de cada uno.
|
| 107 |
+
|
| 108 |
+
Por ejemplo, si generas un solo guion:
|
| 109 |
+
|
| 110 |
+
1.
|
| 111 |
+
[Escena: Inicio dinámico con música en tendencia. Texto superpuesto: "¡No creerás esto!"]
|
| 112 |
+
Voz en off (energética): "¿Cansado de [problema común]? ¡Tengo LA solución en menos de 30 segundos!"
|
| 113 |
+
[Escena: Demostración rápida del tip o solución]
|
| 114 |
+
Voz en off: "Paso 1: Haz esto. Paso 2: Luego esto. ¡Así de fácil!"
|
| 115 |
+
[Escena: Resultado final o beneficio claro. Texto CTA: "¡Guarda y prueba!"]
|
| 116 |
+
Voz en off: "¡Inténtalo y cuéntame cómo te va! No olvides seguirme para más trucos."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
---
|
| 119 |
|
| 120 |
+
### 📏 4. VALIDACIÓN FINAL DEL GUIÓN
|
| 121 |
|
| 122 |
+
Antes de entregarlo, asegúrate de que el guion:
|
| 123 |
|
| 124 |
+
- Tiene un gancho (hook) potente en los primeros 3 segundos.
|
| 125 |
+
- Aborda un problema, necesidad o interés claro de la audiencia objetivo.
|
| 126 |
+
- Entrega valor, información útil o entretenimiento de forma concisa y directa.
|
| 127 |
+
- Tiene una llamada a la acción (CTA) clara y relevante (si el objetivo lo requiere).
|
| 128 |
+
- Es fácil de entender, visualmente imaginable y adecuado para el formato rápido de Reel.
|
| 129 |
+
- El tono es apropiado para la marca/usuario y la audiencia.
|
| 130 |
+
|
| 131 |
+
NO uses emojis excesivos en el guion final (a menos que el estilo del usuario lo requiera explícitamente), ni adornos innecesarios. Manténlo profesional (dentro del contexto de Reels), humano y directo.
|
| 132 |
+
"""
|
| 133 |
+
|
| 134 |
+
return prompt_base
|
| 135 |
|
| 136 |
+
# Si necesitas probar la función (esto no se ejecutará en producción normalmente):
|
| 137 |
+
# if __name__ == '__main__':
|
| 138 |
+
# prompt_para_reels = get_reels_script_prompt()
|
| 139 |
+
# print(prompt_para_reels)
|
| 140 |
|
|
|