SkillHub

morfeo-ugc-engine

v1.0.0

为阿根廷品牌全流程生成管理UGC视频,从脚本到社媒发布,支持手动控制与日志。

Sourced from ClawHub, Authored by Paul de Lavallaz

Installation

Please help me install the skill `morfeo-ugc-engine` from SkillHub official store. npx skills add PauldeLavallaz/morfeo-ugc-engine

Morfeo UGC Engine Skill

Sistema autónomo de generación de videos UGC para marcas argentinas. Genera contenido TikTok/Instagram que parece orgánico pero termina con un plot twist revelando que es IA de Morfeo Labs.

Cuándo usar esta skill

Cuando Paul pida: - "generá un video de [marca]" - "corré el pipeline" - "qué runs hay en curso" - "avanzá el run de [marca] al siguiente paso" - "mostrá el estado del engine" - "publicá el video de [run]" - Cualquier operación sobre el Morfeo UGC Engine


Configuración

API Local

  • Base URL: http://localhost:3336
  • Token: morfeo-admin-2026 (o $MORFEO_API_TOKEN)
  • Auth header: Authorization: Bearer morfeo-admin-2026
  • Project header: x-project-id: morfeo_labs

Proyectos disponibles

  • morfeo_labs — Pipeline principal (productos argentinos)
  • animado — Variante estilo animado

Paths clave

  • API: ~/clawd/projects/morfeo-engine/api/server.js
  • Pipeline: ~/clawd/projects/morfeo-content-engine/pipeline.py
  • Outputs: ~/clawd/projects/morfeo-content-engine/output/
  • PM2: morfeo-engine-api (puerto 3336)

Endpoints principales

BASE="http://localhost:3336"
TOKEN="morfeo-admin-2026"
H_AUTH="Authorization: Bearer $TOKEN"
H_PROJ="x-project-id: morfeo_labs"

Ver todos los runs

curl -s "$BASE/api/runs" -H "$H_AUTH" -H "$H_PROJ" | python3 -c "
import json,sys
runs = json.load(sys.stdin)
for r in runs[:10]:
    print(f"{r['id']} | {r['stage']:12} | {r.get('brief',{}).get('marca_nombre','?') if r.get('brief') else '?'}")"
curl -s -X POST "$BASE/api/queue/add" 
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json" 
  -d '{"marca_id": null}'  # null = aleatoria

Crear run con marca específica

Primero obtener ID de la marca:

curl -s "$BASE/api/marcas" -H "$H_AUTH" -H "$H_PROJ" | python3 -c "
import json,sys
for m in json.load(sys.stdin):
    print(m['id'], m['nombre'])"

Luego crear run:

curl -s -X POST "$BASE/api/queue/add" 
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json" 
  -d "{"marca_id": "havanna"}"

Ver estado de un run

RUN_ID="20260307_190100"
curl -s "$BASE/api/runs/$RUN_ID" -H "$H_AUTH" -H "$H_PROJ" | python3 -c "
import json,sys
r = json.load(sys.stdin)
print('Stage:', r['stage'])
print('Status:', r['status'])
print('Marca:', r.get('brief',{}).get('marca_nombre','?') if r.get('brief') else '?')
print('Video:', r.get('video_url','ninguno'))"

Avanzar run a la siguiente etapa

curl -s -X POST "$BASE/api/runs/$RUN_ID/advance" 
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json"

Regenerar campo específico del guión

# campos: HOOK, STORY_1, STORY_2, PLOT_TWIST, CTA
curl -s -X POST "$BASE/api/runs/$RUN_ID/regen-guion-field" 
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json" 
  -d '{"field": "HOOK"}'

Seleccionar shots para el video (índices 0-9)

curl -s -X PUT "$BASE/api/runs/$RUN_ID/shots-selection" 
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json" 
  -d '{"shots": [0, 2, 4, 6, 8]}'

Publicar en redes (Postiz → borrador)

curl -s -X POST "$BASE/api/runs/$RUN_ID/publish" 
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json"

Ver log de ejecución

curl -s "$BASE/api/log?run_id=$RUN_ID" -H "$H_AUTH" -H "$H_PROJ"

Stages del pipeline

Stage Descripción
pending Esperando inicio
brief Guión generado ✓
portrait Personaje diseñado ✓
hero Escena Morpheus generada ✓
multishot 10 variaciones generadas ✓
video Video con lip-sync listo ✓
published Publicado en redes ✓

Flujo completo manual (modo supervisor)

1. Crear run con marca → POST /api/queue/add
2. Esperar brief (stage=brief) → ver guión y personaje
3. Si guión ok → POST /advance
4. Esperar portrait (stage=portrait) → ver imagen del personaje
5. Si personaje ok → POST /advance
6. Esperar hero (stage=hero) → ver escena Morpheus
7. Si escena ok → POST /advance
8. Esperar multishot (stage=multishot) → ver 10 shots
9. Seleccionar 5 mejores → PUT /shots-selection
10. POST /advance → genera videos con lip-sync
11. Esperar video (stage=video) → ver video final
12. Si ok → POST /publish → borrador en Postiz

Polling de un run en curso

import requests, time

BASE = "http://localhost:3336"
HEADERS = {
    "Authorization": "Bearer morfeo-admin-2026",
    "x-project-id": "morfeo_labs"
}

def poll_run(run_id, target_stage, timeout=600):
    """Espera hasta que el run llegue a target_stage."""
    start = time.time()
    while time.time() - start < timeout:
        r = requests.get(f"{BASE}/api/runs/{run_id}", headers=HEADERS).json()
        stage = r.get("stage", "")
        print(f"Stage: {stage}")
        if stage == target_stage or r.get("status") == "error":
            return r
        time.sleep(15)
    return None

Operaciones de diagnóstico

Verificar que la API está levantada

curl -s http://localhost:3336/api/runs -H "Authorization: Bearer morfeo-admin-2026" -H "x-project-id: morfeo_labs" | python3 -c "import json,sys; print(len(json.load(sys.stdin)), 'runs')"

Levantar API si está caída

cd ~/clawd/projects/morfeo-engine/api && pm2 restart morfeo-engine-api
# Si no existe: pm2 start server.js --name morfeo-engine-api

Ver logs en tiempo real

pm2 logs morfeo-engine-api --lines 50

Ver outputs del día

ls ~/clawd/projects/morfeo-content-engine/output/ | sort -r | head -10

Marcas disponibles (pool principal)

Havanna, Bon o Bon, Topper, Mantecol, Stella Artois, Andes Origen, Quilmes, Fernet Branca, Yerba Taragüí, Dulce de Leche La Serenísima, Alfajores Terrabusi, CasanCrem, Freddo, Ketchup Heinz, Mayonesa Hellmann's, y ~20 más en ~/clawd/projects/morfeo-content-engine/pipeline.py (MARCAS_ARG).


Notas importantes

  • Postiz siempre a DRAFT — nunca publicar directo, verificar manualmente
  • El pipeline puede tardar 10-30 min por etapa (ComfyDeploy + VEED)
  • Los outputs se guardan en /output/YYYYMMDD_HHMMSS/
  • Para ver el video final: ~/clawd/projects/morfeo-content-engine/output/<run_id>/final_tg.mp4
  • El dashboard visual está en https://morfeo-engine-ui.vercel.app