FÁBRICA· Studio
DRY RUN
Conectando…

Plantillas

Elige un formato y mándalo a la cola de render con un clic.

Paso 1 · Tu presentador

Sube tu avatar y edítalo

Arrastra el video donde sales hablando. Le quitamos los silencios para que quede dinámico y luego lo mandas a editar: en automático (la IA arma el video) o con tu propio plan de escenas.

Suelta tu video / avatar aquí

o haz clic para elegir un archivo · MP4, MOV, WEBM o MKV · hasta 25 GB

Margen (aire alrededor de cada frase)
Recursos · Stock CC0 (Pixabay)

Buscador de B-rolls

Metraje de stock libre — uso comercial, sin atribución — para intercalar con tu avatar. Busca, elige uno y se fija como brollUrl del plan.

Paso 2 · Control total

Motor JSON

Renderiza cualquier ScenePlan: pega el plan, valida en vivo y mándalo a la cola. Tu avatar y el b-roll elegido se inyectan solos.

scene-plan.json arrastra un .json aquí · Tab indenta
Pega tu plan o arrastra un archivo .json
0 líneas · 0 caracteres

Renders

Los MP4 terminados quedan publicados en el bucket de Supabase.

Sistema

Ajustes

Credenciales del .env, API del worker y atajos. Aquí nunca se muestran valores reales.

v…

WORKER_TOKEN

Token que protege POST /render y GET /jobs. Se manda en el header x-worker-token. Este panel lo guarda solo en tu navegador (localStorage).

VOZ · ElevenLabs (tu credencial)

Tu API key de ElevenLabs para ponerle voz a los videos premium. Se guarda solo en tu navegador y se envía como x-elevenlabs-key. Cada usuario pone la suya (es la que se agota rápido).

Música de fondo (CC0)

Cama musical opcional bajo la voz de los videos premium (con ducking automático: la música se agacha cuando habla la voz). Pistas de dominio público CC0 (uso comercial sin atribución). Se guarda solo en tu navegador y se envía como x-music. Requiere la voz activada.

SUPABASE_URL / SUPABASE_ANON

Proyecto y anon key (publishable, no secreta) para subir los MP4 a Storage. El worker publica en renders/ dentro del bucket.

SUPABASE_BUCKET

Bucket de destino de los renders. Por defecto: fabrica-videos.

PORT

Puerto HTTP del worker (este panel). Desde v2 se define solo en el .env; el instalador respeta el que ya tengas.

DRY_RUN

Con DRY_RUN=1 se renderizan solo los frames 0–89 y se sube renders/test-<formato>.mp4: valida el pipeline completo en ~1 minuto.

RENDER_TIMEOUT_MIN

Tiempo máximo por render antes de matar el proceso (por defecto 30 min).

¿Dónde se cambian?

Edita el archivo en el VPS y reinicia el proceso para aplicar:

nano /opt/fabrica-videos/worker/.env
pm2 restart fabrica-worker --update-env

Cómo producir un video

1

Conecta tu token

Pulsa el candado de la barra superior y pega tu WORKER_TOKEN. Queda guardado solo en este navegador.

2

Renderiza

Elige una plantilla y pulsa Renderizar (o selecciónala y pulsa R). Para planes propios usa el Motor JSON.

3

Publica

En Renders ves el progreso en vivo; al terminar tienes preview, link público y descarga del MP4.

API del worker

EndpointAuthDescripción
GET/healthPúblicoEstado, versión, formatos y cola.
GET/formatsPúblicoFormatos disponibles con descripción y payload de ejemplo.
POST/renderx-worker-tokenEncola un render: {format, props?, plan?, jobId?}. En plan acepta un ScenePlan o un storyboard (se convierte solo). Responde 202 con el jobId.
GET/jobsx-worker-tokenLista de jobs (más reciente primero).
GET/jobs/<id>x-worker-tokenEstado de un job concreto (polling de n8n).
POST/jobs/clear-failedx-worker-tokenBorra de la cola los jobs con estado error/interrupted. Responde {removed:N}.
POST/avatarx-worker-tokenSube tu video por streaming (raw xhr.send(file) + X-Filename, o multipart) hasta 25 GB. ?cut=1&margin=0.2 corta silencios. Responde {avatarUrl}.
GET/uploads/<archivo>PúblicoSirve el avatar subido (con Range para seeking). Solo mp4/mov/webm/mkv validados.
POST/autox-worker-tokenReenvía {video_url} a n8n WF-02 para transcript + plan automático.

Ejemplo con curl

Atajos de teclado

R renderiza la plantilla seleccionada (o el plan en Motor JSON) 16 cambian de sección Esc cierra modales y la cola

Notas

· El worker renderiza 1 job a la vez; el resto espera en la cola (panel derecho).
· Con DRY_RUN=1 cada render produce un clip corto de prueba (frames 0–89).
· Si el worker se reinicia a mitad de un render, ese job queda marcado como interrumpido.