{
  "aboutHtml": "<p>FLUX Video Upscale es el flujo de superresolución de vídeo de Black Forest Labs impulsado por FLUX 3. Recibe un clip existente y devuelve un MP4 ampliado, trasladando al resultado el encuadre y el audio de origen. Una descripción opcional breve puede orientar el detalle visual mejorado. Sus dos modos ofrecen una elección significativa entre mantenerse cerca del aspecto suministrado y generar detalle de forma más agresiva, en lugar de tratar toda imagen más grande como una reconstrucción igualmente fiel.</p><h4>Elegir mejora precisa o creativa</h4><p>El ajuste de creatividad selecciona el modo. Un valor de 0 corresponde al perfil preciso y fiel al original: el fabricante lo recomienda cuando un rostro, producto o recurso de marca debe conservar su identidad. Un valor de 1 activa la mejora creativa del detalle y es el predeterminado. Puede restaurar o inventar texturas de forma más agresiva, lo que resulta útil para material generado, paisajes, multitudes o superficies cuyo detalle pueda desarrollarse creativamente.</p><p>El fabricante advierte expresamente de que la mejora creativa no preserva rostros y productos con el mismo rigor. Compruebe el rasgo que debe seguir siendo identificable: el aspecto facial, el contorno de un producto, las letras, un patrón de material o un logotipo. Una imagen que parece más nítida puede contener un detalle modificado o inventado. Para una demostración de producto, utilice el aspecto previsto del producto como criterio de revisión, en lugar de seleccionar una versión solo porque su textura sea más elaborada.</p><p>La instrucción opcional describe el contenido del clip para orientar la mejora; una descripción vacía solicita una ampliación neutra. Un encargo original de escena generada podría identificar un muro de piedra cubierto de musgo, luz diurna suave y una fina textura de hojas. Mantenga la redacción centrada en el material que se debe perfeccionar. Una petición de sustituir un objeto, reconstruir el escenario o cambiar el diálogo corresponde a una decisión de edición, mientras que este perfil conserva la pista de audio de origen.</p><h4>Escala y área de los fotogramas de salida</h4><p>El parámetro documentado upscale_factor va de 1.5 a 3, con 2 como valor predeterminado. Amplía la resolución de origen conservando la relación de aspecto. El factor seleccionado y las dimensiones de entrada determinan la salida prevista, por lo que un clip horizontal y una composición vertical deben planificarse a partir de sus fotogramas reales. Prepare el tamaño de visualización de destino antes de elegir cuánto conviene ampliar.</p><p>La especificación exacta limita cada fotograma de salida a 13.75 unidades de megapíxel del fabricante. Su documentación define una unidad de este tipo como 1 048 576 píxeles, lo que da un máximo de 14 417 920 píxeles, aproximadamente 14.4 millones. Esto explica la expresión redondeada de 14.4 megapíxeles en la guía. Por tanto, un original grande puede recibir menos ampliación que la solicitada por el factor. Compruebe las dimensiones entregadas, en lugar de asumir que una petición de 3× siempre triplica cada dimensión de origen.</p><p>El máximo publicado de resolución de origen es 2560×1440. Este flujo aumenta un original admisible hacia 4K y más allá; no acepta uno que ya sea mayor solo porque se desee una salida superior. Reduzca el tamaño o prepare una copia de trabajo adecuada antes de utilizar ese perfil documentado. Conserve la grabación original por separado para que la comparación final no se limite a un intermedio redimensionado.</p><h4>Preparar un original breve y legible</h4><p>Las indicaciones habituales de preparación del fabricante limitan los originales a veinte segundos y cincuenta MB. El clip se proporciona mediante una URL de vídeo o MP4 codificado. Su referencia exacta señala que se procesan los primeros veinte segundos: un pequeño exceso de duración puede procesarse solo hasta esa marca, mientras que un clip considerablemente más largo se rechaza. No se publica una tolerancia numérica. Recorte el segmento previsto a veinte segundos o menos, en lugar de depender de ese comportamiento de límite no especificado.</p><p>Elija la versión menos comprimida disponible. Los artefactos de compresión limitan la cantidad de detalle real que puede recuperar el ampliador, y la mejora creativa puede crear una textura plausible sin demostrar qué contenía la escena original. Complete la edición y el recorte previstos antes de ampliar el clip seleccionado. Un flujo original podría terminar primero un plano de producto, elegir el intervalo de acción útil y después ampliar esa selección definitiva, conservando el original sin modificar para compararlo.</p><p>El resultado conserva la pista de audio de origen. Examine su sincronización con la imagen, especialmente al principio y al final de un segmento seleccionado. El perfil documentado no ofrece un selector independiente de fotogramas por segundo, generación de diálogo nuevo ni controles de edición con referencias de imagen. Su finalidad es obtener un vídeo mayor con el tratamiento de detalle elegido, conservando el material temporal y sonoro del original dentro del segmento procesado.</p><h4>Conservar y comprobar el clip entregado</h4><p>El flujo del fabricante es asíncrono: una tarea enviada proporciona una identidad y una ubicación de estado, y su resultado completado contiene un enlace firmado de entrega del MP4. Ese enlace caduca después de aproximadamente una hora. Conserve el clip real, el original, el factor elegido, el modo de creatividad y la descripción del contenido, en lugar de depender de la ubicación temporal. Distinga un estado fallido o moderado de un vídeo completado.</p><p>Revise fotogramas individuales para comprobar rostros, marcas y cambios de superficie, y después vea la secuencia para comprobar continuidad, movimiento y alineación del audio. Las salidas precisas y creativas responden a necesidades visuales diferentes; el recurso útil es el clip ampliado que cumple el objetivo de fidelidad elegido al tamaño de visualización previsto. Una resolución mayor por sí sola no demuestra que se hayan mantenido correctos la identidad, las palabras o el detalle fino originales.</p>",
  "aboutText": "FLUX Video Upscale es el flujo de superresolución de vídeo de Black Forest Labs impulsado por FLUX 3. Recibe un clip existente y devuelve un MP4 ampliado, trasladando al resultado el encuadre y el audio de origen. Una descripción opcional breve puede orientar el detalle visual mejorado. Sus dos modos ofrecen una elección significativa entre mantenerse cerca del aspecto suministrado y generar detalle de forma más agresiva, en lugar de tratar toda imagen más grande como una reconstrucción igualmente fiel.\n\n### Elegir mejora precisa o creativa\n\nEl ajuste de creatividad selecciona el modo. Un valor de 0 corresponde al perfil preciso y fiel al original: el fabricante lo recomienda cuando un rostro, producto o recurso de marca debe conservar su identidad. Un valor de 1 activa la mejora creativa del detalle y es el predeterminado. Puede restaurar o inventar texturas de forma más agresiva, lo que resulta útil para material generado, paisajes, multitudes o superficies cuyo detalle pueda desarrollarse creativamente.\n\nEl fabricante advierte expresamente de que la mejora creativa no preserva rostros y productos con el mismo rigor. Compruebe el rasgo que debe seguir siendo identificable: el aspecto facial, el contorno de un producto, las letras, un patrón de material o un logotipo. Una imagen que parece más nítida puede contener un detalle modificado o inventado. Para una demostración de producto, utilice el aspecto previsto del producto como criterio de revisión, en lugar de seleccionar una versión solo porque su textura sea más elaborada.\n\nLa instrucción opcional describe el contenido del clip para orientar la mejora; una descripción vacía solicita una ampliación neutra. Un encargo original de escena generada podría identificar un muro de piedra cubierto de musgo, luz diurna suave y una fina textura de hojas. Mantenga la redacción centrada en el material que se debe perfeccionar. Una petición de sustituir un objeto, reconstruir el escenario o cambiar el diálogo corresponde a una decisión de edición, mientras que este perfil conserva la pista de audio de origen.\n\n### Escala y área de los fotogramas de salida\n\nEl parámetro documentado upscale_factor va de 1.5 a 3, con 2 como valor predeterminado. Amplía la resolución de origen conservando la relación de aspecto. El factor seleccionado y las dimensiones de entrada determinan la salida prevista, por lo que un clip horizontal y una composición vertical deben planificarse a partir de sus fotogramas reales. Prepare el tamaño de visualización de destino antes de elegir cuánto conviene ampliar.\n\nLa especificación exacta limita cada fotograma de salida a 13.75 unidades de megapíxel del fabricante. Su documentación define una unidad de este tipo como 1 048 576 píxeles, lo que da un máximo de 14 417 920 píxeles, aproximadamente 14.4 millones. Esto explica la expresión redondeada de 14.4 megapíxeles en la guía. Por tanto, un original grande puede recibir menos ampliación que la solicitada por el factor. Compruebe las dimensiones entregadas, en lugar de asumir que una petición de 3× siempre triplica cada dimensión de origen.\n\nEl máximo publicado de resolución de origen es 2560×1440. Este flujo aumenta un original admisible hacia 4K y más allá; no acepta uno que ya sea mayor solo porque se desee una salida superior. Reduzca el tamaño o prepare una copia de trabajo adecuada antes de utilizar ese perfil documentado. Conserve la grabación original por separado para que la comparación final no se limite a un intermedio redimensionado.\n\n### Preparar un original breve y legible\n\nLas indicaciones habituales de preparación del fabricante limitan los originales a veinte segundos y cincuenta MB. El clip se proporciona mediante una URL de vídeo o MP4 codificado. Su referencia exacta señala que se procesan los primeros veinte segundos: un pequeño exceso de duración puede procesarse solo hasta esa marca, mientras que un clip considerablemente más largo se rechaza. No se publica una tolerancia numérica. Recorte el segmento previsto a veinte segundos o menos, en lugar de depender de ese comportamiento de límite no especificado.\n\nElija la versión menos comprimida disponible. Los artefactos de compresión limitan la cantidad de detalle real que puede recuperar el ampliador, y la mejora creativa puede crear una textura plausible sin demostrar qué contenía la escena original. Complete la edición y el recorte previstos antes de ampliar el clip seleccionado. Un flujo original podría terminar primero un plano de producto, elegir el intervalo de acción útil y después ampliar esa selección definitiva, conservando el original sin modificar para compararlo.\n\nEl resultado conserva la pista de audio de origen. Examine su sincronización con la imagen, especialmente al principio y al final de un segmento seleccionado. El perfil documentado no ofrece un selector independiente de fotogramas por segundo, generación de diálogo nuevo ni controles de edición con referencias de imagen. Su finalidad es obtener un vídeo mayor con el tratamiento de detalle elegido, conservando el material temporal y sonoro del original dentro del segmento procesado.\n\n### Conservar y comprobar el clip entregado\n\nEl flujo del fabricante es asíncrono: una tarea enviada proporciona una identidad y una ubicación de estado, y su resultado completado contiene un enlace firmado de entrega del MP4. Ese enlace caduca después de aproximadamente una hora. Conserve el clip real, el original, el factor elegido, el modo de creatividad y la descripción del contenido, en lugar de depender de la ubicación temporal. Distinga un estado fallido o moderado de un vídeo completado.\n\nRevise fotogramas individuales para comprobar rostros, marcas y cambios de superficie, y después vea la secuencia para comprobar continuidad, movimiento y alineación del audio. Las salidas precisas y creativas responden a necesidades visuales diferentes; el recurso útil es el clip ampliado que cumple el objetivo de fidelidad elegido al tamaño de visualización previsto. Una resolución mayor por sí sola no demuestra que se hayan mantenido correctos la identidad, las palabras o el detalle fino originales.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "bd1e37bb81f46583cb0dba8b864e8c698a9820581ad0f19fd7b7e87b548d2a10",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "es",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Black Forest Labs: FLUX Video Upscale</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Cerrar\">×</button></div><div class=\"idline\"><span>Black Forest Labs /</span><code>black-forest-labs/flux-video-upscale</code><button type=\"button\" id=\"copy-id\">Copiar ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Secciones de la ficha del modelo\"><button type=\"button\" data-card-jump=\"overview\">Primeros pasos</button><button type=\"button\" data-card-jump=\"methods\">Entradas y métodos</button><button type=\"button\" data-card-jump=\"pricing\">Planes</button><button type=\"button\" data-card-jump=\"examples\">Ejemplos</button><button type=\"button\" data-card-jump=\"results\">Resultados</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Métodos de API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|black-forest-labs%2Fflux-video-upscale\">Vídeo</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Primeros pasos</h3><p class=\"mdesc-full\">FLUX Video Upscale amplía un clip existente mediante una mejora de detalle fiel al original o creativa. Su perfil documentado ofrece escalado de 1.5×–3×, conserva el audio y el encuadre de origen y limita la duración, la resolución de entrada y el área de los fotogramas de salida.</p><dl class=\"card-io\" data-card-io><div><dt>Entradas aceptadas</dt><dd>Texto · Imágenes · Audio · Vídeo</dd></div><div><dt>Resultados</dt><dd>Vídeo</dd></div></dl><details class=\"card-about\"><summary>Sobre el modelo</summary><p class=\"note-s\" data-model-method-boundary>Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.</p><div class=\"mabout\" id=\"m-about\"><p>FLUX Video Upscale es el flujo de superresolución de vídeo de Black Forest Labs impulsado por FLUX 3. Recibe un clip existente y devuelve un MP4 ampliado, trasladando al resultado el encuadre y el audio de origen. Una descripción opcional breve puede orientar el detalle visual mejorado. Sus dos modos ofrecen una elección significativa entre mantenerse cerca del aspecto suministrado y generar detalle de forma más agresiva, en lugar de tratar toda imagen más grande como una reconstrucción igualmente fiel.</p><h4>Elegir mejora precisa o creativa</h4><p>El ajuste de creatividad selecciona el modo. Un valor de 0 corresponde al perfil preciso y fiel al original: el fabricante lo recomienda cuando un rostro, producto o recurso de marca debe conservar su identidad. Un valor de 1 activa la mejora creativa del detalle y es el predeterminado. Puede restaurar o inventar texturas de forma más agresiva, lo que resulta útil para material generado, paisajes, multitudes o superficies cuyo detalle pueda desarrollarse creativamente.</p><p>El fabricante advierte expresamente de que la mejora creativa no preserva rostros y productos con el mismo rigor. Compruebe el rasgo que debe seguir siendo identificable: el aspecto facial, el contorno de un producto, las letras, un patrón de material o un logotipo. Una imagen que parece más nítida puede contener un detalle modificado o inventado. Para una demostración de producto, utilice el aspecto previsto del producto como criterio de revisión, en lugar de seleccionar una versión solo porque su textura sea más elaborada.</p><p>La instrucción opcional describe el contenido del clip para orientar la mejora; una descripción vacía solicita una ampliación neutra. Un encargo original de escena generada podría identificar un muro de piedra cubierto de musgo, luz diurna suave y una fina textura de hojas. Mantenga la redacción centrada en el material que se debe perfeccionar. Una petición de sustituir un objeto, reconstruir el escenario o cambiar el diálogo corresponde a una decisión de edición, mientras que este perfil conserva la pista de audio de origen.</p><h4>Escala y área de los fotogramas de salida</h4><p>El parámetro documentado upscale_factor va de 1.5 a 3, con 2 como valor predeterminado. Amplía la resolución de origen conservando la relación de aspecto. El factor seleccionado y las dimensiones de entrada determinan la salida prevista, por lo que un clip horizontal y una composición vertical deben planificarse a partir de sus fotogramas reales. Prepare el tamaño de visualización de destino antes de elegir cuánto conviene ampliar.</p><p>La especificación exacta limita cada fotograma de salida a 13.75 unidades de megapíxel del fabricante. Su documentación define una unidad de este tipo como 1 048 576 píxeles, lo que da un máximo de 14 417 920 píxeles, aproximadamente 14.4 millones. Esto explica la expresión redondeada de 14.4 megapíxeles en la guía. Por tanto, un original grande puede recibir menos ampliación que la solicitada por el factor. Compruebe las dimensiones entregadas, en lugar de asumir que una petición de 3× siempre triplica cada dimensión de origen.</p><p>El máximo publicado de resolución de origen es 2560×1440. Este flujo aumenta un original admisible hacia 4K y más allá; no acepta uno que ya sea mayor solo porque se desee una salida superior. Reduzca el tamaño o prepare una copia de trabajo adecuada antes de utilizar ese perfil documentado. Conserve la grabación original por separado para que la comparación final no se limite a un intermedio redimensionado.</p><h4>Preparar un original breve y legible</h4><p>Las indicaciones habituales de preparación del fabricante limitan los originales a veinte segundos y cincuenta MB. El clip se proporciona mediante una URL de vídeo o MP4 codificado. Su referencia exacta señala que se procesan los primeros veinte segundos: un pequeño exceso de duración puede procesarse solo hasta esa marca, mientras que un clip considerablemente más largo se rechaza. No se publica una tolerancia numérica. Recorte el segmento previsto a veinte segundos o menos, en lugar de depender de ese comportamiento de límite no especificado.</p><p>Elija la versión menos comprimida disponible. Los artefactos de compresión limitan la cantidad de detalle real que puede recuperar el ampliador, y la mejora creativa puede crear una textura plausible sin demostrar qué contenía la escena original. Complete la edición y el recorte previstos antes de ampliar el clip seleccionado. Un flujo original podría terminar primero un plano de producto, elegir el intervalo de acción útil y después ampliar esa selección definitiva, conservando el original sin modificar para compararlo.</p><p>El resultado conserva la pista de audio de origen. Examine su sincronización con la imagen, especialmente al principio y al final de un segmento seleccionado. El perfil documentado no ofrece un selector independiente de fotogramas por segundo, generación de diálogo nuevo ni controles de edición con referencias de imagen. Su finalidad es obtener un vídeo mayor con el tratamiento de detalle elegido, conservando el material temporal y sonoro del original dentro del segmento procesado.</p><h4>Conservar y comprobar el clip entregado</h4><p>El flujo del fabricante es asíncrono: una tarea enviada proporciona una identidad y una ubicación de estado, y su resultado completado contiene un enlace firmado de entrega del MP4. Ese enlace caduca después de aproximadamente una hora. Conserve el clip real, el original, el factor elegido, el modo de creatividad y la descripción del contenido, en lugar de depender de la ubicación temporal. Distinga un estado fallido o moderado de un vídeo completado.</p><p>Revise fotogramas individuales para comprobar rostros, marcas y cambios de superficie, y después vea la secuencia para comprobar continuidad, movimiento y alineación del audio. Las salidas precisas y creativas responden a necesidades visuales diferentes; el recurso útil es el clip ampliado que cumple el objetivo de fidelidad elegido al tamaño de visualización previsto. Una resolución mayor por sí sola no demuestra que se hayan mantenido correctos la identidad, las palabras o el detalle fino originales.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible en Ailoot · entradas y métodos</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Vídeo</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Tipos de entrada</dt><dd><code>text</code>, <code>image</code>, <code>audio</code>, <code>video</code></dd></div><div><dt>Tipos de salida</dt><dd><code>video</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Campo</th><th>Tipo</th><th>Requisito</th><th>Valores y límites</th><th>Predeterminado</th></tr></thead><tbody><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>black-forest-labs/flux-video-upscale</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>array</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>Número mínimo de elementos: 1</div><div>Número máximo de elementos: 1</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">upscale_factor</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>number</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>Mínimo: 1,5</div><div>Máximo: 3</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">creativity</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>integer</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>0, 1</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Parámetros del método y ciclo de vida</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parámetro</th><th>Contrato</th></tr></thead><tbody><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>content_type</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>application/json</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>required</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>model, input_references, upscale_factor, creativity</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>material_types</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>text, image, audio, video</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>material_conditions</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>Usa exactamente una URL de contenido real de un recurso de vídeo completado bajo tu titularidad, con la firma devuelta. La titularidad del recurso, su tipo y la evidencia de bytes almacenada deben coincidir con la solicitud.</td></tr></tbody></table></div><p>Ciclo de vida: <code>asynchronous_job_then_owned_outputs</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code> · id o polling_url real devuelto</p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Planes</h3><div class=\"card-result-process\" data-billing-basis><h5>Cómo se calcula el cargo definitivo</h5><p class=\"note-s\">Las tarifas mostradas estiman el coste antes de la generación. El cargo final se calcula a partir del coste registrado para la generación original. La duración medida del resultado y las cantidades previstas no constituyen la cantidad facturable final.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.</p><dl data-price-conditions><dt>Modo rápido</dt><dd>Sin especificar <span class=\"note-s\">Cuando se selecciona el modo rápido</span></dd><dt>Modo flex</dt><dd>Sin especificar <span class=\"note-s\">Cuando se selecciona el modo flex</span></dd><dt>Esfuerzo máximo de razonamiento</dt><dd>Sin especificar <span class=\"note-s\">Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tarifas estimadas para comparar</h4><h4>Precios por configuración</h4><p class=\"note-s\">Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuración</th><th>Tabla de tarifas</th><th>Cantidad prevista</th><th>Unidad de facturación</th><th>Condiciones de facturación</th><th>Píxeles por megapíxel</th><th>Cargo</th></tr></thead><tbody><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Tarifas base por token</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>Tarifa base</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>—</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>—</td><td data-cell-label=\"Píxeles por megapíxel\"><span class=\"card-cell-label\">Píxeles por megapíxel</span>—</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Entrada · Tokens de entrada · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Salida · Tokens de salida · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Lectura de caché · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Escritura en caché · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Escritura en caché, 1 hora · Estimación solo para comparar</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del vídeo</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por megapíxel-segundo</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>calidad: creative</td><td data-cell-label=\"Píxeles por megapíxel\"><span class=\"card-cell-label\">Píxeles por megapíxel</span>1.048.576</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del vídeo · Estimación solo para comparar</span> <b>$0.21</b> <span class=\"price-unit\">por megapíxel-segundo</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Precio del vídeo</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por megapíxel-segundo</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>quality: precise</td><td data-cell-label=\"Píxeles por megapíxel\"><span class=\"card-cell-label\">Píxeles por megapíxel</span>1.048.576</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Precio del vídeo · Estimación solo para comparar</span> <b>$0.15</b> <span class=\"price-unit\">por megapíxel-segundo</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Coste estimado de generación</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad prevista\"><span class=\"card-cell-label\">Cantidad prevista</span>estimación para una generación</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>—</td><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>—</td><td data-cell-label=\"Píxeles por megapíxel\"><span class=\"card-cell-label\">Píxeles por megapíxel</span>—</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Salida · Coste estimado de generación · Estimación solo para comparar</span> <b>$0.15</b> <span class=\"price-unit\">estimación previa a la generación</span></div><p class=\"note-s\">Esta estimación no es un cargo adicional ni una tarifa fija para la generación completada.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. <a href=\"/docs/es/billing/reserve/\">Cómo funcionan la reserva y la liquidación →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Solicitudes de ejemplo</h3><h4>Ailoot Ultra · Vídeo</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes del código\"><button class=\"cg-tab\" id=\"model-code-1097-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1097-panel-0\" aria-selected=\"true\" tabindex=\"0\">Usa la entrada real y conserva el resultado completo</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1097-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1097-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_REFERENCES_JSON\n: &quot;${AILOOT_UPSCALE_FACTOR:?Set the actual documented input value}&quot;\nexport AILOOT_UPSCALE_FACTOR\n: &quot;${AILOOT_CREATIVITY:?Set the actual documented input value}&quot;\nexport AILOOT_CREATIVITY\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;black-forest-labs/flux-video-upscale&#39;, &#39;input_references&#39;: &#39;${ACTUAL_OWNED_INPUT_REFERENCES}&#39;, &#39;upscale_factor&#39;: &#39;${ACTUAL_UPSCALE_FACTOR}&#39;, &#39;creativity&#39;: &#39;${ACTUAL_CREATIVITY}&#39;}\nrequest[&#39;input_references&#39;]=json.loads(os.environ[&#39;AILOOT_INPUT_REFERENCES_JSON&#39;])\nrequest[&#39;upscale_factor&#39;]=float(os.environ[&#39;AILOOT_UPSCALE_FACTOR&#39;])\nrequest[&#39;creativity&#39;]=int(os.environ[&#39;AILOOT_CREATIVITY&#39;])\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recibir y guardar resultados</h3><h4>Ailoot Ultra · Vídeo</h4><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li></ul><h5>Guarda todos los archivos completados</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes del código\"><button class=\"cg-tab\" id=\"model-code-1098-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1098-panel-0\" aria-selected=\"true\" tabindex=\"0\">Obtener todos los archivos completados con GET</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1098-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1098-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}&quot;\nexport AILOOT_STATUS_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[&quot;AILOOT_STATUS_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose the actual completed status file&quot;)\nr=json.loads(f.read_text())\nif r.get(&quot;status&quot;)!=&quot;completed&quot; or not isinstance(r.get(&quot;data&quot;),list) or not r[&quot;data&quot;]:raise SystemExit(&quot;Wait for a completed status with asset paths&quot;)\nurls=[]\nfor x in r[&quot;data&quot;]:\n    if not isinstance(x,str) or &quot;\\n&quot; in x or &quot;\\r&quot; in x:raise SystemExit(&quot;Invalid asset path&quot;)\n    u=urljoin(&quot;https://api.ailoot.ai&quot;,x)\n    z=urlsplit(u)\n    if z.scheme!=&quot;https&quot; or z.netloc!=&quot;api.ailoot.ai&quot; or z.username or z.password:raise SystemExit(&quot;Use the actual Ailoot asset paths from status&quot;)\n    urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; \\\n    -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o &quot;video-${index}.mp4&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div><div class=\"card-result-process\" data-all-results><h5>Conserva todos los resultados completados</h5><p class=\"note-s\">Guarda todos los vídeos completados o archivos recibidos; descarga cada URL de archivo que se haya devuelto.</p><p class=\"note-s\">Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Si es necesario revisar la respuesta original</h5><p class=\"note-s\">Conserva X-Client-Request-ID, X-Ailoot-Task-Id y los valores reales devueltos de id/polling_url. Continúa el trabajo original; no vuelvas a enviar la solicitud de creación.</p></div><details class=\"card-about\" data-output-fields><summary>Campos de respuesta</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Campo</th><th>Tipo</th></tr></thead><tbody><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span></td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">status</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span></td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">data[]</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span></td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">outputs[]</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias del modelo</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=black-forest-labs%2Fflux-video-upscale&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux-video-upscale&amp;fmt=videos\"><code>black-forest-labs/flux-video-upscale</code></a></span></p><h4>Alias de rutas de métodos</h4><p class=\"note-s\">Usa las rutas de método indicadas arriba.</p><h4>ID de modelo relacionados</h4><p class=\"note-s\"><a href=\"#m=black-forest-labs%2Fflux-video-upscale&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux-video-upscale&amp;fmt=videos\"><code>black-forest-labs/flux-video-upscale</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "black-forest-labs/flux-video-upscale",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "black-forest-labs/flux-video-upscale",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|black-forest-labs%2Fflux-video-upscale",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Las tarifas mostradas estiman el coste antes de la generación. El cargo final se calcula a partir del coste registrado para la generación original. La duración medida del resultado y las cantidades previstas no constituyen la cantidad facturable final.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual zero-based output index from completed manifest"
                  }
                }
              ],
              "creation_id_field": "id",
              "media_library": {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              "mode": "asynchronous_job_then_owned_outputs",
              "operation_id_is_not_task_id": true,
              "output_content_response": "owned MP4 bytes with Range support",
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned id or polling_url",
                  "path": "/v1/videos/{request_id}"
                }
              ],
              "unknown": "Conserva X-Client-Request-ID, X-Ailoot-Task-Id y los valores reales devueltos de id/polling_url. Continúa el trabajo original; no vuelvas a enviar la solicitud de creación."
            },
            "outputs": {
              "all_results": "Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.",
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": null
                },
                {
                  "description": null,
                  "name": "status",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": null
                },
                {
                  "description": null,
                  "name": "outputs[]",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "black-forest-labs/flux-video-upscale"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "video_url"
                    },
                    "video_url": {
                      "additionalProperties": false,
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "type",
                    "video_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 1,
                "minimum_items": 1,
                "name": "input_references",
                "required": true,
                "type": "array"
              },
              {
                "maximum": 3,
                "minimum": 1.5,
                "name": "upscale_factor",
                "required": true,
                "type": "number"
              },
              {
                "enum": [
                  0,
                  1
                ],
                "enum_known": true,
                "name": "creativity",
                "required": true,
                "type": "integer"
              }
            ],
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "creativity": {
                  "enum": [
                    0,
                    1
                  ],
                  "type": "integer"
                },
                "input_references": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "const": "video_url"
                      },
                      "video_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "type",
                      "video_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux-video-upscale"
                  ],
                  "type": "string"
                },
                "upscale_factor": {
                  "maximum": 3,
                  "minimum": 1.5,
                  "type": "number"
                }
              },
              "required": [
                "model",
                "input_references",
                "upscale_factor",
                "creativity"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "creativity": "${ACTUAL_CREATIVITY}",
                "input_references": "${ACTUAL_OWNED_INPUT_REFERENCES}",
                "model": "black-forest-labs/flux-video-upscale",
                "upscale_factor": "${ACTUAL_UPSCALE_FACTOR}"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Usa exactamente una URL de contenido real de un recurso de vídeo completado bajo tu titularidad, con la firma devuelta. La titularidad del recurso, su tipo y la evidencia de bytes almacenada deben coincidir con la solicitud."
            ],
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "required": [
              "model",
              "input_references",
              "upscale_factor",
              "creativity"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual zero-based output index from completed manifest"
                }
              }
            ],
            "creation_id_field": "id",
            "media_library": {
              "http": "GET",
              "path": "/v1/media/assets"
            },
            "mode": "asynchronous_job_then_owned_outputs",
            "operation_id_is_not_task_id": true,
            "output_content_response": "owned MP4 bytes with Range support",
            "status": [
              {
                "http": "GET",
                "id_source": "id o polling_url real devuelto",
                "path": "/v1/videos/{request_id}"
              }
            ],
            "unknown": "Keep X-Client-Request-ID, X-Ailoot-Task-Id and actual returned id/polling_url. Continue the original job; do not submit creation again."
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": null
              },
              {
                "description": null,
                "name": "status",
                "type": null
              },
              {
                "description": null,
                "name": "data[]",
                "type": null
              },
              {
                "description": null,
                "name": "outputs[]",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "calidad: creative",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Precio del vídeo",
            "units": [
              {
                "amount": "0.21",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_creative",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.21",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: precise",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_precise",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "basis": "Esta estimación no es un cargo adicional ni una tarifa fija para la generación completada.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Coste estimado de generación",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}\"\nexport AILOOT_INPUT_REFERENCES_JSON\n: \"${AILOOT_UPSCALE_FACTOR:?Set the actual documented input value}\"\nexport AILOOT_UPSCALE_FACTOR\n: \"${AILOOT_CREATIVITY:?Set the actual documented input value}\"\nexport AILOOT_CREATIVITY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'black-forest-labs/flux-video-upscale', 'input_references': '${ACTUAL_OWNED_INPUT_REFERENCES}', 'upscale_factor': '${ACTUAL_UPSCALE_FACTOR}', 'creativity': '${ACTUAL_CREATIVITY}'}\nrequest['input_references']=json.loads(os.environ['AILOOT_INPUT_REFERENCES_JSON'])\nrequest['upscale_factor']=float(os.environ['AILOOT_UPSCALE_FACTOR'])\nrequest['creativity']=int(os.environ['AILOOT_CREATIVITY'])\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    z=urlsplit(u)\n    if z.scheme!=\"https\" or z.netloc!=\"api.ailoot.ai\" or z.username or z.password:raise SystemExit(\"Use the actual Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio",
          "video"
        ],
        "label": "Vídeo",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "videos",
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: creative",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.21",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_creative",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.21",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: precise",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_precise",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "black-forest-labs/flux-video-upscale",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.21",
            "amount_unit": "usd_per_megapixel_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_megapixel_second_creative",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.21",
            "native_quantity": 1,
            "public_unit_label": "per megapixel-second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "megapixel_second"
          },
          {
            "amount": "0.15",
            "amount_unit": "usd_per_megapixel_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_megapixel_second_precise",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.15",
            "native_quantity": 1,
            "public_unit_label": "per megapixel-second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "megapixel_second"
          },
          {
            "amount": "0.15",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.15",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "black-forest-labs/flux-video-upscale",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "477414dd6a25de735df4d756a106678a60e1eeacf5a56caf6e93c967742d566a",
    "input_html_sha256": "0c638cc110678d4f311f17412b47a6a6d1de703bbefd36249f1a60f0a9ef556f",
    "private_audit_sha256": "6925218e1d8eda36850a8658497393ac6b3e476575bd56828e5aedb9ef0d3ed8",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/es/black-forest-labs-flux-video-upscale/",
    "description": "FLUX Video Upscale amplía un clip existente mediante una mejora de detalle fiel al original o creativa. Su perfil documentado ofrece escalado de 1.5×–3×, conserva el audio y el encuadre de origen y limita la duración, la resolución de entrada y el área de los fotogramas de salida.",
    "locale": "es",
    "md_url": "https://ailoot.ai/models/es/black-forest-labs-flux-video-upscale/index.md",
    "title": "Black Forest Labs: FLUX Video Upscale — Ailoot",
    "url": "https://ailoot.ai/models/es/black-forest-labs-flux-video-upscale/"
  },
  "rawModel": {
    "about": "FLUX Video Upscale es el flujo de superresolución de vídeo de Black Forest Labs impulsado por FLUX 3. Recibe un clip existente y devuelve un MP4 ampliado, trasladando al resultado el encuadre y el audio de origen. Una descripción opcional breve puede orientar el detalle visual mejorado. Sus dos modos ofrecen una elección significativa entre mantenerse cerca del aspecto suministrado y generar detalle de forma más agresiva, en lugar de tratar toda imagen más grande como una reconstrucción igualmente fiel.\n\n### Elegir mejora precisa o creativa\n\nEl ajuste de creatividad selecciona el modo. Un valor de 0 corresponde al perfil preciso y fiel al original: el fabricante lo recomienda cuando un rostro, producto o recurso de marca debe conservar su identidad. Un valor de 1 activa la mejora creativa del detalle y es el predeterminado. Puede restaurar o inventar texturas de forma más agresiva, lo que resulta útil para material generado, paisajes, multitudes o superficies cuyo detalle pueda desarrollarse creativamente.\n\nEl fabricante advierte expresamente de que la mejora creativa no preserva rostros y productos con el mismo rigor. Compruebe el rasgo que debe seguir siendo identificable: el aspecto facial, el contorno de un producto, las letras, un patrón de material o un logotipo. Una imagen que parece más nítida puede contener un detalle modificado o inventado. Para una demostración de producto, utilice el aspecto previsto del producto como criterio de revisión, en lugar de seleccionar una versión solo porque su textura sea más elaborada.\n\nLa instrucción opcional describe el contenido del clip para orientar la mejora; una descripción vacía solicita una ampliación neutra. Un encargo original de escena generada podría identificar un muro de piedra cubierto de musgo, luz diurna suave y una fina textura de hojas. Mantenga la redacción centrada en el material que se debe perfeccionar. Una petición de sustituir un objeto, reconstruir el escenario o cambiar el diálogo corresponde a una decisión de edición, mientras que este perfil conserva la pista de audio de origen.\n\n### Escala y área de los fotogramas de salida\n\nEl parámetro documentado upscale_factor va de 1.5 a 3, con 2 como valor predeterminado. Amplía la resolución de origen conservando la relación de aspecto. El factor seleccionado y las dimensiones de entrada determinan la salida prevista, por lo que un clip horizontal y una composición vertical deben planificarse a partir de sus fotogramas reales. Prepare el tamaño de visualización de destino antes de elegir cuánto conviene ampliar.\n\nLa especificación exacta limita cada fotograma de salida a 13.75 unidades de megapíxel del fabricante. Su documentación define una unidad de este tipo como 1 048 576 píxeles, lo que da un máximo de 14 417 920 píxeles, aproximadamente 14.4 millones. Esto explica la expresión redondeada de 14.4 megapíxeles en la guía. Por tanto, un original grande puede recibir menos ampliación que la solicitada por el factor. Compruebe las dimensiones entregadas, en lugar de asumir que una petición de 3× siempre triplica cada dimensión de origen.\n\nEl máximo publicado de resolución de origen es 2560×1440. Este flujo aumenta un original admisible hacia 4K y más allá; no acepta uno que ya sea mayor solo porque se desee una salida superior. Reduzca el tamaño o prepare una copia de trabajo adecuada antes de utilizar ese perfil documentado. Conserve la grabación original por separado para que la comparación final no se limite a un intermedio redimensionado.\n\n### Preparar un original breve y legible\n\nLas indicaciones habituales de preparación del fabricante limitan los originales a veinte segundos y cincuenta MB. El clip se proporciona mediante una URL de vídeo o MP4 codificado. Su referencia exacta señala que se procesan los primeros veinte segundos: un pequeño exceso de duración puede procesarse solo hasta esa marca, mientras que un clip considerablemente más largo se rechaza. No se publica una tolerancia numérica. Recorte el segmento previsto a veinte segundos o menos, en lugar de depender de ese comportamiento de límite no especificado.\n\nElija la versión menos comprimida disponible. Los artefactos de compresión limitan la cantidad de detalle real que puede recuperar el ampliador, y la mejora creativa puede crear una textura plausible sin demostrar qué contenía la escena original. Complete la edición y el recorte previstos antes de ampliar el clip seleccionado. Un flujo original podría terminar primero un plano de producto, elegir el intervalo de acción útil y después ampliar esa selección definitiva, conservando el original sin modificar para compararlo.\n\nEl resultado conserva la pista de audio de origen. Examine su sincronización con la imagen, especialmente al principio y al final de un segmento seleccionado. El perfil documentado no ofrece un selector independiente de fotogramas por segundo, generación de diálogo nuevo ni controles de edición con referencias de imagen. Su finalidad es obtener un vídeo mayor con el tratamiento de detalle elegido, conservando el material temporal y sonoro del original dentro del segmento procesado.\n\n### Conservar y comprobar el clip entregado\n\nEl flujo del fabricante es asíncrono: una tarea enviada proporciona una identidad y una ubicación de estado, y su resultado completado contiene un enlace firmado de entrega del MP4. Ese enlace caduca después de aproximadamente una hora. Conserve el clip real, el original, el factor elegido, el modo de creatividad y la descripción del contenido, en lugar de depender de la ubicación temporal. Distinga un estado fallido o moderado de un vídeo completado.\n\nRevise fotogramas individuales para comprobar rostros, marcas y cambios de superficie, y después vea la secuencia para comprobar continuidad, movimiento y alineación del audio. Las salidas precisas y creativas responden a necesidades visuales diferentes; el recurso útil es el clip ampliado que cumple el objetivo de fidelidad elegido al tamaño de visualización previsto. Una resolución mayor por sí sola no demuestra que se hayan mantenido correctos la identidad, las palabras o el detalle fino originales.",
    "alias_of": null,
    "aliases": [],
    "author": "Black Forest Labs",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "video"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.15",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.15",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Consulta los precios completos de la configuración en los detalles."
      }
    ],
    "ctx": null,
    "formats": [
      "videos"
    ],
    "id": "black-forest-labs/flux-video-upscale",
    "input": [
      "text",
      "image",
      "audio",
      "video"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Las tarifas mostradas estiman el coste antes de la generación. El cargo final se calcula a partir del coste registrado para la generación original. La duración medida del resultado y las cantidades previstas no constituyen la cantidad facturable final.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual zero-based output index from completed manifest"
                  }
                }
              ],
              "creation_id_field": "id",
              "media_library": {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              "mode": "asynchronous_job_then_owned_outputs",
              "operation_id_is_not_task_id": true,
              "output_content_response": "owned MP4 bytes with Range support",
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned id or polling_url",
                  "path": "/v1/videos/{request_id}"
                }
              ],
              "unknown": "Conserva X-Client-Request-ID, X-Ailoot-Task-Id y los valores reales devueltos de id/polling_url. Continúa el trabajo original; no vuelvas a enviar la solicitud de creación."
            },
            "outputs": {
              "all_results": "Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.",
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": null
                },
                {
                  "description": null,
                  "name": "status",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": null
                },
                {
                  "description": null,
                  "name": "outputs[]",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "black-forest-labs/flux-video-upscale"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "video_url"
                    },
                    "video_url": {
                      "additionalProperties": false,
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "type",
                    "video_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 1,
                "minimum_items": 1,
                "name": "input_references",
                "required": true,
                "type": "array"
              },
              {
                "maximum": 3,
                "minimum": 1.5,
                "name": "upscale_factor",
                "required": true,
                "type": "number"
              },
              {
                "enum": [
                  0,
                  1
                ],
                "enum_known": true,
                "name": "creativity",
                "required": true,
                "type": "integer"
              }
            ],
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "creativity": {
                  "enum": [
                    0,
                    1
                  ],
                  "type": "integer"
                },
                "input_references": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "const": "video_url"
                      },
                      "video_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "type",
                      "video_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux-video-upscale"
                  ],
                  "type": "string"
                },
                "upscale_factor": {
                  "maximum": 3,
                  "minimum": 1.5,
                  "type": "number"
                }
              },
              "required": [
                "model",
                "input_references",
                "upscale_factor",
                "creativity"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "creativity": "${ACTUAL_CREATIVITY}",
                "input_references": "${ACTUAL_OWNED_INPUT_REFERENCES}",
                "model": "black-forest-labs/flux-video-upscale",
                "upscale_factor": "${ACTUAL_UPSCALE_FACTOR}"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Usa exactamente una URL de contenido real de un recurso de vídeo completado bajo tu titularidad, con la firma devuelta. La titularidad del recurso, su tipo y la evidencia de bytes almacenada deben coincidir con la solicitud."
            ],
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "required": [
              "model",
              "input_references",
              "upscale_factor",
              "creativity"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual zero-based output index from completed manifest"
                }
              }
            ],
            "creation_id_field": "id",
            "media_library": {
              "http": "GET",
              "path": "/v1/media/assets"
            },
            "mode": "asynchronous_job_then_owned_outputs",
            "operation_id_is_not_task_id": true,
            "output_content_response": "owned MP4 bytes with Range support",
            "status": [
              {
                "http": "GET",
                "id_source": "id o polling_url real devuelto",
                "path": "/v1/videos/{request_id}"
              }
            ],
            "unknown": "Keep X-Client-Request-ID, X-Ailoot-Task-Id and actual returned id/polling_url. Continue the original job; do not submit creation again."
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": null
              },
              {
                "description": null,
                "name": "status",
                "type": null
              },
              {
                "description": null,
                "name": "data[]",
                "type": null
              },
              {
                "description": null,
                "name": "outputs[]",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "calidad: creative",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Precio del vídeo",
            "units": [
              {
                "amount": "0.21",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_creative",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.21",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: precise",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_precise",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "basis": "Esta estimación no es un cargo adicional ni una tarifa fija para la generación completada.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Coste estimado de generación",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}\"\nexport AILOOT_INPUT_REFERENCES_JSON\n: \"${AILOOT_UPSCALE_FACTOR:?Set the actual documented input value}\"\nexport AILOOT_UPSCALE_FACTOR\n: \"${AILOOT_CREATIVITY:?Set the actual documented input value}\"\nexport AILOOT_CREATIVITY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'black-forest-labs/flux-video-upscale', 'input_references': '${ACTUAL_OWNED_INPUT_REFERENCES}', 'upscale_factor': '${ACTUAL_UPSCALE_FACTOR}', 'creativity': '${ACTUAL_CREATIVITY}'}\nrequest['input_references']=json.loads(os.environ['AILOOT_INPUT_REFERENCES_JSON'])\nrequest['upscale_factor']=float(os.environ['AILOOT_UPSCALE_FACTOR'])\nrequest['creativity']=int(os.environ['AILOOT_CREATIVITY'])\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    z=urlsplit(u)\n    if z.scheme!=\"https\" or z.netloc!=\"api.ailoot.ai\" or z.username or z.password:raise SystemExit(\"Use the actual Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio",
          "video"
        ],
        "label": "Vídeo",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "videos",
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: creative",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.21",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_creative",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.21",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "quality: precise",
              "pixels_per_megapixel": 1048576,
              "quoted_unit": "per megapixel-second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_megapixel_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_megapixel_second_precise",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "per megapixel-second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "megapixel_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.15",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.15",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "black-forest-labs/flux-video-upscale",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.21",
            "amount_unit": "usd_per_megapixel_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_megapixel_second_creative",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.21",
            "native_quantity": 1,
            "public_unit_label": "per megapixel-second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "megapixel_second"
          },
          {
            "amount": "0.15",
            "amount_unit": "usd_per_megapixel_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_megapixel_second_precise",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.15",
            "native_quantity": 1,
            "public_unit_label": "per megapixel-second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "megapixel_second"
          },
          {
            "amount": "0.15",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.15",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "black-forest-labs/flux-video-upscale",
        "request_model_id": "black-forest-labs/flux-video-upscale",
        "route_label": "Ultra"
      }
    ],
    "name": "Black Forest Labs: FLUX Video Upscale",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.15,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.15,
      "varies": false
    },
    "short": "FLUX Video Upscale amplía un clip existente mediante una mejora de detalle fiel al original o creativa. Su perfil documentado ofrece escalado de 1.5×–3×, conserva el audio y el encuadre de origen y limita la duración, la resolución de entrada y el área de los fotogramas de salida."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "FLUX Video Upscale amplía un clip existente mediante una mejora de detalle fiel al original o creativa. Su perfil documentado ofrece escalado de 1.5×–3×, conserva el audio y el encuadre de origen y limita la duración, la resolución de entrada y el área de los fotogramas de salida.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "4ae71dfa1c5807455386095b2697331cbc476697b6e23d265e6cb42afb134e29",
    "renderer_sha256": "b6d488b4bdee68568e5b17d2d4871b2ba1885e1032091b635a7a58ad2ca224e7"
  },
  "sourceRevision": "b4e7ca888bfd0f69a7e21c4e3badf3ecacf146244e1c3bd223addb671f8effa3"
}
