<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Audio Generation on KnightLi Blog</title>
        <link>https://knightli.com/es/tags/audio-generation/</link>
        <description>Recent content in Audio Generation on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>es</language>
        <lastBuildDate>Mon, 25 May 2026 08:00:37 +0800</lastBuildDate><atom:link href="https://knightli.com/es/tags/audio-generation/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>WavFlow: proyecto abierto de Meta para generación de audio en espacio de onda cruda</title>
        <link>https://knightli.com/es/2026/05/25/wavflow-raw-waveform-audio-generation/</link>
        <pubDate>Mon, 25 May 2026 08:00:37 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/25/wavflow-raw-waveform-audio-generation/</guid>
        <description>&lt;p&gt;&lt;code&gt;facebookresearch/WavFlow&lt;/code&gt; es un proyecto de generación de audio multimodal publicado por Meta AI. El título del paper es &lt;code&gt;WavFlow: Audio Generation in Waveform Space&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Proyecto: &lt;a class=&#34;link&#34; href=&#34;https://github.com/facebookresearch/WavFlow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/facebookresearch/WavFlow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No se centra en síntesis de voz ni en generación musical pura. Su objetivo es generar audio sincronizado y de alta fidelidad a partir de condiciones de video y texto. Lo más particular es que no sigue la ruta habitual de latent compression, sino que intenta hacer generación de audio end-to-end directamente en raw waveform space.&lt;/p&gt;
