# Auroflow API · Beta 1.0 Documentación **2026.11.01.3** · Contrato `auroflow/public-agent/v1`. **Empieza por [conectar tu agente](/connect-agent.md) y el [inicio rápido](/agent-quickstart.md).** La clave propia Bearer funciona también para cuentas con Google. Para buscar una operación, abre el [manual navegable](/docs). Instala sólo la receta elegida; sus referencias compartidas están incluidas. [Versiones y cambios](/agent-changelog.md). ## Gráficos, logos y rótulos con HyperFrames y Remotion Panel: https://auroflow.club/app#motion. Contrato y ejemplos: https://auroflow.club/motion-graphics.md. Usa `auroflow_capabilities {area:"motion"}`, `auroflow_list {kind:"sources"}`, `auroflow_plan_motion`, `auroflow_render_motion_zero` y `auroflow_get`. Compone gráficos independientes o sobre vídeos propios, con cola persistente y prioridad de cuenta. El render no cobra créditos AURO ni del proveedor; reutiliza audio grabado propio y no genera una locución nueva. El selector `engine:"remotion"` añade cinco presets de animación y exige su propia disponibilidad y licencia gratuita verificada; consulta `engines` y https://auroflow.club/remotion.md. Ambos motores comparten cola y permisos. Skill: https://auroflow.club/skills/auroflow-graphics-layers/SKILL.md (recetas `motion-graphics.md` y `remotion.md`). ## Conectar tu agente, también con una cuenta de Google Entra en [API y tokens](https://auroflow.club/app#developers) y activa una vez tu **token permanente de Auroflow**. También funciona con cuentas Google, sin crear una contraseña local. No caduca; puedes mostrarlo y copiarlo de nuevo desde el panel. Al **rotarlo**, el servidor invalida el anterior y emite uno nuevo en una transacción. Actualiza los agentes que utilizaban el anterior. Tu contraseña, sesiones, proyectos y claves temporales se conservan. El panel muestra el token sólo después de una acción explícita y lo borra de la vista al salir de la sección o cambiar de cuenta. No lo guarda en localStorage ni sessionStorage. El servidor conserva el digest y un identificador de rotación; reconstruye el secreto sólo para el titular mediante una derivación HMAC separada por usuario y credencial, con su clave privada del servicio. Nunca se incluye en assets públicos, documentación, URLs o logs. Guárdalo en el gestor de secretos como `AUROFLOW_API_TOKEN`. Es Bearer Auth para REST y MCP con los permisos, propiedad, saldo y política de acceso vigentes de la cuenta. Un token de agente no puede revelar, crear ni rotar credenciales. Las claves temporales opcionales siguen disponibles (7/30/90 días, muestra única). El límite es de 20 claves activas, contando la permanente. Cada cliente puede usar su propia clave temporal para revocarla independientemente. Contrato de gestión, sólo con sesión verificada + CSRF en POST o Basic del titular: `GET /v1/account-api-token` devuelve metadatos y `revision`, nunca el secreto. `POST /v1/account-api-token/show` con `{}` revela el actual, sin rotarlo. `POST /v1/account-api-token` con `{revision, operation_id}` activa o rota; `operation_id` son 32 hexadecimales guardados antes de enviar. Repetir exactamente la misma operación devuelve el mismo token; una revisión antigua da 409 y nunca invalida el nuevo. Tras una respuesta incierta, consulta metadatos y compara `last_operation_id` antes de confirmar la misma operación. Respuestas privadas `no-store`; sin permiso de gestión para Bearer. Una cuenta deshabilitada, revocada o no admitida pierde acceso aunque el token no tenga fecha de caducidad. Para clientes stdio usa el puente Python oficial: https://auroflow.club/skills/auroflow/scripts/auroflow_mcp.py (Python 3.9+, sin dependencias). El proceso lee `AUROFLOW_API_TOKEN` del entorno protegido y habla con `https://api.auroflow.club/v1/mcp`. Es excluyente con `AUROFLOW_API_EMAIL`/`AUROFLOW_API_PASSWORD` de Basic Auth. El puente no extrae sesiones del navegador, cambia Chrome, sigue redirecciones ni reintenta peticiones. Los clientes que sólo admiten OAuth necesitan una vía stdio o soporte para Bearer; este acceso no anuncia un servicio OAuth que no esté implementado. Las respuestas tools/call incluyen `structuredContent:{http_status,response}` y la misma información JSON en `content[].text`, para clientes anteriores. Lee `isError`, el HTTP interno y el estado del recurso. HTTP202 es aceptado; conserva el ID y consulta. Un timeout no autoriza volver a generar. Los errores incluyen si el resultado es incierto y la acción siguiente; el puente conserva 401/403, 429 y la referencia de soporte sin imprimir credenciales o páginas de error. El MCP y las claves de agente exigen 0 créditos adicionales de Auroflow, además del precio visible 0 de Flow. La cotización depende de la promoción y política viva de tu cuenta; si no es 0, el envío se rechaza con `platform_cost_not_zero` antes de reservar o generar. No se concede una promoción ni se cambia tu plan al conectar un agente. Las reservas, el aislamiento, la cola y la prioridad siguen en el servidor. El Chrome de Flow pertenece al servidor; tu agente no tiene que abrirlo. Base: `https://api.auroflow.club`. Cuenta: `https://auroflow.club/app`. La web y la API se sirven desde el mismo nodo. `https://auroflow.club` también sirve las mismas rutas `/v1/*`; conserva un único origen por sesión. Documentación completa en texto plano: `https://auroflow.club/llms-full.txt`. La API usa su propio contrato; no es una sustitución compatible de cualquier API de Google cambiando sólo una URL. ## Planificación y skills de producción La entrada breve es `auroflow_agent_start {}` (`GET /v1/agent-start`). Devuelve `response.start`, un contrato compacto sin IA, generación ni controles vivos. Continuar con `auroflow_capabilities {area:"film_studio"}`, cuenta propia y `auroflow_plan_workflow`. `auroflow_capabilities {area:"workflows"}` amplía el catálogo cuando se necesite. Está en [agent-workflows.json](https://auroflow.club/agent-workflows.json); la API ofrece `GET /v1/agent-workflows` y `POST /v1/agent-workflows/plan` autenticados. ```json {"id":"workflow-mi-spot","production_type":"spot","aspect":"9:16","target_duration_seconds":15,"ad_preset":"tiktok-in-feed","cost_max":0} ``` La respuesta contiene `plan`: fuentes de8s, recortes exactos a24fps, presupuesto de diálogo, lotes, continuidad, skill y orden de herramientas. Esta operación no descarga la URL, no consulta un modelo, no guarda un film y no genera ni reserva créditos. El tipo editorial admite `film`, `spot`, `documentary`, `series_episode` e `ingredients`; documental y serie no se envían como tipos inventados al director, que utiliza `film` o `spot`. `execution_ready` expresa límites estáticos, no autorización ni precio vivo. Los IDs futuros no son recursos observados. Si el máster está bloqueado, no empezar a generar sus capítulos por defecto. Cada toma real requiere cuenta y referencias propias, quote Auro0, preflight y precio Google visible0, Agent desactivado y un envío único. La recuperación conserva el mismo ID. Vertical es9:16 y horizontal16:9. Los Ads usan los presets vigentes del estudio; 15/30/60s son montajes, no duraciones nativas de una toma. El director acepta hasta12tomas por film. El acabado servidor admite50clips/600s; con fuentes de8s el máximo es400s. Sin acabado, el montaje básico admite100clips, hasta800s. Planes editoriales de hasta1200s declaran capítulos parciales y el bloqueo del máster cuando corresponda. La escucha automática admite hasta120s por revisión: las piezas mayores se revisan por secuencias parciales y empalmes, conservando sus hashes y la cobertura. Ninguna revisión parcial aprueba automáticamente el máster, y ASR no acredita timbre, acento ni aprobación humana. Las [cinco recetas de producción](https://auroflow.club/skills) cubren películas, Ads/producto, documental, Ingredients y series. En MCP, `resources/list` y `resources/read` exponen las skills y referencias de una allowlist estática; por ejemplo `auroflow://skills/auroflow-film-production` y `auroflow://skills/auroflow-film-production/references/payload-recipes.json`. Un agente con sólo MCP puede leer esas instrucciones sin navegar ni descargar archivos arbitrarios del servidor. El [manifiesto de skills](https://auroflow.club/skills/manifest.json) contiene paquetes ZIP completos con SHA-256, referencias y ejemplos. Instalar el paquete en la carpeta de skills que soporte cada agente; configurar las credenciales Auroflow por separado en su gestor seguro. El cliente Python añade `agent-start`, `films --limit 5`, `film ID`, `film-next ID`, `workflows` y `plan-workflow plan.json`. No necesita acceso a Chrome o Google del caller. Elegir una receta principal y leer sus referencias cuando hagan falta. ## Una película para un agente sin contexto previo La [skill de películas](https://auroflow.club/skills/auroflow-film-production/SKILL.md) y su [plantilla integral](https://auroflow.club/skills/auroflow-film-production/references/payload-recipes.json) incluyen una pieza de24s con tres tomas, un guion completo y el recorrido de revisión. `cold_start_complete_film` contiene placeholders `<…>` no enviables; reemplazarlos por IDs nuevos persistidos y datos observados y validar antes de enviar. Una plantilla o un ensayo offline no acredita generación ni coste vivo. | REST autenticado | MCP público | Objeto dentro de `response` | | --- | --- | --- | | `GET /v1/agent-start` | `auroflow_agent_start {}` | `start` | | `GET /v1/films?compact=1&limit=5` | `auroflow_list {kind:"films", limit:5}` | `projects` | | `GET /v1/films/{id}` | `auroflow_get {id}` | `project` completo | | `GET /v1/films/{id}/next` | `auroflow_get {view:"next", id}` | `next` | | `POST /v1/sequences/{id}/recover` | `auroflow_recover {id,cost_max:0}` | `sequence` | El listado sólo incluye films propios; `limit` admite enteros1–20. Sirve para retomar un proyecto observado, sin crearlo otra vez. `next` expone estado, revisión, intención compacta, `next_operation:{tool,arguments,read_only}`, `requires_input`, `polling` y `recovery`. No devuelve la fuente privada completa. La siguiente operación es orientación, con `render_authorized:false`, `live_gates_verified:false` y `human_approval:false`; no concede autorización ni confirma precio. Resolver las entradas pendientes y comprobar los gates antes de ejecutar una escritura sugerida. Una lectura sugerida sigue siendo una lectura. Respetar el intervalo y máximo de espera por ciclo de `polling`. El catálogo MCP admite `tools/list` con `{_meta:{"auroflow/toolset":"film"}}` para anunciar sólo el recorrido de películas. Sin filtro conserva el catálogo completo; el puente stdio ofrece `AUROFLOW_MCP_TOOLSET=film`. Para títulos, datos y capas editables usar `AUROFLOW_MCP_TOOLSET=graphics` o `_meta:{"auroflow/toolset":"graphics"}`; para otras operaciones pedir la vista `full`. Filtrar descubrimiento no cambia permisos, capacidades ni gates. Para elegir capas según la situación usar `auroflow_graphics_templates` (`POST /v1/graphics/templates`): lista compacta por `situation`, luego detalle por `template_id`, motor y aspecto. Son ocho recetas originales con procedencia, licencias y hashes; contienen bindings pendientes y no guardan ni renderizan. La [guía de plantillas](https://auroflow.club/skills/auroflow-graphics-layers/references/community-templates.md) separa estructura editorial de estilo visual. Continuar con `auroflow_capabilities {area:"graphics_styles"}`, seguido de `auroflow_suggest_graphics` con estilo, motor y plataforma de destino explícitos. `auroflow_review_graphics` (`POST /v1/graphics/review`) estima lectura, encaje, solapes y zonas seguras editoriales sobre la composición tipada: sin modelo, guardado, lectura de medios, comprobación factual ni render. La decisión de diseño y la revisión del MP4 real siguen siendo necesarias. La skill [auroflow-graphics-layers](https://auroflow.club/skills/auroflow-graphics-layers/SKILL.md) incluye dirección visual y recetas para rótulos, datos y mensajes. En el cliente Python: `graphics-styles`, `suggest-graphics SPEC.json` y `review-graphics SPEC.json`. Ediciones: parche pequeño con IDs de capa estables y revisión observada; vídeo y voz originales conservados. Para una producción nueva: persistir brief/ID → plan_workflow → plan_film con `engine:"codex-luna-medium"` y `auto_render:false` → next/film hasta draft_ready → revisar guion → guardar, si se edita, el objeto `script` completo con revisión observada → releer revisión nueva → render explícito una vez → next/film → secuencia → capas opcionales → ver y escuchar la entrega y revisar audio. Guardar exige `title`, `synopsis`, `character`, `continuity`, `shots`, y para cada toma `title`, `visual`, `dialogue`, `sound`. No enviar un parche parcial ni reutilizar para renderizar la revisión anterior al guardado. Las respuestas de film y revisión de audio están en `response.project`. El reparto se elige expresamente. `auto` crea referencia/voz/Character; `library` reutiliza el Character propio y su voz vinculada observados en el catálogo. Al seleccionar library después del borrador, `character` debe identificar al personaje observado; revisar los `visual` incompatibles para conservar su apariencia. Pronombres y tomas de recurso compatibles no exigen repetir el nombre. Si aparece `film_cast_script_review_required`, revisar sólo los campos visuales compatibles, guardar el guion completo conservando los diálogos y usar la revisión nueva. No inventar un UUID ni sustituir el personaje elegido para eludir el bloqueo. Ante timeout leer los mismos IDs antes de actuar. Para un error observado que requiera recuperación, guardar esa intención y usar `auroflow_resume_film` con revisión actual y coste0; sin `refresh_script` para una mera reconciliación. La recuperación del film conserva sus fuentes y montaje y recupera una dependencia existente una sola vez. Después de incertidumbre consultar; un404 no permite recrear un job o secuencia. Ni `next` ni `execution_ready` prueban autorización, propiedad de referencias o coste0 para todas las cuentas. ## Dirección visual y preparación de prompts Estas operaciones están disponibles por REST y MCP para la misma cuenta verificada, sin acceso de operador ni al navegador. Preparan texto de forma determinista: cero llamadas a modelos, generaciones o reservas de créditos. No autorizan un render ni sustituyen los controles vivos de cuenta y coste. | REST autenticado | MCP público | Resultado | | --- | --- | --- | | `GET /v1/video-guidance` | `auroflow_capabilities {area:"video_guidance"}` | Presets visuales y versión de las reglas de producción | | `POST /v1/video-prompts/prepare` | `auroflow_prepare_video_prompt` | Prompt original, preparado y recibo de transformaciones | | `GET /v1/graphics/styles` | `auroflow_capabilities {area:"graphics_styles"}` | Presets gráficos y directivas de diseño admitidas | | `POST /v1/graphics/templates` | `auroflow_graphics_templates` | Selección compacta de recetas por situación, detalle con bindings y procedencia; sin guardar ni renderizar | Elegir un preset observado o un `style` libre con acabado, luz, paleta y cámara. El texto libre se conserva como dirección; no implica interpretar o ejecutar cualquier instrucción. Para película o spot, pasar `style` a `auroflow_plan_film` / `POST /v1/films` —hasta 1000 caracteres—. Las producciones nuevas registran la política vigente en `visual_direction.policy_version_at_creation` y fijan `visual_direction.style_lock`, visibles en el mismo proyecto. El estilo se traslada a sus tomas nuevas; cada compilación nueva aplica las reglas activas y cada trabajo ya creado conserva su política original. Conservarlo con las referencias y la continuidad. El retrato y los ingredientes aprobados siguen gobernando la apariencia: un preset no transforma por sí solo una referencia ilustrada en una persona real. Para una toma manual, este es el argumento MCP de preparación: ```json { "request": { "prompt": "La presentadora abre un libro sobre la mesa y mira a cámara.", "style": "photoreal_editorial", "cost_max": 0 } } ``` REST recibe el objeto interior `request`. El helper admite `prompt` de hasta 12000 caracteres y `style` opcional de hasta 2000; `cost_max`, si se incluye, es el entero 0. Devuelve `source_prompt`, `prepared_prompt`, `style`, `visual_preparation` y `policy_version`. El recibo conserva SHA del original, del preparado y del estilo, además de cada sustitución. No guarda un job. Usar `prepared_prompt` en el `prompt` de la toma y el mismo estilo en `shot.style` para fijar también su recibo estructurado; la compilación real añade una vez el bloque obligatorio de reglas. Escribir los diálogos y la narración en sus campos literales, sin parafrasearlos. Las compilaciones nuevas sustituyen los patrones reconocidos de apertura de libros, carpetas o archivadores físicos y los gestos de pasar páginas por acciones estáticas que conservan el estado abierto/cerrado declarado, la ubicación y el apoyo del mismo objeto. Sin un estado explícito en el campo, mantienen el estado establecido; no inventan aperturas, cierres, mesas ni documentos. Conservar la intención con mirada, gesto sencillo o cámara y revisar `visual_preparation` antes del envío. Los campos de audio y los literales entre comillas se preservan; abrir una carpeta informática no es esa acción física. Las reglas orientan la producción, sin garantizar anatomía, física, voz o fidelidad del resultado. Tampoco convierten una URL en una fuente de instrucciones fiables. Los trabajos existentes conservan su política, prompts y huellas originales. Recuperar el mismo ID no migra su versión, cambia el guion ni reenvía Generate. Conservar versión, SHA y transformaciones junto al preflight de cada intención. Receta específica: [dirección visual](https://auroflow.club/skills/auroflow-film-production/references/visual-direction.md). El estilo de títulos e infografías se edita como otra pista; véase [capas gráficas](https://auroflow.club/graphics-layers.md). ## MCP para agentes Endpoint: `https://api.auroflow.club/v1/mcp` (Streamable HTTP, JSON-RPC sin sesión MCP persistente). Usa tu clave de agente por Bearer Auth o la misma cuenta verificada por Basic Auth que REST; no hay una clave compartida de administrador. Las herramientas conservan los permisos, el proyecto privado, la cola y la política de créditos de cada cuenta. El cliente HTTP debe admitir una cabecera Authorization configurada de forma segura. Los clientes que sólo admiten OAuth requieren soporte de cabeceras o un entorno capaz de ejecutar el puente stdio siguiente. Un conector remoto sólo OAuth sin ninguna de esas capacidades no es compatible actualmente. Para cualquier cliente con MCP por stdio, descarga `https://auroflow.club/skills/auroflow/scripts/auroflow_mcp.py` y configura: ```json {"mcpServers":{"auroflow":{"command":"python3","args":["/ruta/absoluta/auroflow_mcp.py"]}}} ``` Proporciona `AUROFLOW_API_TOKEN`, o `AUROFLOW_API_EMAIL` y `AUROFLOW_API_PASSWORD`, mediante el gestor de secretos o entorno protegido del cliente. Elige un solo método; las cuentas Google crean su clave en https://auroflow.club/app#developers. Python 3.9+, sin paquetes adicionales. El puente sólo usa HTTPS con validación TLS; no sigue redirecciones ni reintenta envíos. No escribas contraseñas en este JSON de ejemplo ni en prompts. Recorrido MCP: `auroflow_capabilities` → `auroflow_upload_reference` si hace falta → `auroflow_quote` → `auroflow_compile` → `auroflow_generate_zero` → `auroflow_get`. Guarda un ID `api-...` estable antes de generar. Si la respuesta es incierta, lee ese mismo ID; `auroflow_recover` recoge el trabajo existente. El servidor gestiona Chrome y Flow; los agentes no reciben controles del navegador. En AUROFLOW, web, REST y MCP público comparten la misma cola y el worker persistente conectado a la sesión administrada del servidor mediante Chrome DevTools MCP. Las operaciones nativas de Flow, incluidas imágenes, Characters y voces, siguen esa ruta; sin MCP conectado se bloquea el envío y se recupera el mismo ID. El guion, la planificación, el montaje `assembly:"local"`, el reencuadre y el acabado o revisión de audio son servicios del servidor y no necesitan Chrome. La recuperación de conexión es interna al servidor. El modo `managed_endpoint` usa un perfil permanente propio y un endpoint de depuración local; no cambia el acceso web/API/MCP público. No requiere instalar Chrome o DevTools MCP en el equipo del agente, abrir perfiles ni entregar credenciales Google o SSH. Los clientes no reciben ni deben exponer CDP. Una consulta de salud no crea otra conexión nativa ni rota procesos. **Reconectar no reenvía trabajos**: conservar intención, IDs y recibos; consultar el mismo recurso ante una respuesta incierta. El supervisor sólo puede recuperar su transporte con exclusión mutua, presupuesto acotado y barrera de ausencia de acciones activas o inciertas. Una sesión Google caducada sigue requiriendo atención y un transporte conectado no acredita cuenta/proyecto ni coste0. El estado vivo prevalece sobre esta guía; la instalación de una skill no acredita una prueba de reinicio de Windows. Consulta `auroflow_queue` para tu posición, espera estimada y prioridad de cuenta, y `auroflow_credits` para saldo, reservas y promoción. Web, REST y MCP usan la misma cola durable: prioridad asignada por el servidor, turnos entre cuentas de igual prioridad y orden de llegada dentro de cada cuenta. Un trabajo activo termina antes de dar paso al siguiente. No se puede elevar prioridad enviando un campo JSON o una cabecera. Los IDs de otras cuentas permanecen privados. `queue.account_policy` declara `service_tier` (standard, priority o managed), límite individual y que el cliente no selecciona la prioridad. La espera es aproximada y puede variar. El estado público `/service.json` es agregado. `account_check_required` conserva `ready:false` y pide comprobar la cuenta autenticada mediante `/v1/status`: una reserva histórica de otro proyecto no decide la disponibilidad de tu proyecto. Los bloqueos globales de saldo, navegador o mantenimiento siguen pausando el servicio. `auroflow_upload_reference` recibe PNG/JPEG/WebP en base64, hasta 10 MiB, y devuelve un `upload_id` privado. `ingredients` y `characters` aceptan imágenes aprobadas (máximo tres referencias entre ambos); `first_frame`/`last_frame` usan los slots Start/End. Un personaje visual conserva su imagen como Ingredient. Los personajes nativos y las voces guardadas se descubren mediante `auroflow_capabilities {area:"native_references"}` (REST `GET /v1/native-references`). El catálogo sólo incluye identidades que creaste o que fueron asignadas a tu proyecto; puede estar vacío o necesitar revalidación. Consultarlo no aprueba su uso ni verifica semejanza, identidad acústica o continuidad. Las recetas descargables de [Ingredients](https://auroflow.club/skills/auroflow-ingredients-video/SKILL.md), [producto](https://auroflow.club/skills/auroflow-film-production/references/product-video.md), [documental](https://auroflow.club/skills/auroflow-film-production/references/documentary.md) y [serie](https://auroflow.club/skills/auroflow-film-production/references/video-series.md) incluyen cada una su caso en `examples/`. Son plantillas reutilizables: resuelve los IDs de tu propia biblioteca y revisa capacidades/coste antes de cada envío. No son recibos de un render real ni una aprobación del contenido. Puedes crear y guardar tus propias voces y personajes desde **Personajes y voces** en `/app#library`, desde REST o desde el MCP. No necesitas que un operador registre sus IDs. Una cuenta registrada y verificada utiliza su biblioteca y proyecto privados, con el mismo plan y cola que sus vídeos. 1. Consulta `auroflow_capabilities {area:"voice_presets"}` (`GET /v1/native-voices/presets`). 2. Llama `auroflow_create_voice` (`POST /v1/native-voices`) con un ID estable `lib-...`, `display_name`, `base_voice`, `performance`, `sample_dialogue` literal, `approved: true` y `cost_max: 0`. El guardado no pulsa Sync ni pide una previsualización adicional. Se comprueba que el saldo no cambie. 3. Consulta `auroflow_get` (`GET /v1/native-operations/{id}`) hasta `state: completed`. Guarda `resource.flow_voice_id`. 4. Sube tu imagen con `auroflow_upload_reference` y conserva su `upload.id`. 5. Llama `auroflow_create_character` (`POST /v1/native-characters`) con otro `lib-...`, `display_name`, `image_upload_id`, `voice_id` de tu propia voz, `approved: true`, `cost_max: 0` e `info` opcional. 6. Espera a que termine y consulta `auroflow_capabilities {area:"native_references"}`. Utiliza los IDs y los **nombres exactos devueltos** al generar; Flow puede añadir un sufijo de aislamiento al nombre que escribiste. La web muestra el nombre sencillo. Para generar la referencia en el servidor, consulta primero `auroflow_capabilities {area:"image_engines"}` (`GET /v1/native-images/engines`). `auroflow_create_image` y su alias compatible `auroflow_create_character_image` aceptan `id`, `display_name`, `prompt`, `approved: true` y `cost_max: 0`. Omitir `engine` conserva Flow/Nano Banana y exige su preflight vivo de coste cero. El único agente externo ofrecido para imágenes es Codex Luna medio (`gpt-6-luna`/`medium`). Su motor de imagen opcional `codex-native-image` es un ID distinto de `codex-luna-medium`, usado por el director, y sólo se puede seleccionar cuando el catálogo declare `ready: true`: usa la cuota ordinaria de la suscripción ChatGPT existente, comprueba autenticación y cuota en cada operación y no utiliza Chrome, claves API, compras de créditos ni fallback de pago. Una aplicación instalada o una feature activada no demuestran que su proveedor exponga la herramienta de imagen. El catálogo puede mantener este motor deshabilitado tras una prueba inconclusa o sin PNG; entonces la API rechaza antes de admitir una generación. Consulta `response.operation` hasta su finalización y conserva `response.operation.resource.upload_id`, `sha256`, `size_bytes`, dimensiones e `image_url` privado. Ese upload se puede utilizar como `image_upload_id` en el paso 5; todavía no es un Character nativo ni su UUID. Las imágenes independientes comparten límites, propiedad y turnos de la cola con los vídeos, sin depender de la disponibilidad de Flow. Un resultado incierto se consulta o recupera con el mismo `lib-...`, sin crear otro intento. `approved: true` autoriza el uso de la referencia; no significa aprobación humana de un vídeo. Límites actuales: 100 voces y 100 personajes por cuenta, además del límite compartido de trabajos pendientes. No se permite registrar IDs de otra cuenta ni elegir un proyecto ajeno. El perfil de vídeo disponible sigue dependiendo de la sesión Google y de una cotización visible de 0. Cada guardado conserva ID, revisión y huella de su petición en SQLite. Repetir el mismo ID con el mismo contenido devuelve su estado; cambiar el contenido produce409. Si se pierde la respuesta, consulta ese ID. Para reconciliarlo usa `auroflow_recover` (`POST /v1/native-operations/{id}/recover`): no repite una subida o un guardado de voz ya despachados. La web conserva sólo el ID pendiente por cuenta y ofrece Consultar/Recuperar. No vuelvas a crear la misma referencia con un ID nuevo por un timeout. El ensayo de autoservicio del 18-10-2026 creó dos voces y dos personajes nativos con dos cuentas Auroflow normales y completó un vídeo de 8 s por cuenta. Uno recorrió MCP público; el otro ejecutó los formularios reales de la web contra HTTPS con sesión normal, empezando con la biblioteca vacía. Los cuatro guardados y ambos vídeos conservaron el saldo Google 25.050, con precio visible 0. La cuenta Google conectada tiene Ultra; no se verificó una cuenta Google sin suscripción. La prueba funcional de la web no incluye valoración visual del diseño ni aprobación humana de identidad vocal. Añadir otros recursos a tu biblioteca no invalida una toma en cola que conserva las mismas identidades. El adaptador MCP admite **un personaje nativo con su voz guardada incluida**. Usa el nombre y los dos IDs reales del catálogo, por ejemplo: ```json { "model": "Veo 3.1 - Lite [Lower Priority]", "mode": "ingredients", "duration_seconds": 8, "cost_max": 0, "characters": [{"flow_character_id": "UUID_DEL_PERSONAJE", "display_name": "NOMBRE_DEL_PERSONAJE", "role": "character", "approved": true}], "voices": [{"speaker": "NOMBRE_DEL_PERSONAJE", "description": "Conservar su voz guardada.", "flow_voice_id": "UUID_DE_SU_VOZ", "display_name": "NOMBRE_DE_SU_VOZ", "binding": "character", "character_id": "UUID_DEL_PERSONAJE", "approved": true}] } ``` Añade `id`, `prompt` y los demás campos de la toma. Puedes combinar el personaje con imágenes de entorno u objeto dentro del límite de tres referencias visuales. `binding: "character"` usa la voz ya incluida en el personaje; **no añade un segundo ingrediente de audio**. Flow permite un solo audio: adjuntar otra vez la misma voz por separado puede deshabilitarla. Los IDs deben pertenecer al catálogo de esa cuenta y coincidir entre sí. El servidor comprueba de nuevo el editor nativo, el UUID de voz, el nombre/retrato del selector y la vista previa final antes de enviar; un cambio de catálogo o una identidad ambigua bloquea. En las capacidades públicas, `native_characters.bound_character` y `native_voice_reference_implementation.bound_character` describen esta ruta implementada. `native_characters.unbound` y `native_voice_reference_implementation.standalone` siguen deshabilitadas. `implementation_scope` aclara el alcance y `requires_live_preflight` conserva la comprobación viva: `implemented:true` no promete precio cero ni todas las combinaciones probadas. `verified_profiles` mantiene la evidencia exacta. No sumes otro retrato o audio del mismo personaje: Character + producto + entorno son las tres referencias visuales completas, con una sola voz vinculada. El piloto real del **18-10-2026 completó tres tomas diferentes de 8 segundos** con Miga nativo y la misma voz guardada Alex mediante el MCP público, con una sesión Aurora `role=user`. Cada envío verificó **Veo Lite Lower Priority, Ingredients, 720p, 16:9, x1, Agent desactivado y coste Google exactamente 0**; el saldo Google permaneció 25.050→25.050. La sesión Google compartida tiene Ultra: este resultado no acredita gratuidad para todas las cuentas Google. La comparación automática de las tres voces con la muestra guardada dio similitudes coseno 0,824–0,854 y entre tomas 0,855–0,908. Es evidencia favorable de consistencia acústica, no una certificación humana de identidad o acento. Las palabras previstas se recuperaron por ASR; una discrepancia «no/nos» del modelo pequeño se resolvió con un segundo modelo sin texto de ayuda. El piloto también mostró subtítulos no solicitados en una toma, papeles dentro de una carpeta pedida vacía y variaciones de encuadre/distribución de la oficina. Cada película necesita revisión de imagen, diálogo, voz y cortes. No reemplazar una voz guardada por una descripción textual ni inferir aprobación de un ID. La voz guardada independiente sigue deshabilitada en el adaptador público; su contrato de descubrimiento anterior era de Omni, cuyo precio histórico observado de 8 s/720p/x1 fue **12 créditos Google**. Esos precios de Omni no se aplican automáticamente al personaje compuesto de Veo. En cualquier ruta, el envío exige coste visible exactamente 0 y Agent desactivado. Para una película, genera cada toma con su ID y usa `auroflow_compile_sequence`/`auroflow_create_sequence` con `assembly: "local"`, un ID `seq-...` y `clips` ordenados de variantes terminadas del mismo proyecto. Cada clip admite `trim_in`, `trim_out` y `mute_native`. El servidor exporta MP4 con FFmpeg y conserva hashes y procedencia; este modo no crea una Scene en Flow. `audio.mode: "native_scene"` conserva el audio de los clips; `hybrid_post` necesita una cama aprobada mediante `source_variant` y rango. No se regenera ninguna toma al montar. Consulta `auroflow_get` para el enlace de entrega. La aprobación humana de imagen y sonido se registra por separado. `generate_zero` exige precio visible de Google exactamente 0 y Agent desactivado. Eso no elimina la política de créditos de la plataforma Auroflow: consulta quote y tu cuenta. La disponibilidad depende de la sesión y del plan Google del servidor. Un cierre de sesión o reto de Google requiere mantenimiento del operador; el agente recibe un estado explícito y conserva sus IDs. ## Acceso Crea tu cuenta y verifica tu email en la web. Los clientes HTTP admiten la clave de agente por Bearer Auth o Basic Auth preemptivo sobre HTTPS con email y contraseña; la web usa una sesión segura. Guarda las credenciales en un gestor de secretos o en `AUROFLOW_API_EMAIL` y `AUROFLOW_API_PASSWORD`, nunca en prompts, URLs, JSON de vídeo o repositorios. No necesitas instalar Chrome, abrir Flow ni dar órdenes al ordenador servidor. El recorrido de alta es único: abre `https://auroflow.club/app?register=1`, crea la cuenta, verifica el enlace recibido por email, comprueba los 10 créditos iniciales y crea el primer vídeo. Si la cuenta ya existe, entra por `https://auroflow.club/app?login=1`; «Entrar» no crea una cuenta nueva. Identifica tu integración con `User-Agent: AUROFLOW-Client/1.0-beta.1` (o un nombre propio de cliente). El cliente Python descargable ya lo hace. El identificador genérico `Python-urllib/3.9` devuelve `403` / `error code: 1010` en la protección de Cloudflare, antes de llegar a la API; no es un fallo de contraseña ni motivo para reenviar un trabajo. Usa el cliente suministrado o configura esa cabecera en tu biblioteca HTTP. No desactives la verificación TLS. ## Si sólo tienes la URL, sin credenciales La landing, los vídeos de demostración, esta guía, /llms.txt, /llms-full.txt, la skill, el cliente y /openapi.json son públicos. Se leen sin cuenta y sin JavaScript. No contienen contraseñas ni autorizan generación. **Todos los usuarios deben registrarse y verificar su email para usar la API.** No hay generación, subidas, compilación ni biblioteca para invitados. El antiguo modo anónimo está desactivado; no llames a /v1/auth/guest ni intentes crear sesiones para eludir el registro. Si eres un agente sin credenciales, explica las capacidades y prepara el JSON localmente; dirige al usuario a https://auroflow.club/app?register=1. Una vez verificado, usa su clave propia de agente desde el almacén seguro. Basic Auth con email y contraseña propios sigue siendo una alternativa. Si tu entorno no dispone de herramientas HTTP/terminal, puedes preparar las llamadas, pero no ejecutarlas; no inventes respuestas ni resultados. La URL de acceso es https://auroflow.club/app?login=1. ## Ejemplo completo sin adivinar rutas El archivo https://auroflow.club/examples/text.json contiene este contrato mínimo. Cambia el ID por uno único antes del primer envío, guarda el JSON como shot.json y conserva ese archivo e ID durante todos los intentos de consultar ese trabajo. ```json { "id": "api-mi-primer-video-un-id-unico", "prompt": "Un faro al amanecer. Cámara lenta hacia delante, olas suaves, sin voces.", "operation": "generate", "mode": "text", "model": "Veo 3.1 - Lite [Lower Priority]", "aspect": "16:9", "duration_seconds": 6, "resolution": "720p", "audio": "native", "outputs": 1, "cost_max": 0, "agent_profile": {"mode": "disabled", "confirm_before_generate": true} } ``` Cliente: https://auroflow.club/skills/auroflow/scripts/auroflow.py. Configura AUROFLOW_API_EMAIL y AUROFLOW_API_PASSWORD mediante tu gestor de secretos, o deja que el cliente pida las credenciales en una terminal interactiva. No escribas la contraseña en el comando ni en shot.json. ```sh python3 auroflow.py status python3 auroflow.py credits python3 auroflow.py quote shot.json python3 auroflow.py compile shot.json # Sólo después de validar y de que el usuario haya pedido generar: python3 auroflow.py render shot.json --output video.mp4 # Si expiró la espera, continuar con el MISMO ID; no volver a render: python3 auroflow.py wait api-mi-primer-video-un-id-unico --output video.mp4 ``` Para HTTP directo, envía la misma autenticación Basic en cada llamada. Ejemplo no generativo: curl pide la contraseña sin mostrarla ni escribirla en el historial. ```sh curl --fail-with-body --user "tu@email.com" https://api.auroflow.club/v1/status ``` Campos de respuesta relevantes (no valores inventados): GET /v1/me devuelve account.assigned; GET /v1/status, generation.ready; GET /v1/credits, credits.available y credits.reserved; GET /v1/jobs/{id}, job.state, job.delivery.status y job.variants[].video_url. Descarga cada URL con la misma autenticación y en el mismo origen. POST /v1/jobs devuelve 202 y job.id. El historial privado está paginado: `GET /v1/jobs?offset=0&limit=20` devuelve `jobs` y `pagination` (`offset`, `limit`, `total`, `next_offset`). Máximo 40 registros y 2 MiB de proyección por página. Sigue `next_offset` hasta `null`; una página corta no significa fin del historial. Orden: más recientes primero. Los offsets pueden desplazarse si llegan trabajos nuevos: deduplica por `job.id`. Para seguir un vídeo conocido, consulta directamente `/v1/jobs/{id}`, sin escanear el historial. La web muestra páginas de 20; su búsqueda y filtros se aplican sólo a la página cargada, no a toda la biblioteca. Los errores JSON incluyen su código estable y la respuesta anuncia `X-Auro-Request-ID`, identificador aleatorio de diagnóstico. Al informar de un fallo, comparte código, ID de trabajo e ID de petición, nunca contraseña, cookies, cabecera Authorization ni el prompt privado. Las sesiones web usan CSRF estable entre pestañas sin ampliar su fecha de caducidad; una sesión antigua puede necesitar recargar una vez para adoptar ese token. La web revalida la cookie al volver a una pestaña y comunica entre pestañas sólo un aviso de cambio, nunca la contraseña, el token de sesión ni el CSRF. Si otra pestaña cierra sesión, los datos del panel se retiran y se vuelve a pedir acceso. Un `401 invalid_credentials` requiere revisar credenciales o usar recuperación de contraseña; un `503 maintenance` no significa contraseña incorrecta y no justifica cambiarla. El cliente Python muestra el `X-Auro-Request-ID` validado en los errores HTTP, sin imprimir el cuerpo privado de la respuesta. Si la interfaz indica `upload_identity_ambiguous` o `upload_operator_review_required`, una imagen puede haber llegado a Flow sin un identificador confirmado: conserva el mismo job ID y los upload IDs, y pide reconciliación al operador. No repitas la subida ni crees otro job automáticamente; `recover` sólo recoge resultados de render. La compilación contiene compiled.creative.render_blockers; la cotización, quote.render_blockers. Inspecciona el JSON, no sólo el código HTTP. El cliente status agrupa me bajo account y status bajo service; por eso su ruta de asignación es account.account.assigned. `generation.status` explica por qué no está listo: `account_pending` indica que falta un proyecto individual disponible (no que falten créditos); `recovery_required` indica un envío incierto en el proyecto asignado que debe recuperarse sin reenviar; `flow_balance_guard_blocked` es un control del saldo del proveedor, separado del saldo de Auroflow; `temporarily_unavailable` indica que la conexión de generación no pudo confirmarse. Un trabajo antiguo bloqueado y ya devuelto puede requerir atención en la biblioteca sin impedir un nuevo envío. `queue_accepting` significa `generation.ready=true`: otro trabajo ocupa Flow, pero la cola admite nuevas solicitudes. No implica que el render comience inmediatamente; consulta `/v1/queue` para posición y ETA. `ready_after_navigation` también admite el envío: el worker volverá al editor del proyecto asignado y verificará de nuevo cuenta, controles y coste cero antes de pulsar Generar. ## Precio 1 crédito = 60 segundos de vídeo generado, sumados entre todas las variantes. Una toma de 8 segundos cuesta 0,13333333 créditos; cinco tomas de 8 segundos suman 40 segundos y cuestan 0,66666667. Cuatro variantes de una toma de 8 segundos suman 32 segundos y cuestan 0,53333333. Cinco tomas de 8 segundos con cuatro variantes suman 160 segundos y cuestan 2,66666667. La contabilidad suma milisegundos generados y divide el total por 60.000; no redondea cada clip. El decimal periódico `0,13333333` de una toma de 8 s es exactamente `8 ÷ 60` mostrado a ocho decimales, no un cargo adicional. En el panel, los movimientos de trabajos indican también los segundos exactos. La cuenta verificada comienza con 10 créditos (10 minutos). `GET /v1/credits` informa saldo disponible, segundos disponibles y saldo reservado. `POST /v1/quote` valida la petición y muestra su reserva sin generar. Puede haber una promoción temporal sin descuento para los trabajos nuevos de todas las cuentas verificadas. Consulta `GET /service.json` (`pricing.promotion`) y `GET /v1/credits` (`credits.promotion`, `credits.unlimited`) antes de mostrar un precio. Durante la promoción, `/v1/quote` devuelve `credits: 0` y `standard_credits` conserva el coste ordinario de referencia. El saldo anterior y el historial no se modifican. La fecha de caducidad está en UTC; tras ella vuelve la tarifa ordinaria para los trabajos nuevos. La promoción no cambia los límites de cola ni la comprobación de coste cero del proveedor. La ampliación vigente cubre las cuentas registradas y verificadas hasta el **1 de enero de 2027 a las 00:00, hora de Madrid** (`2026-12-31T23:00:00Z`, límite exclusivo). Incluye cuentas nuevas verificadas durante la ventana. El acceso de visitantes conserva su límite diario propio. Los administradores y las cuentas con exención individual permanente reciben `credits.promotion.permanent: true`, `credits.unlimited: true` y `credits.promotion.expires_at: null`. La exención individual no modifica los permisos de la cuenta. Los clientes deben usar la política de `/v1/credits` para esa identidad; `/service.json` sólo publica la promoción general y nunca la lista de cuentas exentas. Los trabajos ya exentos conservan esa condición tras el vencimiento; las reservas anteriores mantienen su liquidación original. Se reserva la duración pedida al admitir el trabajo y se liquida con la duración medida de los vídeos completados, sin superar esa reserva. Los fallos verificados devuelven la reserva; un envío incierto permanece reservado hasta reconciliarse. Las diferencias pueden tardar unos segundos en aparecer. Compilar, subir imágenes, consultar o descargar no consume créditos. Estos créditos son de AUROFLOW; `cost_max: 0` es un control separado del proveedor y nunca debe aumentarse. Auroflow realiza esa comprobación en el servidor. El usuario no necesita una cuenta del proveedor ni abrir o gestionar Flow para usar la web o la API. ## Duración y cierre de la beta La fuente de verdad es `GET https://auroflow.club/service.json`. `expires_at` es nulo cuando el servicio no tiene fecha de cierre. La ampliación de gratuidad hasta enero no cierra la API: después termina la exención temporal de créditos, según `/v1/credits`, conservando el acceso autenticado. Si el operador configura una fecha de cierre de la beta, se expresa en UTC y `beta.timezone` lo confirma. Al vencer esa fecha de acceso, las operaciones de cuentas temporales bajo `/v1/*` responden `410 api_expired`. Las cuentas con exención permanente conservan acceso tras autenticarse; un cliente no puede obtener la exención enviando un rol ni mostrando un saldo elevado. El inicio de sesión y los medios privados del propietario, cuando están configurados, siguen disponibles. `/v1/status` devuelve `permanent_access: true` y `expires_at: null` para una identidad permanentemente exenta. Las páginas y documentos públicos continúan disponibles. El vencimiento no elimina automáticamente datos de cuenta, trabajos ni saldo Auroflow. Los avisos o cambios se publican en `/service.json` y en esta guía. No se promete aviso por email ni disponibilidad ininterrumpida durante la beta. ## Recorrido mínimo 1. `GET /v1/me`: comprueba `account.assigned`. Si falta capacidad, informa al usuario. 2. `GET /v1/status`: comprueba `generation.ready` y `generation.status`. Si aparece `flow_controls_unavailable`, Chrome está conectado pero la interfaz de Flow no permite verificar los controles de generación; espera a que el operador lo resuelva. No vuelvas a enviar un ID bloqueado sin revisar su estado durable. No interpretes todos los estados pausados como falta de créditos; tampoco pidas al usuario acceso remoto ni depuración. 3. `GET /v1/capabilities`: consulta las combinaciones aceptadas. Aceptación del esquema no prueba disponibilidad del modelo en vivo. 4. Diseña una toma y asigna un `id` único `api-...`; conserva el mismo JSON e ID. 5. `POST /v1/quote` y `/v1/compile`: corrige errores y `render_blockers`. 6. Si el usuario pidió generar, `POST /v1/jobs` con ese JSON. Devuelve `202` y `job.id`. El servidor hace la preparación y comprueba controles antes de enviar. El cliente no necesita pulsar botones, ejecutar comandos del servidor ni llamar a `/v1/preflight`; esta última es una herramienta de diagnóstico que modifica Flow. 7. Consulta `GET /v1/jobs/{id}` cada 5–15 segundos. Descarga los `video_url` del resultado con la misma autenticación. Una variante es un vídeo independiente. `delivery.status=processing` o `recovering` indican trabajo pendiente: esperar. Si hubo un envío incierto, el servidor busca y descarga el resultado existente automáticamente sin pulsar Generar otra vez. `delivery.next_attempt_at` indica cuándo reintentará la recogida; cerrar la web no detiene el trabajo. `delivery.status=ready` ofrece los vídeos verificados. Sólo si aparece `action_required` revisa el error y solicita `POST /v1/jobs/{id}/recover` con `{}` tras comprobar la situación: esa acción sólo recoge, nunca genera de nuevo. `failed` o `cancelled_verified` indican que no existe un MP4 confirmado; no reenvíes automáticamente. Un error de red en POST no prueba que no se aceptó: consulta el ID conocido. Un ID con contenido distinto devuelve `409`. La API garantiza persistencia y un estado explícito, no un MP4 imposible si Flow nunca llega a producirlo. `429` pide backoff 5, 10, 20, 40 segundos. Cada cuenta normal admite 100 trabajos pendientes; manda planos por lotes pequeños y libera capacidad al completarlos. `GET /v1/queue` indica para cada trabajo propio `position` (posición global), `ahead_jobs`, `ahead_accounts`, `estimated_wait_seconds` (hasta comenzar) y `estimated_completion_seconds`. `eta.status` explica si el cálculo usa duraciones observadas o si está pausado/sin historial; valores `null` no son un error. Las ETA son aproximadas y pueden variar si entran trabajos de mayor prioridad o Flow tarda más de lo habitual. ## Texto, tamaño, idioma y duración Descarga [text.json](https://api.auroflow.club/examples/text.json) como base. Usa `aspect: "16:9"` o `"9:16"`; el modelo Lite admite 4, 6 u 8 segundos en texto/Frames y 8 segundos en Ingredients. `outputs` es de 1 a 4. El servidor verifica la combinación en vivo y puede bloquearla si el proveedor la cambia. Describe sujeto, una acción, cámara, entorno, luz y sonido. Conserva el diálogo literal, indicando idioma; no inventes frases del usuario. Divide guiones largos en tomas, reutiliza referencias y espera a cada resultado. La generación de un clip no equivale a tener una película montada ni a revisión humana de su contenido. ## Imágenes, personajes y entornos `POST /v1/uploads?role=character&filename=hero.png` con bytes PNG y `Content-Type: image/png`; JPEG y WebP también admitidos, máximo 10 MiB. La respuesta es `{"upload":{"id":"img_...",...}}`. Usa sólo IDs observados de tu catálogo. Roles: `character`, `environment`, `asset`, `style`, `start`, `end`. El rol de uso puede declararse explícitamente en una referencia: `{"upload_id":"img_...","role":"asset","approved":true}` para un producto, o `role:"environment"` para un entorno. Esto también vale para una imagen privada de Nano Banana creada mediante `auroflow_create_image`, cuyo nombre no crea por sí solo un Character: la creación nativa es una operación distinta. El propósito se describe en el prompt y el rol; `purpose` no es un campo admitido por estas peticiones públicas. Conservar el upload y su SHA no aprueba la imagen ni el resultado audiovisual humano. Frames: añade `"first_frame":"img_..."` y opcionalmente `"last_frame":"img_..."`. Ambos deben tener la proporción de salida. Ingredients: añade `"characters":["img_..."]` y `"ingredients":["img_..."]`, máximo tres imágenes en total. Duración: 8 segundos. No mezcles Frames con Ingredients. Una imagen de personaje es una referencia visual, no un identificador nativo de Flow Character. Las cargas y compilaciones están implementadas; la generación multimedia depende de los controles vivos. No envíes rutas locales del servidor, cookies Google, `project_url`, `account_ref` ni `target_id`: el proyecto se asigna a tu cuenta. Para Extend, edición o montaje, consulta el OpenAPI y las capacidades; no presentes opciones sin validar como disponibles. ## Guion, voz en off y paisajes sonoros Un guion se divide en tomas de la duración permitida; no hay un campo que convierta por sí solo una película larga en un único render. Describe el paisaje sonoro en `prompt` y usa `narration` para preservar la voz literal. Ejemplo de campos adicionales para una toma de 8 segundos: ```json { "prompt": "Faro al amanecer. Cámara acercándose lentamente. Olas suaves y viento. Sin música.", "narration": [{ "speaker": "narrador", "text": "El viaje empieza aquí.", "language": "es-ES", "accent": "España", "delivery": "voz serena, natural", "start_seconds": 1, "end_seconds": 4 }] } ``` `dialogues` usa el mismo formato para frases de personajes. No se debe prometer clonación, voz idéntica entre tomas, pronunciación exacta o sincronía labial garantizadas. La presencia de una pista de audio no demuestra calidad editorial. Texto, Frames e Ingredients tienen pilotos completados. El piloto Ingredients del 19 de septiembre de 2026 generó y descargó un vídeo con dos imágenes (personaje y entorno), 8 segundos, 9:16, 720p y una salida en Veo 3.1 Lite [Lower Priority]. Flow mostró coste 0 y el saldo observado no cambió. Esto valida ese recorrido, no todas las combinaciones: tres referencias, múltiples salidas y otros perfiles necesitan sus propias pruebas. La revisión auditiva humana de ese piloto sigue pendiente. Cada nuevo envío vuelve a comprobar sus controles y coste; un piloto anterior no autoriza otro render. El montaje nativo sin recortes y la descarga mediante la extensión están verificados para la secuencia Nora: tres tomas, 24 segundos, 9:16 y 720p. La revisión humana de voces y cortes de audio sigue pendiente; los recortes y el mute nativos requieren controles verificables. Extend y edición permanecen bloqueados con `source_render_adapter_unverified`. En el piloto del 6 de octubre de 2026 se verificaron la preparación de Extend desde el clip Veo de 4 segundos, la reutilización exacta de su descarga y el compositor en español. Flow mostró coste 5 en esa inspección y faltó comprobar modelo y Agent; no se pulsó Generate. Esa observación corresponde al piloto, no a una tarifa universal. La API conserva `cost_max=0`; consulta `preparation_verification` y `render_verification` en las capacidades para distinguir la preparación acreditada del render pendiente. ## Skills y cliente La entrada corta de la skill está en `/SKILL.md`; la ruta compatible `/skills/auroflow/SKILL.md` sirve el mismo contenido y su cliente está en `/skills/auroflow/scripts/auroflow.py`. Para un agente sin soporte de skills, proporciona el enlace a `/llms.txt` y esta guía. No existe un mecanismo universal que instale skills en todos los LLM: se guarda en el directorio que use el agente. Ejemplos con el cliente (Python 3.9 o posterior, sin dependencias): ```sh python3 auroflow.py status python3 auroflow.py quote shot.json python3 auroflow.py compile shot.json python3 auroflow.py upload hero.png --role character python3 auroflow.py render shot.json --output video.mp4 python3 auroflow.py wait api-mi-video --output video.mp4 ``` No copies la contraseña en el comando: el cliente usa variables de entorno o la pide de forma oculta en una terminal interactiva. `render` envía una vez y espera. Si termina por timeout, continúa con `wait` y el mismo ID. ## Comunidad de creadores (miembros registrados) La sección **Comunidad** de `/app#community` muestra los trabajos anteriores y nuevos de las cuentas verificadas, con su autor, fecha, estado y variantes de vídeo disponibles. Requiere una cuenta verificada incluso para ver el listado o reproducir MP4. El prompt completo, email, saldo, referencias, proyecto Flow y detalle privado de `/v1/jobs/{id}` no se comparten. Los trabajos `blocked` se muestran con su estado, pero eso no los reintenta ni garantiza una entrega. - `GET /v1/social/me` devuelve tu perfil y tus publicaciones activas. El identificador público inicial no se deriva de tu email. - `POST /v1/social/profile` acepta exactamente `handle` (3–24 letras minúsculas, números o guiones), `display_name` (2–60 caracteres) y `bio` (hasta 280). - `GET /v1/social/creators?offset=0` lista hasta 40 perfiles de miembros verificados por página, también si todavía no tienen vídeos. Devuelve sólo alias, nombre visible y biografía; requiere autenticación. - `GET /v1/social/jobs?offset=0` devuelve hasta 40 trabajos saneados por página. Sigue `next_offset` hasta que sea `null`; no infieras fin de lista por recibir menos de 40, porque algunos registros heredados no tienen autor verificable. - `GET /v1/social/profiles/{handle}` muestra el perfil y `GET /v1/social/profiles/{handle}/jobs?offset=0` sus trabajos. - Cada variante terminada anuncia `url` en `videos[]`. La ruta `/v1/social/videos/jobs/{job_id}/variants/{ordinal}` permite `GET`, `HEAD` y `Range` a los miembros. No reutilices para ello la ruta privada del autor. - `GET /v1/social/feed?offset=0` conserva el feed de publicaciones con título y descripción opcionales creadas antes de este cambio. - `POST /v1/social/posts` con `{"job_id":"api-mi-video","variant":1, "title":"Mi título público","caption":"Descripción opcional"}` añade una ficha destacada opcional para una variante propia completada. No uses el prompt privado como título sin permiso. Esta acción no cambia la visibilidad automática del trabajo en `social/jobs`. - `POST /v1/social/posts/{post_id}/unpublish` retira sólo esa ficha opcional. No oculta el trabajo ni sus vídeos del listado de la comunidad. ## Montar, reencuadrar y terminar el audio en el servidor Abre `/app#films` en la web. Añade tomas terminadas de tu cuenta, ordena, recorta sus tiempos y activa «Reencuadrar» para introducir el rectángulo en píxeles. Elige igualar niveles y, si procede, suavizar ambiente. «Montar y terminar · 0 créditos» procesa el MP4 en Auroflow y devuelve su descarga privada. Puedes cerrar la web y consultar el mismo ID al volver; no necesitas Chrome, FFmpeg ni editar archivos en tu ordenador. Desde MCP utiliza `auroflow_compile_sequence` y `auroflow_create_sequence` con `assembly: "local"`, `cost_max: 0`, `audio.mode: "native_scene"`, un ID estable `seq-...` y las tomas/variantes reales de tu cuenta. El nombre `local` del contrato significa exportación FFmpeg en el servidor, sin SceneBuilder de Flow. No genera ni cobra otra vez las tomas fuente. ```json { "id": "seq-mi-pelicula-v1", "title": "Mi película", "assembly": "local", "aspect": "16:9", "cost_max": 0, "clips": [ {"job_id": "api-mi-toma", "variant": 1, "trim_in": 0, "trim_out": 8, "framing": {"crop": {"x": 312, "y": 48, "width": 688, "height": 387}}} ], "audio": {"mode": "native_scene"}, "finishing": {"audio_normalize": true, "target_lufs": -16, "true_peak_db": -2, "edge_fade_ms": 25, "seam_smoothing_ms": 250, "video_fade_ms": 120}, "speech_ranges": [{"start_seconds": 1, "end_seconds": 6.5}] } ``` Sustituye el ID fuente por uno observado. Los recortes deben quedar dentro de las dimensiones del vídeo; la salida se ajusta al formato720p/24fps sin estirar la imagen. Hasta50tomas/600segundos. No se admiten rutas de archivos ni filtros FFmpeg libres en estos parámetros. El consentimiento sobre las fuentes no es aprobación humana del resultado. `speech_ranges` son tiempos globales del montaje después de sus trims. El suavizado sólo atenúa el ambiente inicial de un corte si queda fuera de esos rangos. Sin rangos o si hay solapamiento, lo omite y lo documenta. La web protege toda la toma por defecto; ajusta primera/última palabra para permitir suavizado en sus márgenes. La nivelación y los fundidos no garantizan voz/acento perfectos. Para corregir una pausa entre frases, mide primero el final y el inicio de la voz y recorta únicamente márgenes sin habla. `clips[].tail_hold_seconds` admite de 0 a 3 segundos: mantiene el último fotograma de esa toma y añade silencio al final, sin estirar la voz ni separar su imagen del audio. Requiere `finishing`, `assembly: "local"`, `audio.mode: "native_scene"` y `cost_max: 0`; cuenta en la duración total y en los límites entre tomas. Los rangos de habla no pueden incluir ese silencio añadido. Para conservar la interpretación sin nivelación, usa `finishing.audio_normalize: false` y revisa el archivo resultante completo. Elige un nuevo ID para un montaje corregido y una nueva pista gráfica si cambia su vídeo base; las entregas anteriores conservan su historial. Consulta `auroflow_get` con el mismo ID hasta completed. `video_url` sirve el MP4 terminado con la autenticación habitual; `local_preview.finishing` conserva configuración, fuentes SHA, recortes, cambios aplicados/omitidos y análisis antes/después. Mantiene `human_audiovisual_approval: false`. Una alerta de audio requiere revisión, no regenerar automáticamente. Repetir la petición exacta devuelve el estado sin renderizar otra vez; cambiar sus ajustes con el mismo ID produce409. Los montajes anteriores mantienen su contrato y su SHA. Verificado el18-10-2026 con dos cuentas normales: montaje/descarga por MCP y envío desde el JavaScript publicado de la web con HTTPS real. Las pruebas incluyen repetición exacta sin nuevo render, conflicto por cambio del mismo ID y rechazo de fuentes/descargas ajenas. La prueba web ejecutó controles y envío; no certifica su disposición visual. El acabado preserva la voz original y no crea ni clona otra voz. Prueba adicional del18-10-2026: recorrido real en Chrome con una cuenta normal, desde cargar/ordenar/reencuadrar hasta montar, reproducir y descargar. El historial se carga al entrar directamente; los rangos protegidos predeterminados siguen los trims. Comprobadas vistas de390,500y1144píxeles CSS. La reproducción completa de21,5s mantuvo el audio activo, sin errores ni fotogramas perdidos; la captura de sonido del navegador conservó todas las palabras previstas. La descarga nativa coincide por SHA con el export. El cierre de sesión revoca el acceso y limpia los datos privados de la vista. Esto es verificación instrumental/ASR y visual; no una aprobación humana de voz/acento. ## URL2Short: página a short vertical con Flow Abre [URL2Short en tu panel](https://auroflow.club/app#url2short). El nodo lee el HTML público, extrae bloques de texto, imágenes (URL y alt) y tablas con filas, columnas y unidades, y prepara un guion editable. No ejecuta JavaScript, OCR ni análisis visual de las imágenes, no recorre enlaces y no accede a contenido privado. Lee como máximo 1 MB de HTML, 300 bloques y 64.000 caracteres de evidencia; las tablas admiten hasta 100 filas por 20 columnas. Si llega a un límite, muestra la fuente como incompleta. Una página larga se convierte en una selección editorial: el panel enseña los bloques utilizados por cada toma y los que quedan fuera. Este mapa no certifica hechos ni garantiza viralidad. Los nuevos URL2Short crean por defecto un protagonista original al generar: un retrato, una voz y un Character de Flow, una sola vez por short. Las tomas reutilizan ese mismo personaje y voz; no se genera un clip de casting separado. Antes de preparar el guion puedes elegir un personaje propio con su voz vinculada (`cast_mode:"library"`, `character_id`) o pedir recursos sin presentador (`cast_mode:"text"`). La elección queda fijada para ese guion; los borradores anteriores conservan su preferencia. Preparar no crea el personaje ni genera tomas. V1 usa exclusivamente Flow para vídeo y audio nativo; el montaje se calcula en el nodo. El guion se prepara con Codex Luna medio sobre la cuota de la suscripción existente, o con la IA local seleccionada. No usa claves de proveedores de pago, voz externa, ni el renderer JavaScript. Si falta el motor o su cuota, se detiene; no cambia a una API de pago. El Character y su voz vinculada reducen variación, pero no garantizan continuidad perceptual. Sin presentador ni voz vinculada, el timbre puede variar. Las cifras se comunican en la locución: Flow no garantiza tablas o rótulos exactos en la imagen. El plan nuevo conserva `url2short.editorial_plan` con gancho desde el primer segundo, desarrollo, revelación y cierre; y `url2short.continuity.bridges`, con estados `entry` y `exit` concretos. La entrada de cada toma copia la salida de la anterior. Son instrucciones de rodaje, no resultados observados. Ingredients permite reutilizar personaje, voz e imagen de referencia de la fuente, sin fijar el primer fotograma exacto. Cambiar los visuales invalida esos puentes automáticos: el render conserva tu guion editado. Sigue siendo necesario revisar cada empalme, la voz y el cumplimiento de la promesa inicial. No se garantiza retención o viralidad. La estructura toma como orientación las guías oficiales de [TikTok Creative Codes](https://ads.tiktok.com/business/en-US/creative-codes) y [YouTube Shorts](https://blog.youtube/creator-and-artist-stories/youtube-shorts-deep-dive/), consultadas el 01-11-2026; no son una certificación de rendimiento. El panel distingue tomas individuales y montaje completo. Durante la preparación muestra cuántas tomas están escritas y cuántas se han generado. Al terminar cada toma puedes verla y descargarla; el MP4 final une todas. Las descargas usan título, tipo, duración e identificador; la cabecera no impone `auro-video.mp4` ni otro nombre que sustituya el elegido por el enlace. Duraciones: 32, 48 o 56 segundos (4, 6 o 7 tomas de ocho segundos), siempre 9:16. Estructuras: `pregunta`, `mito`, `historia`, `comparacion`, `tres`, `dentro`, `escala`, `imposible`. Preparar no autoriza generar. Antes del render, revisa el guion literal, las cifras y las referencias. Sólo utiliza contenido e imágenes que puedas reutilizar. Las referencias PNG/JPEG/WebP seleccionadas se descargan en el nodo al generar, con DNS público fijado en cada salto, máximo 5 MB por imagen, y se importan de forma idempotente en tu cuenta; su SHA queda guardado. La API y el MCP conservan el contrato Film y sus IDs: ```json { "id": "film-short-mi-proyecto", "cost_max": 0, "workflow": "url2short", "source_url": "https://ejemplo.com/articulo", "short_recipe": "pregunta", "source_media_approved": true, "engine": "codex-luna-medium", "shots": 6, "aspect": "9:16", "cast_mode": "auto", "auto_render": false } ``` Guarda el ID y esta intención antes de `POST /v1/films` o `auroflow_plan_film {request: …}`. Consulta el mismo ID. Al terminar la preparación, `project.url2short` contiene `snapshot`, `coverage`, duración y motor Flow. `coverage.omitted_ids` identifica lo que queda fuera; `script_edited:true` exige revisar de nuevo el mapa tras una edición. Puedes guardar el guion con el endpoint Film habitual y su `revision`. Para generar expresamente: `POST /v1/films/{id}/render` con `{revision, cost_max:0, cast_mode:"auto"}` (o la elección guardada). Conserva coste vivo de Flow y plataforma exactamente 0, Agent desactivado, permisos, saldo y cola de la cuenta; no garantiza ausencia de consumo de la suscripción. Ante respuesta incierta, consulta el mismo ID y sus tomas, sin volver a generarlas. Lista compacta específica: `GET /v1/films?compact=1&limit=20&workflow=url2short`. Tu token de **Auroflow** está en [API y tokens](https://auroflow.club/app#developers): activar, mostrar y copiar de nuevo, comprobar MCP y rotar el token permanente. El servidor almacena el digest; la clave no se incrusta en el código publicado ni se guarda en localStorage. ## Películas y spots desde una URL o un resumen El estudio de `/app#director` prepara una sinopsis con IA y un guion editable de 1–12 tomas de 8 segundos, en vertical `9:16` u horizontal `16:9`. `GET /v1/film-studio` informa de los motores disponibles, `production_types`, `aspects`, `production_brief_limits` y los límites de `spot_cta`. El modelo privado del servidor no requiere una API de pago. Para nuevas producciones, Codex `gpt-6-luna` con razonamiento `medium` (`engine: "codex-luna-medium"`) es el único agente externo ofrecido. Antigravity está pausado para nuevas solicitudes; conserva su instalación y los proyectos y recibos históricos. `engine: "local"` queda para preparación local explícita; el modelo local de revisión de audio continúa disponible según sus capacidades. La instalación no acredita autenticación ni cuota; comprueba las capacidades actuales. No se cambia de agente ni a una API de pago al fallar una operación. Nano Banana 2.1 puede crear una referencia privada con coste visible 0; el servidor la guarda y crea el personaje y su voz. También puedes usar un Character y su voz de tu biblioteca privada. 1. `POST /v1/films`: `id: film-…`, `cost_max: 0` y exactamente uno de `source_url` o `summary`. Elegir `engine: "codex-luna-medium"` para nuevas producciones; si se omite en un ID nuevo se aplica Codex. Los IDs existentes conservan su motor guardado, incluido el legado local. `local` sólo para preparación local explícita. Opcionales: `shots`, `aspect`, `style`, `language`, `dialogue_literals` (una cadena por toma, vacía si no hay diálogo), `production_type`, `objective`, `audience`, `call_to_action` y `character_direction`. Los diálogos fijados se conservan literalmente aunque el modelo los parafrasee. Sin `auto_render:true`, devuelve un borrador en cola. Con ese campo autoriza la cadena completa descrita en «Una película completa desde una URL». 2. `GET /v1/films/{id}/next`: orientación compacta sin ejecutar. `GET /v1/films/{id}` devuelve el proyecto completo. Cuando `state=draft_ready`, revisa `ai_summary`, `source`, `script` y los recibos del modelo. 3. `POST /v1/films/{id}/script`: guarda `{revision, cost_max:0, script}`. Un cambio concurrente devuelve409. Puedes editar las líneas propuestas por IA; los `dialogue_literals` y la CTA explícita de un spot permanecen fijados. 4. `POST /v1/films/{id}/render`: acción explícita `{revision, cost_max:0, cast_mode?, character_id?, voice_id?, voice_preset?, voice_performance?}`. Se comprueba propiedad del personaje/voz y coste cero de plataforma y Google. Cada toma conserva un ID estable y usa la cola común. El montaje final y la nivelación se hacen en el servidor. Consulta el mismo proyecto tras una respuesta incierta; no abras otro proyecto para reenviar. La preparación tiene una cola propia durable:3 trabajos activos por cuenta,32 globales, prioridad protegida por el servidor y turnos entre cuentas de igual prioridad. La generación conserva las reglas de la cola compartida de vídeo. Se guardan hasta100 proyectos por cuenta. Las fuentes web se leen como datos, sin ejecutar sus instrucciones, sin sesiones privadas ni acceso a redes internas. Una página que no tenga texto público debe sustituirse por un resumen. Para crear un anuncio, elige `production_type: "spot"`; si se omite, se conserva el modo `film`. El brief se guarda y aparece en el proyecto: | Campo | Contenido | Límite | | --- | --- | --- | | `objective` | Qué debe conseguir el spot. | 500 caracteres | | `audience` | Público al que se dirige. | 500 caracteres | | `call_to_action` | Frase final que debe pronunciar el protagonista. | En spots: 120 caracteres y 18 palabras | | `character_direction` | Apariencia, vestuario y actitud de un protagonista original acorde con la web. | 1000 caracteres | El guion del spot plantea un gancho, un beneficio verificable en la fuente y una llamada a la acción. La IA recibe instrucciones de centrarse en el servicio y su utilidad, omitir recetas de integración o personajes de demostración y no inventar precios, descuentos, garantías, promociones o atributos. La dirección del personaje guía también su retrato con Nano Banana; no acredita una mascota oficial ni un embajador real. Revisa estas decisiones en el guion. En un spot, una `call_to_action` explícita se conserva literalmente como diálogo de la última toma. Aunque el campo genérico admite hasta 200 caracteres, se rechaza para spots con `spot_cta_too_long` si supera 120 caracteres o 18 palabras: no se trunca para hacerla caber. Si `dialogue_literals` fija un cierre distinto, la petición falla con `spot_cta_dialogue_conflict` antes de preparar el guion. Haz coincidir ambas frases o elige una única forma de fijar ese cierre. El mismo contrato se aplica al editar el borrador: cambiar una CTA fijada devuelve `spot_cta_dialogue_conflict`; cambiar otro diálogo de `dialogue_literals` devuelve `film_literal_dialogue_conflict`. El guion y su revisión no se modifican tras ese rechazo. Los diálogos que redactó la IA y que no estén fijados se pueden editar, respetando la duración de las tomas. ## Escucha de películas con un modelo de audio `POST /v1/film-reviews` recibe `{id:"review-…", sequence_id:"seq-…", cost_max:0}`. Sólo revisa una película terminada y propiedad de la cuenta. El servidor verifica la entrega, decodifica el audio completo y lo proporciona al modelo, sin sustituirlo por una transcripción. Consulta `GET /v1/film-reviews/{id}` para leer la valoración de voz, acento y continuidad, el SHA de entrada, modelo/revisión y recibo de coste0. El botón «Revisar voz y continuidad» está en los montajes del panel. La evaluación conserva su incertidumbre; no acredita una identidad de voz ni una aprobación humana. El límite de escucha completa es 120 segundos. La duración es medida por el servidor. El modelo puede discrepar sobre el número de voces y el acento: los campos `voice_continuity_verified` y `regional_accent_verified` permanecen en `false`; una valoración terminada no aprueba ni regenera el vídeo. Una negativa a escuchar, una plantilla, una descripción hipotética o una valoración que afirma voz hablada sin aportar palabras transcritas devuelve `state: "inconclusive"`, `perceptual_model_review: false` y `audio_assessment_quality: {usable:false, reason:…}`. Se conservan el texto de `assessment`, el recibo y sus SHA. Las respuestas históricas guardadas como `completed` que sean de ese tipo se muestran como inconclusas al consultarlas; la lectura no reescribe el registro histórico. `usable:true` sólo identifica observaciones candidatas con el contenido hablado solicitado, o una declaración explícita de ausencia de habla con observaciones sonoras. Una cita sobre el tono «alegre» o «femenino» no cuenta como transcripción. El control es textual: no demuestra escucha ni corrección, no acredita cobertura completa y no concede aprobación. La incertidumbre sobre el acento no invalida una transcripción. Con autorización para volver a revisar, usa `POST /v1/film-reviews/{id}/recover` con el mismo ID de revisión y el cuerpo `{"revision":4,"cost_max":0}`; reemplaza4 por su revisión observada. Por MCP: ```json { "review_id": "review-ejemplo-spot-001", "request": {"revision": 4, "cost_max": 0} } ``` Ese objeto corresponde a `auroflow_resume_audio_review`. Sólo admite una revisión propia `inconclusive` o `failed`. Cada autorización crea un único intento durable, conserva `audio_review_attempts` y reutiliza el WAV ya extraído en el servidor: sus bytes deben coincidir con el SHA de audio, la película guardada con su SHA y la secuencia actual terminada. No vuelve a generar vídeo, descargar la película ni ejecutar FFmpeg. Si faltan archivos o cambian sus SHA, se bloquea antes de inferir; no reconstruye la copia automáticamente. Consulta el mismo ID si la respuesta es incierta. Repetir la misma autorización no crea otro intento. Si el proceso se interrumpe durante la inferencia, el intento queda `unconfirmed` y requiere otra autorización explícita con la revisión nueva; no se repite solo. El límite es ocho intentos explícitos por revisión. El modelo recibe primero la orden de transcribir palabras oídas y marcar `[inaudible]`, después voz/acento/cortes/música. No recibe `expected_dialogue` como pista y no utiliza una API de pago. El MCP añade `auroflow_capabilities {area:"film_studio"}`, `auroflow_plan_film`, `auroflow_get`, `auroflow_save_film_script`, `auroflow_render_film_zero`, `auroflow_review_film_audio`, `auroflow_get` y `auroflow_resume_audio_review`; para seleccionar un acabado de la película, `auroflow_select_film_delivery`. Mantiene los controles de cuenta, revisión, coste e idempotencia de REST; nunca ofrece acceso al navegador, comandos ni rutas del servidor. Codex comprueba su cuota ordinaria antes de cada inferencia y se detiene al llegar al 90% de cualquier ventana o si no puede verificarla. No consume resets. Las cuotas de los agentes pertenecen a las cuentas conectadas del servidor y pueden agotarse; no se anuncian como inferencias ilimitadas. Prueba conectada del 18-10-2026: cuenta ordinaria, guion creado en el panel con Luna medio y diálogos fijos, tres tomas de Miga con Character y voz propios, montaje y acabado en AUROFLOW; saldo Auro10→10 y Google25.050→25.050. La entrega completada no equivale a aprobación humana de imagen o voz. ## Una película o un spot completo desde una URL El estudio (`/app#director`) permite pegar una página pública, elegir película o spot, formato vertical u horizontal y reparto. La creación completa encadena resumen, guion, reparto y voz, tomas y montaje con acabado de audio en el servidor. El cliente recibe una entrega privada sin manejar Chrome ni unir archivos. En modo automático, `cast_mode=auto` crea una imagen privada con Nano Banana 2.1, guarda una voz y un Character nativo y los reutiliza en todas las tomas. Ejemplo de cuerpo para `POST /v1/films`, o del campo `request` de `auroflow_plan_film` en el MCP público. Es una petición de ejemplo; el ID debe ser nuevo para cada proyecto autorizado: ```json { "id": "film-ejemplo-spot-auroflow-001", "source_url": "https://auroflow.club/", "production_type": "spot", "objective": "Presentar el estudio de spots desde una URL y animar a probarlo.", "audience": "Pequeños comercios y creadores que quieren presentar su proyecto.", "call_to_action": "Crea tu primer spot en Auroflow.", "character_direction": "Una directora adulta, creativa y cercana, con chaqueta azul y vestuario coherente con el aspecto de la web. Personaje original, sin logos ni texto.", "engine": "codex-luna-medium", "shots": 3, "aspect": "9:16", "style": "Animación 3D cálida y expresiva", "language": "Español de España", "auto_render": true, "cast_mode": "auto", "voice_preset": "Aoede", "voice_performance": "Voz femenina adulta, cálida y natural. Español de España. Misma interpretación en las tres tomas.", "cost_max": 0 } ``` `auto_render=true` autoriza expresamente la cadena completa de generación. Para preparar y editar sólo el guion, omite ese campo o usa `false`; después guarda el guion con su `revision` y llama a `auroflow_render_film_zero`. `cast_mode=library` y `character_id` reutilizan un personaje de tu biblioteca; `cast_mode=text` describe la identidad en el prompt. Con reparto automático, un `voice_id` propio reutiliza una voz existente; sin él se crea una voz con el preset y la interpretación elegidos. El ejemplo ya usa Codex Luna medio, único agente externo ofrecido para nuevas producciones. Elige un ID nuevo para un proyecto nuevo; no cambies el motor de una petición existente al recuperarla. Para un spot horizontal, elige `aspect: "16:9"`. Para reutilizar un personaje existente, selecciónalo en la biblioteca o envía `cast_mode: "library"` con su `character_id` observado. Se comprueba que el Character y su voz vinculada sean de la cuenta; no se sustituye su identidad por un retrato nuevo. Al comparar versiones de una URL, comprueba también `source.sha256`: una web puede cambiar entre dos lecturas y no constituir la misma fuente. Consulta `auroflow_get` con el mismo `film_id`. Los estados son `queued`, `writing`, `draft_ready`, `rendering`, `completed`, `failed` y `action_required`. `casting` muestra las operaciones de imagen, voz y personaje, y su `image_url` privada; `jobs` conserva los IDs de cada toma. Al terminar, `sequence_id` y `video_url` identifican el montaje. La consulta y la descarga requieren la misma cuenta. Usa la URL devuelta: no construyas rutas locales ni URLs de Flow. Si se interrumpe, `auroflow_resume_film` acepta `film_id` y `request` con `revision` observada y `cost_max:0`. Consulta y recupera los mismos IDs; no repite una generación que ya tenga intención de envío. Antes de enviar cualquier toma se puede usar `refresh_script:true` para volver a leer la fuente, conservando la identidad de una imagen ya creada. Si todavía no se ha creado la voz, se pueden corregir `voice_preset` y `voice_performance`. La web ofrece recuperación sobre el propio proyecto. También se puede crear sólo la imagen: `auroflow_create_image`, con `request` que contenga un `id` estable `lib-…`, `display_name`, `prompt`, `approved:true` y el entero `cost_max:0`. Consulta `auroflow_get`; al completar devuelve `resource.upload_id`, SHA, dimensiones y `image_url`. Ese `upload_id` se puede usar en `auroflow_create_character` con una voz propia. La imagen es privada y comparte cola y prioridad autenticadas con los otros recursos. Su recuperación utiliza `auroflow_recover` y nunca vuelve a enviar una generación ya despachada. Cada imagen comprueba físicamente proyecto/cuenta, Nano Banana 2.1, Imagen/1:1/x1, ausencia de referencias, Agent desactivado y coste visible exactamente 0. Cada vídeo vuelve a comprobar su propio perfil y coste; la cotización de Auroflow también debe ser 0. Una discrepancia bloquea el envío. El coste de las suscripciones del servidor y las condiciones futuras de la promoción son independientes de estos recibos de generación a 0. El flujo actual usa un protagonista nativo con su voz por película, hasta 12 tomas fuente de 8 segundos. Conserva las frases fijadas por el usuario y mantiene IDs de imagen y voz; no garantiza una identidad acústica, acento, factualidad o decorado perfectos. Revisa el guion y la entrega. La revisión de audio por modelo está disponible y conserva su incertidumbre; no concede aprobación humana. ## Ads con duración de entrega exacta El panel `/app#ads` tiene un brief propio de anuncios. Por REST/MCP se usa el mismo director de películas, con `production_type: "spot"`, `ad_preset` y `target_duration_seconds`. Consulta `GET /v1/film-studio` o `auroflow_capabilities {area:"film_studio"}`: `ads.presets` indica las combinaciones disponibles. | `ad_preset` | Duraciones de entrega | Aspectos disponibles | | --- | --- | --- | | `youtube-bumper` | 6 s | 16:9 | | `youtube-in-stream` | 15 / 30 / 60 s | 16:9 / 9:16 | | `youtube-shorts` | 15 / 30 / 60 s | 9:16 | | `facebook-feed` | 15 / 30 / 60 s | 16:9 | | `facebook-reels` | 15 / 30 / 60 s | 9:16 | | `instagram-reels` | 15 / 30 / 60 s | 9:16 | | `instagram-stories` | 15 s | 9:16 | | `tiktok-in-feed` | 15 / 30 / 60 s | 9:16 inicial / 16:9 | | `linkedin-feed` | 15 / 30 / 60 s | 16:9 inicial / 9:16 | | `x-vertical` | 15 / 30 / 60 s | 9:16 | Estos son los cortes disponibles en Auroflow. Los tiempos oficiales del formato se muestran por separado en el panel y en `ads.presets[].official_duration`, con fecha de comprobación, condiciones y enlaces de la plataforma. Comprobación de fuentes oficiales: **19 de octubre de 2026**. | Formato | Duración oficial | Recomendación o condición | | --- | --- | --- | | [YouTube bumper](https://support.google.com/google-ads/answer/2375464) | 5–6 s | Auroflow entrega 6 s. | | [YouTube in-stream saltable](https://support.google.com/google-ads/answer/2375464) | Sin máximo publicado para este formato | Google recomienda menos de 3 minutos. No se aplica al in-stream no saltable. | | [YouTube Shorts](https://support.google.com/google-ads/answer/16041697) | Archivo de hasta 3 minutos | Esta guía indica 60 s de reproducción en el feed y recomienda menos de 60 s; campañas de acción recomiendan 10–30 s. Comprueba el subtipo de campaña. | | [TikTok Non-Spark In-Feed](https://ads.tiktok.com/resources/help/article/tiktok-auction-in-feed-ads?lang=en) | Hasta 10 minutos | La guía consultada no publica un mínimo. Spark Ads usa otras condiciones. | | [LinkedIn Video Ads](https://www.linkedin.com/help/linkedin/answer/a424737/video-ads-advertising-specifications) | 3 s–30 minutos | Para feed/Audience Network recomienda 15–30 s. In-stream tiene otras especificaciones. | | [X Vertical Video Ads](https://business.x.com/en/products/vertical-video-ads) | Hasta 2 min 20 s | La página del producto recomienda 15 s y [Help](https://help.x.com/en/business-and-advertising/creative-ad-specifications) menos de 15 s; ambas recomendaciones se distinguen del límite. | | Facebook Feed / Reels e Instagram Reels / Stories | Límite oficial pendiente de confirmar | Las guías de Meta exigieron acceso durante esta comprobación. No se presenta un límite desconocido como ilimitado; consulta la [guía del destino](https://www.facebook.com/business/ads-guide). | Estos límites no habilitan automáticamente duraciones adicionales en Auroflow ni garantizan la aceptación de una campaña. La API diferencia un límite numérico, un límite del archivo subido, un formato sin máximo publicado y un dato no confirmado. `platform_maximum_seconds` sólo contiene un máximo numérico del formato; para interpretar ausencias consulta siempre `official_duration`. La exportación actual admite 720p en 16:9 y 9:16; no ofrece formatos 1:1 ni 4:5. [TikTok Non-Spark In-Feed](https://ads.tiktok.com/resources/help/article/tiktok-auction-in-feed-ads?lang=en) admite ambas resoluciones actuales, con vertical como elección inicial en Auroflow. [LinkedIn Video Ads](https://www.linkedin.com/help/linkedin/answer/a424737/video-ads-advertising-specifications) admite horizontal y vertical; recomienda 15–30 segundos, y 60 es una opción editorial. [X Vertical Video Ads](https://business.x.com/en/products/vertical-video-ads) ofrece aquí 9:16, con 15 segundos iniciales. Estos presets preparan archivos; no conectan cuentas publicitarias ni publican campañas. Comprueba peso, bitrate, audio, zona segura y previsualización en el destino antes de publicar. No se ha realizado una subida de prueba a sus gestores de anuncios. Ejemplo para preparar un borrador de 15 segundos, sin generar todavía: ```json { "id": "film-ejemplo-ad-15-001", "production_type": "spot", "ad_preset": "instagram-reels", "target_duration_seconds": 15, "source_url": "https://auroflow.club/", "objective": "Mostrar cómo preparar un spot desde una URL.", "audience": "Pequeños comercios", "call_to_action": "Crea tu primer spot en Auroflow.", "aspect": "9:16", "engine": "codex-luna-medium", "auto_render": false, "cost_max": 0 } ``` El servidor calcula las tomas; omite `shots` o envía exactamente ese cálculo. 6s usa una toma fuente de 8s conservando 0–6. 15s usa dos tomas conservando 0–7,5 en cada una; 30s usa cuatro y 60s ocho. Los originales de 8s se conservan. `delivery_plan` muestra cada segmento, su ventana de habla prevista y sus límites. Para 6s son 10 palabras/70 caracteres; para segmentos de 7,5s son 13 palabras/91 caracteres. La CTA se conserva literal como último diálogo. Si no cabe, la petición o el guardado se rechaza antes de generar: el servidor no acelera el audio ni corta el texto para hacerlo encajar. La ventana declarada es una instrucción de producción, no una medición del habla resultante. `speech_timing_verified:false` y `review_required:true` permanecen explícitos. Revisa el vídeo y su audio completos, en especial la CTA y los cortes; el modelo puede exceder un tiempo aunque el texto sea breve. La revisión de audio por modelo no equivale a aprobación humana ni publicación automática. El montaje comprueba su duración final antes de marcar el anuncio terminado. Las mismas comprobaciones de coste 0, propiedad, revisión y recuperación de IDs siguen vigentes. Un proyecto antiguo sin `ad_preset` ni `target_duration_seconds` conserva su montaje de ocho segundos por toma. Nunca se reinterpretan sus duraciones ni se reenvían sus tomas al abrirlo desde Ads. ## Elegir un reencuadre o acabado como entrega de la película Tras terminar un montaje con las herramientas de reencuadre y acabado del servidor, puedes seleccionarlo como entrega del proyecto desde la web, REST o MCP. `POST /v1/films/{id}/delivery` recibe `revision`, `sequence_id` y el entero `cost_max:0`. Por MCP usa `auroflow_select_film_delivery`, por ejemplo: ```json { "film_id": "film-ejemplo-spot-auroflow-001", "request": { "revision": 18, "sequence_id": "seq-ejemplo-spot-acabado-001", "cost_max": 0 } } ``` Sustituye esos IDs y la revisión por los observados en tu cuenta. La película debe estar terminada y la secuencia seleccionada debe ser propia, completada y tener vídeo privado disponible con SHA. Sólo se admite un acabado local del servidor que conserve exactamente los jobs originales y su orden, variante 1, sus trims originales, aspecto, duración final y audio nativo. En películas anteriores los trims son 0–8; en Ads son los de `delivery_plan`. Puedes cambiar reencuadre, nivelación o fundidos; no sustituir tomas ni cambiar su duración mediante esta selección. No se recibe una URL de vídeo del cliente. La selección cambia `sequence_id`, `video_url` y `delivery_sha256` del proyecto. Conserva `original_sequence_id`, el historial `delivery_history` con IDs y SHA de origen/destino, y el guion, reparto y jobs originales. No genera ni vuelve a montar nada. Repetir la misma autorización no añade otra entrada ni cambia de nuevo la entrega; elegir otra secuencia con esa misma revisión devuelve 409. Usa la revisión actual para una nueva selección. El límite es 32 cambios por película; seleccionar la entrega que ya está activa no escribe un cambio. Una revisión de audio permanece ligada a su `sequence_id` y SHA originales. Seleccionar otra entrega no traslada aprobación ni revisión de la anterior. Si quieres evaluar el nuevo acabado, crea una revisión de audio para la secuencia actualmente seleccionada. El historial anterior sigue disponible. Para una referencia de continuidad extraída de un vídeo propio ya terminado, utiliza `auroflow_extract_reference_frame` o `POST /v1/native-reference-frames` con ID `lib-...` estable, SHA fuente, variante y número exacto de fotograma. La operación no genera ni infiere: crea un upload privado en el servidor a coste cero y conserva procedencia. Se puede añadir como entorno de Ingredients con el mismo Character y voz. Esto guía el estado del libro, fondo y encuadre; requiere revisión visual y no implica el modo Frames con voz nativa ni una aprobación. ## Capas gráficas editables Guarda títulos e infografías como una pista versionada separada del vídeo. Cambiar un texto usa parches pequeños y compone desde las fuentes originales, sin regenerar Flow. Web: /app#motion; guía y herramientas MCP: [graphics-layers.md](https://auroflow.club/graphics-layers.md). Consulta la skill [auroflow-graphics-layers](https://auroflow.club/skills/auroflow-graphics-layers/SKILL.md) para decidir cuándo aportan valor, conservar planos limpios y evitar subtítulos automáticos o datos inventados. Límites actuales: 1–60 s por pista; MP4 opaco, sin exportación alfa. Guardar/editar no renderiza ni llama a modelos. `auroflow_capabilities {area:"graphics_styles"}` y `GET /v1/graphics/styles` publican los presets; `auroflow_suggest_graphics` acepta `style` y `style_prompt` con interpretación limitada y devuelve directivas no resueltas. Cambiar texto, color o animación usa un parche con revisión esperada, conservando vídeo y audio. ## Voces y locución independiente con Vids Para el recorrido conjunto de vídeo propio, locución y capas versionadas, consultar [narración y acabado](https://auroflow.club/production-finishing.md). `auroflow_capabilities {area:"production"}` distingue implementación, validación de runtime y disponibilidad de proveedores. `auroflow_plan_finishing` prepara un recorrido puro con la misma petición tipada que las capas gráficas. Un WAV `tts-` propio terminado se utiliza como `audio.source.kind:narration`, con comprobación de propietario y SHA. `audio.tracks` mezcla hasta ocho capas de música propia, locución y sonido de tomas con posición, recorte, volumen, fundidos y silencio. El audio explícito sustituye al de la base; inclúyelo como otra pista para conservarlo. Leer la [skill de montaje](https://auroflow.club/skills/auroflow-editing/SKILL.md), disponible también como recurso MCP con descubrimiento `editing`. Editar textos o mezcla conserva vídeo y voz. Para producir audio independiente, leer [la guía de audio](https://auroflow.club/audio-production.md) y la [skill de producción de audio](https://auroflow.club/skills/auroflow-audio-production/SKILL.md), publicadas en la versión `2026.10.24.5` del [manifiesto](https://auroflow.club/skills/manifest.json). El perfil MCP `audio` ofrece 14 herramientas; se descubre con `tools/list` y `params:{"_meta":{"auroflow/toolset":"audio"}}`. `auroflow_queue {}` incluye actividad propia de locución, música y medios nativos en `queue.auxiliary_items`. Sus contadores son `auxiliary_pending` y `auxiliary_attention_required`; posiciones y ETA permanecen sin confirmar. Una cola Flow vacía no implica audio terminado. Leer cola y el mismo trabajo no inicia ni recupera la síntesis. La música nativa de Vids tiene plan y generación propios: `auroflow_plan_music` y `auroflow_generate_music_zero`, con ID estable `mus-`, `approved:true` y `cost_max:0`. `duration_mode:clip` utiliza Lyria 3 y `full_song`, Lyria 3.5; sus duraciones aproximadas son 30 y 180 segundos, no una duración exacta garantizada. Leer `features.vids_music` en las capacidades vivas antes de enviar: la disponibilidad del proveedor puede cambiar. Este recorrido es distinto del proveedor Flow Music. Para una mezcla WAV independiente usar `auroflow_plan_audio_mix` y `auroflow_create_audio_mix`: fuentes propias terminadas `narration` y `music`, ID `mix-` persistido, hasta ocho pistas y `cost_max:0`. La mezcla no sintetiza ni modifica los WAV fuente. Consultar o recuperar el mismo trabajo con `auroflow_get` o `auroflow_recover`; conservar SHA y bytes. La [galería de voces](https://auroflow.club/voces) compara 37 identidades nativas con la misma frase en español, reproducción y descarga WAV. Escuchar las muestras existentes no genera trabajos. Consulta la [referencia de voces](https://auroflow.club/skills/auroflow-audio-production/references/vids-voices.md) o el [contrato completo de voces](https://auroflow.club/vids-voices.md). Los tools públicos `auroflow_capabilities {area:"vids_voices"}`, `auroflow_plan_narration`, `auroflow_generate_narration_zero`, `auroflow_get`, `auroflow_list {kind:"narrations"}` y `auroflow_recover` están disponibles en `audio`, `full` y `film`. Cada usuario utiliza su propia credencial. Las locuciones nuevas y sus WAV son privados, con ID estable `tts-`, texto literal de hasta 2400 caracteres y `cost_max: 0`. La autorización del usuario se declara con `approved: true` al generar; un plan no autoriza ni comprueba el precio vivo. El envío exige la misma cuenta incluida de Vids y coste vivo 0 créditos Google, 0 créditos Auroflow y 0 dinero. No se permiten compras, recargas ni alternativas de pago. Cada trabajo crea un Vids vacío independiente y exporta el MP4 nativo una sola vez para derivar PCM WAV, comprobar duración e integridad y servir la descarga autenticada. Hay un límite de 3 trabajos pendientes y 40 locuciones por cuenta en 24 horas. Un trabajo incierto se consulta o recupera con el mismo ID; la recuperación no sintetiza. Si falló la primera preparación antes de enviar, usa `auroflow_recover {id,action:"resume_preparation",cost_max:0}` con el mismo ID `tts-` de locución o `mus-` de música. Exigen prueba nativa de la misma intención, cuenta y documento, sin submit, ACK ni resultado incierto previo; datos desconocidos bloquean. La admisión en cola no acredita esa prueba. Tras incertidumbre consultar el mismo ID; no repetir ciegamente la reanudación. La recuperación ordinaria de voz y música sigue siendo solo recogida del envío original. La opción `experimental_spanish_spain` está desactivada por defecto. Añade `[español de España]` al final del guion manteniendo la voz, pero podría ignorarse o pronunciarse literalmente. El catálogo observado no certifica el acento regional: hay que escuchar cada resultado antes de aprobarlo. ## Medios nativos adicionales Para vídeo nativo de Vids y NotebookLM, consulta [el contrato de medios nativos](https://auroflow.club/native-media.md) y `auroflow_capabilities {area:"native_media"}`. Flow Music sigue bloqueado si su precio nativo no acredita 0 créditos; sus créditos incluidos no se convierten en coste cero. Usa IDs `nm-`, la misma cuenta y recuperación sin reenvío.