Install
openclaw skills install morfeo-content-pipelineClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
Autonomous pipeline generating TikTok videos simulating real Argentine brands with a final AI reveal by Morfeo Labs, posted as drafts 4 times daily.
openclaw skills install morfeo-content-pipelinePipeline autónomo que genera videos TikTok para Morfeo Labs. Cada video simula contenido orgánico de una marca argentina real, con un plot twist final que revela que fue creado con IA por Morfeo Labs.
Frecuencia: 4x/día — 11:00, 15:00, 19:00, 23:00 UTC
Proceso: PM2 (morfeo-content)
Proyecto: /home/ubuntu/clawd/projects/morfeo-content-engine/
Repo marcas: https://github.com/PauldeLavallaz/marcas-argentinas
Marca → Modelo → Hero Image → Multishot → Ver shots → Guión → VEED ×5 → ffmpeg → Postiz DRAFT
⚠️ El guión se escribe DESPUÉS de ver los shots — nunca antes. El diálogo debe describir lo que se ve realmente en cada imagen, no situaciones inventadas.
Lee de ~/clawd/projects/marcas-argentinas/marcas.json (34 marcas argentinas reales).
Cada entrada tiene: id, nombre, categoria, descripcion, imagen (path a imagen del producto).
Para agregar marca: subir imagen a images/, agregar entrada en marcas.json, hacer push.
Opción A — Catálogo (default):
~/clawd/models-catalog/catalog/catalog/images/model_XX.jpgbody_type (curvy, slim, athletic, etc.)Opción B — Portrait Generator (cuando el guión lo requiere):
0b82e690-9a08-4d1f-85f8-28849d16caa4imagen_1 = siempre vista frontal = correcta para model en MorpheusDeployment ID: 1e16994d-da67-4f30-9ade-250f964b2abc
Skill: morpheus-fashion-design@1.4.0
Inputs:
{
"product": "<URL pública imagen del producto>", # del repo marcas-argentinas
"model": "<URL pública imagen del modelo>", # catálogo o Portrait Generator
"brief_text": "...", # en INGLÉS — evita filtros de moderación de Gemini en español
"environment_pack": "...", # NUNCA "auto"
"time_weather_pack": "...",
"body_language_pack": "...",
"clothing_pack": "...",
}
Outputs — siempre 3:
grain_only=True)⚠️ No existe campo logo.
Deployment ID: 9ccbb29a-d982-48cc-a465-bae916f2c7fd
⚠️ Si los shots ya están en disco → NO volver a correr Multishot.
Este paso es crítico. El guión se escribe a partir de aquí.
# Descripción de cada shot antes de escribir el guión
prompt = "Describí en 1-2 oraciones qué se ve en esta imagen: qué hace el personaje, qué sostiene, dónde está, qué emoción tiene. Sé específico y literal."
Modelo: Gemini 2.5 Pro
Estructura — 5 escenas, una por shot:
| Escena | Shot | Función | Duración |
|---|---|---|---|
| HOOK | shot_1 | Engancha en el primer segundo | ≤ 10s |
| STORY_1 | shot_2 | Primer paso de la historia | ≤ 15s |
| STORY_2 | shot_3 | Sube la tensión / genera duda | ≤ 15s |
| PLOT_TWIST | shot_4 | Revela que es una IA de Morfeo Labs | ≤ 15s |
| CTA | shot_5 | Automatización de contenido + morfeolabs.com | ≤ 10s |
Contenido:
morfeolabs.comFormato:
[así], *así*, (así)Tono y lenguaje:
Si el guión no convence, identificar el problema específico:
Deployment ID: 627c8fb5-1285-4074-a17c-ae54f8a5b5c6
Reglas críticas:
ThreadPoolExecutor(max_workers=5)Voice IDs (ElevenLabs, argentino):
9rvdnhrYoXoUt4igKpBw (Mariana)PBi4M0xL4G7oVYxKgqww (Franco)⚠️ La voz DEBE coincidir con el género visible en los shots. Revisar el modelo antes de elegir voice_id — nunca asumir.
Robustez — crítico para producción:
generar_clip() tiene retry automático x3 — si un run se cancela, reintentamax_workers se lee del concurrency_limit real del deployment (actualmente 2)
627c8fb5) tiene concurrency_limit: 2 — solo 2 jobs simultáneosrun_timeout del deployment: 600s (fue subido de 300s)Root causes de fallas en producción:
| Problema | Causa raíz | Fix aplicado |
|---|---|---|
| Jobs cancelados | max_workers > concurrency_limit del deployment | workers = concurrency_limit (leído via API) |
| Clips corruptos (56KB) pasan como éxito | No se validaba tamaño post-descarga | Validar > 300KB, retry si no |
| Video final de 69s y trabado | ffmpeg concatenó clips corruptos sin detectarlos | Validación antes del concat |
Output API: data.files[] (NO data.images[])
Normalizar aspect ratio ANTES de concatenar:
ffmpeg -y -i clip.mp4 \
-vf "scale=736:1312:force_original_aspect_ratio=decrease,pad=736:1312:(ow-iw)/2:(oh-ih)/2" \
-c:v libx264 -c:a aac -ar 44100 norm_clip.mp4
Resolución estándar: 736×1312 (9:16 para TikTok/Reels)
⚠️ SIEMPRE publicar como DRAFT — nunca publicar directo
Si la API da SSL/503 → es caída temporal, reintentar en 5 minutos.
| Paso | Nombre | Deployment ID |
|---|---|---|
| 2b | Portrait Generator | 0b82e690-9a08-4d1f-85f8-28849d16caa4 |
| 3 | Morpheus Fashion Design | 1e16994d-da67-4f30-9ade-250f964b2abc |
| 4 | Multishot UGC | 9ccbb29a-d982-48cc-a465-bae916f2c7fd |
| 7 | VEED UGC | 627c8fb5-1285-4074-a17c-ae54f8a5b5c6 |
| Script | Uso |
|---|---|
pipeline.py | Pipeline completo end-to-end |
continue_run.py | Retomar desde Multishot (shots ya en disco) |
run_veed.py | Solo el paso VEED con shots pre-existentes |
| Error | Causa | Solución |
|---|---|---|
| Guión describe cosas que no se ven | Se escribió antes de generar los shots | Siempre analizar shots primero, guión después |
VEED no devolvió output | Parser buscaba data.images[] | Usar data.files[] |
| Clips desordenados | Descarga por orden de creación | Trackear run_id → escena por workflow_inputs.script |
| Aspect ratio roto en concat | ffmpeg sin normalizar | Normalizar a 736×1312 antes |
| Postiz SSL 503 | API caída temporalmente | Reintentar en 5 min |
VEED cancelled | Machine timeout | Aumentar run_timeout en deployment |
| Moderación Gemini en español | Palabras como "contextura robusta" | Escribir brief en inglés |