&lt;p&gt;En el momento de escribir esto, la página de GitHub muestra unas 55 stars y 3 forks. El código es principalmente Python, y el proyecto no tiene releases publicados. El README también deja clara una limitación importante: por restricciones de política organizativa, actualmente no pueden publicar production-trained checkpoints. El equipo trabaja en un foundation checkpoint entrenado con datos completamente open source. Hasta entonces, los usuarios deben entrenar sus propios modelos.&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-intenta-resolver-wavflow&#34;&gt;Qué problema intenta resolver WavFlow
&lt;/h2&gt;&lt;p&gt;Muchos métodos de generación de audio multimodal comprimen primero el audio a un espacio latent, generan ahí y luego reconstruyen la forma de onda. Esta ruta es eficiente, pero puede traer un problema: la compresión puede perder detalles y afectar la textura del audio, la sincronización y la información de alta frecuencia.&lt;/p&gt;
&lt;p&gt;WavFlow intenta saltarse ese paso y generar audio directamente en el espacio de onda cruda.&lt;/p&gt;
&lt;p&gt;El README menciona waveform patchifying y amplitude lifting para que flow matching pueda funcionar de forma estable sobre raw audio, usando predicción directa de &lt;code&gt;x&lt;/code&gt;. Dicho de forma simple: no comprime primero el sonido en una representación intermedia. Corta la propia forma de onda en patches adecuados para el modelo y aplica una transformación de amplitud para que el modelo aprenda generación a nivel de onda.&lt;/p&gt;
&lt;p&gt;Ahí está su punto más interesante. Si la generación end-to-end en forma de onda puede funcionar de forma estable, podría reducir el cuello de botella de información introducido por codificadores y decodificadores.&lt;/p&gt;
&lt;h2 id=&#34;modos-de-entrada-soportados&#34;&gt;Modos de entrada soportados
&lt;/h2&gt;&lt;p&gt;Según el README y la guía de entrenamiento, WavFlow apunta a tres tipos de entrada.&lt;/p&gt;
&lt;p&gt;El primero es VT2A, es decir, video + text to audio. El modelo recibe video y descripción textual, y genera audio sincronizado con la escena y la semántica, por ejemplo bosques, ranas, tambores o skateboards.&lt;/p&gt;
&lt;p&gt;El segundo es T2A, o text to audio. Solo hay descripción textual y no hay video. En entrenamiento usa CLIP text feature; en inferencia, el CSV puede poner &lt;code&gt;video_exist&lt;/code&gt; en &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;El tercero es V2A, o video to audio. Hay video, pero no texto. En inferencia se puede poner &lt;code&gt;text_exist&lt;/code&gt; en &lt;code&gt;0&lt;/code&gt;, y el modelo usa un learned empty CLIP-text token.&lt;/p&gt;
&lt;p&gt;Este diseño es práctico. En datos reales no siempre cada muestra tiene video, texto y audio anotados de forma completa. WavFlow usa campos como &lt;code&gt;video_exist&lt;/code&gt; y &lt;code&gt;text_exist&lt;/code&gt; para expresar explícitamente la modalidad faltante, de modo que entrenamiento e inferencia puedan manejar distintas combinaciones.&lt;/p&gt;
&lt;h2 id=&#34;evaluación-y-posicionamiento&#34;&gt;Evaluación y posicionamiento
&lt;/h2&gt;&lt;p&gt;El README dice que WavFlow se evalúa en VGGSound para VT2A y AudioCaps para T2A, con rendimiento comparable al de métodos latent-based ya establecidos.&lt;/p&gt;
&lt;p&gt;Esto no significa que ya supere en todo a los modelos existentes. Significa que end-to-end raw waveform generation no necesariamente pierde frente a los frameworks latent tradicionales. Al menos en acoustic richness, fidelity y synchronization, puede llegar a una categoría similar.&lt;/p&gt;
&lt;p&gt;La página del proyecto también ofrece demos como forest, frog, drum y skateboard, además de más de 24 muestras y comparaciones benchmark lado a lado. En modelos de generación de audio, las demos son importantes porque las métricas textuales difícilmente describen por completo la textura, el espacio y la sincronización del sonido.&lt;/p&gt;
&lt;h2 id=&#34;instalación&#34;&gt;Instalación
&lt;/h2&gt;&lt;p&gt;El proyecto ofrece un script de instalación automática:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/facebookresearch/WavFlow.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; WavFlow
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash scripts/setup.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate wavflow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;scripts/setup.sh&lt;/code&gt; crea un entorno conda llamado &lt;code&gt;wavflow&lt;/code&gt; e instala las dependencias necesarias.&lt;/p&gt;
&lt;p&gt;Si prefieres instalación manual, el README propone:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n wavflow &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.10 -y
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate wavflow
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -e . --no-deps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install -n wavflow -c conda-forge &lt;span class=&#34;s2&#34;&gt;&amp;#34;ffmpeg&amp;lt;7&amp;#34;&lt;/span&gt; -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El &lt;code&gt;ffmpeg&amp;lt;7&lt;/code&gt; se usa principalmente para decodificación de video con torio. El README también indica que los pesos externos necesarios, como CLIP, Synchformer y empty-string CFG embedding, se descargan o calculan automáticamente en la primera ejecución y se guardan en &lt;code&gt;~/.cache/wavflow/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;cómo-ejecutar-inferencia&#34;&gt;Cómo ejecutar inferencia
&lt;/h2&gt;&lt;p&gt;Como el proyecto oficial aún no publica production-trained checkpoints, la entrada de inferencia siguiente solo aplica si ya tienes un checkpoint entrenado.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash scripts/launch/predict.sh &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--gpu N&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--config PATH&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El archivo de configuración por defecto es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wavflow/configs/infer.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El CSV de entrada se especifica con &lt;code&gt;data.csv_path&lt;/code&gt;, y acepta video, texto o ambos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csv&#34; data-lang=&#34;csv&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;video_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;caption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;video_exist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;text_exist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;/abs/path/sample1.mp4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;a whistling rocket explodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;/abs/path/sample2.mp4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;birds chirping in a forest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;a whistling rocket explodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;/abs/path/sample3.mp4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Aquí &lt;code&gt;video_exist=0&lt;/code&gt; significa que no se decodifica video y se usan learned empty CLIP/Sync tokens. &lt;code&gt;text_exist=0&lt;/code&gt; significa que se ignora el caption y se usa learned empty CLIP-text token. Los captions con comas deben ir entre comillas.&lt;/p&gt;
&lt;p&gt;Los parámetros habituales del launcher incluyen:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--gpu N
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--config PATH
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WAVFLOW_ENV
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los campos importantes de configuración incluyen &lt;code&gt;model.name&lt;/code&gt;, &lt;code&gt;model.ckpt_path&lt;/code&gt;, &lt;code&gt;model.use_ema&lt;/code&gt;, &lt;code&gt;inference.duration_sec&lt;/code&gt;, &lt;code&gt;target_sample_rate&lt;/code&gt;, &lt;code&gt;inference.cfg&lt;/code&gt;, &lt;code&gt;num_steps&lt;/code&gt;, &lt;code&gt;noise_scale&lt;/code&gt;, &lt;code&gt;noise_shift&lt;/code&gt;, &lt;code&gt;prediction_type&lt;/code&gt;, &lt;code&gt;seed&lt;/code&gt; y el directorio de salida.&lt;/p&gt;
&lt;h2 id=&#34;una-trampa-con-ema&#34;&gt;Una trampa con EMA
&lt;/h2&gt;&lt;p&gt;El README advierte específicamente sobre &lt;code&gt;model.use_ema&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Un checkpoint de WavFlow puede contener &lt;code&gt;model_ema1&lt;/code&gt;, que se actualiza con &lt;code&gt;ema_decay = 0.9999&lt;/code&gt;. Si el entrenamiento solo ha corrido unos cientos o miles de pasos, el tensor EMA puede seguir conteniendo muchos valores de inicialización aleatoria y producir ruido durante la inferencia.&lt;/p&gt;
&lt;p&gt;Por eso, si haces una corrida corta, sobreajuste en pocas muestras o un smoke test, conviene considerar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model.use_ema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;O bien usar un &lt;code&gt;ema_epoch_*.pth&lt;/code&gt; guardado después de suficiente entrenamiento. Este detalle es útil: si no lo conoces, es fácil pensar que el modelo está roto, cuando en realidad el EMA aún no se ha estabilizado.&lt;/p&gt;
&lt;h2 id=&#34;flujo-de-entrenamiento&#34;&gt;Flujo de entrenamiento
&lt;/h2&gt;&lt;p&gt;El &lt;code&gt;TRAINING.md&lt;/code&gt; oficial divide el entrenamiento en dos pasos.&lt;/p&gt;
&lt;p&gt;El primer paso es extracción de características.&lt;/p&gt;
&lt;p&gt;T2A solo extrae CLIP text feature. VT2A extrae CLIP frame feature, Synchformer feature y CLIP text feature. Un CSV de ejemplo se ve así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csv&#34; data-lang=&#34;csv&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;audio_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;video_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;caption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;sample1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/abs/or/relative/wav/sample1.wav&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/abs/or/relative/video/sample1.mp4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;a whistling rocket explodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los videos deben durar al menos &lt;code&gt;extraction.duration_sec&lt;/code&gt;, que por defecto es 8 segundos. Clips más cortos se saltan. La extracción se puede ejecutar con:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash scripts/launch/extract_t2a.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash scripts/launch/extract_vt2a.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para usar más GPUs o una configuración personalizada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NPROC_PER_NODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; bash scripts/launch/extract_vt2a.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;path/to/your_extract.yaml bash scripts/launch/extract_t2a.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El segundo paso es entrenamiento.&lt;/p&gt;
&lt;p&gt;Para entrenamiento multi-GPU en un solo nodo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash scripts/launch/train_single_node.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El entrenamiento multinodo requiere configurar &lt;code&gt;NNODES&lt;/code&gt;, &lt;code&gt;NODE_RANK&lt;/code&gt;, &lt;code&gt;MASTER_ADDR&lt;/code&gt;, &lt;code&gt;MASTER_PORT&lt;/code&gt; y &lt;code&gt;NPROC_PER_NODE&lt;/code&gt;. Las salidas incluyen &lt;code&gt;checkpoint_latest.pth&lt;/code&gt;, &lt;code&gt;checkpoint_epoch_*.pth&lt;/code&gt;, &lt;code&gt;ema_epoch_*.pth&lt;/code&gt;, muestras de audio generadas y &lt;code&gt;training.log&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;El entrenamiento puede hacer resume automáticamente: si existe &lt;code&gt;checkpoint_latest.pth&lt;/code&gt; en el directorio del experimento, continúa desde ahí.&lt;/p&gt;
&lt;h2 id=&#34;a-quién-le-interesa&#34;&gt;A quién le interesa
&lt;/h2&gt;&lt;p&gt;WavFlow interesa más a investigadores y equipos de ingeniería que a usuarios normales que buscan una herramienta final de efectos de sonido.&lt;/p&gt;
&lt;p&gt;Es adecuado para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Personas que investigan video-to-audio, text-to-audio o multimodal audio generation.&lt;/li&gt;
&lt;li&gt;Equipos que quieren comparar raw waveform generation con latent-based audio generation.&lt;/li&gt;
&lt;li&gt;Usuarios que necesitan entrenar su propio modelo de generación de audio y pueden preparar datos y recursos GPU.&lt;/li&gt;
&lt;li&gt;Equipos de aplicación con requisitos fuertes de sincronización entre video y sonido.&lt;/li&gt;
&lt;li&gt;Quienes quieren estudiar si flow matching es viable sobre formas de onda de audio crudas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si solo buscas una herramienta web donde escribir un prompt y generar directamente un efecto de sonido, WavFlow no es hoy la opción más cómoda. Todavía no publica un production checkpoint, y su ruta de despliegue se parece más a código de investigación.&lt;/p&gt;
&lt;h2 id=&#34;qué-conviene-vigilar&#34;&gt;Qué conviene vigilar
&lt;/h2&gt;&lt;p&gt;Primero, no se debe tratar como un modelo de generación de audio “descargar y usar”. El proyecto oficial no publica actualmente production-trained checkpoints. Para inferencia real, necesitas entrenarlo tú mismo o esperar un futuro checkpoint entrenado con datos abiertos.&lt;/p&gt;
&lt;p&gt;Segundo, la licencia no es una opción comercial permisiva por defecto. El README indica que la mayor parte de WavFlow usa CC-BY-NC 4.0, mientras que algunos componentes vendored conservan sus licencias originales, como MIT, Apache 2.0, CC BY-NC 4.0 y Stability AI Community License. Antes de uso comercial, conviene leer con cuidado &lt;code&gt;LICENSE&lt;/code&gt; y &lt;code&gt;NOTICE.txt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tercero, los datos de entrenamiento son críticos. La ventaja de WavFlow depende de datos alineados de audio, video y texto. Si la calidad de datos es baja, los captions son imprecisos o audio y video no están sincronizados, el modelo tendrá dificultades para aprender generación estable de sonido.&lt;/p&gt;
&lt;p&gt;Cuarto, raw waveform generation reduce el latent bottleneck, pero también puede traer mayor coste de entrenamiento e inferencia. En proyectos reales todavía hay que equilibrar calidad de audio, velocidad, VRAM, sample rate y duración de salida.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;El valor de WavFlow está en plantear una pregunta clara: ¿la generación de audio multimodal tiene que comprimirse primero a un espacio latent?&lt;/p&gt;
&lt;p&gt;Con waveform patchifying, amplitude lifting y flow matching, intenta generar audio sincronizado de alta fidelidad directamente en raw waveform space. Los resultados de evaluación sugieren que esta ruta al menos puede situarse cerca de métodos latent-based maduros.&lt;/p&gt;
&lt;p&gt;Por ahora, sin embargo, se parece más a un framework de investigación y entrenamiento que a un modelo de producto listo para usar. No hay production checkpoint público, la licencia se inclina hacia uso no comercial y el entrenamiento necesita datos alineados de audio, video y texto. Todo esto lo hace más adecuado para investigación, reproducción y reentrenamiento. Si te interesan los próximos modelos video-to-audio o text-to-audio, WavFlow merece una lectura seria.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;facebookresearch/WavFlow: &lt;a class=&#34;link&#34; href=&#34;https://github.com/facebookresearch/WavFlow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/facebookresearch/WavFlow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WavFlow Project Page: &lt;a class=&#34;link&#34; href=&#34;https://facebookresearch.github.io/WavFlow/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://facebookresearch.github.io/WavFlow/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WavFlow arXiv: &lt;a class=&#34;link&#34; href=&#34;https://arxiv.org/abs/2605.18749&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://arxiv.org/abs/2605.18749&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WavFlow Training Guide: &lt;a class=&#34;link&#34; href=&#34;https://github.com/facebookresearch/WavFlow/blob/main/TRAINING.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/facebookresearch/WavFlow/blob/main/TRAINING.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
