Buckets:

download
raw
32.7 kB
import{s as de,n as ue,o as we}from"../chunks/scheduler.e4ff9b64.js";import{S as he,i as je,e as p,s as n,c as o,h as fe,a as i,d as s,b as a,f as me,g as M,j as J,k as Yl,l as Ce,m as t,n as T,t as U,o as c,p as y}from"../chunks/index.09f1bca0.js";import{C as Ie,H as u,E as be}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.f14d032d.js";import{C as tl}from"../chunks/CodeBlock.82f034c5.js";function ge(Ol){let r,nl,el,al,w,pl,h,il,j,Xl=`<a href="https://huggingface.co/papers/2605.13724" rel="nofollow">AnyFlow</a> 是一个视频扩散<strong>蒸馏</strong>框架,把预训练的 Wan2.1 教师
模型蒸馏成在标准 Euler 采样下支持<em>任意步数 (any-step)</em> 的学生模型。同一个蒸馏出来的 checkpoint 可以
在 1、2、4、8、16… NFE 下推理,<strong>质量随步数单调提升</strong> —— 这一点和 consistency models 不同,后者
NFE 增加反而经常掉点。`,Jl,f,zl=`核心思路是学习 <strong>flow map</strong> $\\Phi_{r\\leftarrow t}: \\mathbf{z}_t \\to \\mathbf{z}_r$(任意 $1 \\ge t \\ge r \\ge 0$),
而不是 consistency models 学的固定端点映射 $\\mathbf{z}_t \\to \\mathbf{z}_0$。Flow map 的可组合性消除了
采样步之间的 re-noising;on-policy 蒸馏阶段额外用 <strong>DMD 反向散度监督</strong> + <strong>Flow-Map backward simulation</strong>
(3 段 shortcut)补上 consistency 蒸馏遗留的 exposure-bias 缺口。`,ol,C,Hl='AnyFlow 由 NVIDIA、新加坡国立大学(NUS)和 MIT 合作完成,作者为 Yuchao Gu、Guian Fang、Yuxin Jiang、Weijia Mao、Song Han、Han Cai、Mike Zheng Shou。原始训练代码在 <a href="https://github.com/NVlabs/AnyFlow" rel="nofollow"><code>NVlabs/AnyFlow</code></a>,项目主页是 <a href="https://nvlabs.github.io/AnyFlow" rel="nofollow">nvlabs.github.io/AnyFlow</a>,4 个发布 checkpoint 归在 <a href="https://huggingface.co/collections/nvidia/anyflow" rel="nofollow"><code>nvidia/anyflow</code></a> Hugging Face collection 里。',Ml,I,Ll="本文档梳理实战要点:怎么选 pipeline、怎么用 any-step 采样、怎么把 AnyFlow 嵌进 T2V / I2V / V2V 工作流。",Tl,b,Ul,g,ql="AnyFlow 提供两个 pipeline 形态,scheduler 和蒸馏方法相同,区别在于<strong>怎么对帧采样</strong>:",cl,V,Pl=`<li><a href="../api/pipelines/anyflow#anyflowpipeline"><code>AnyFlowPipeline</code></a> —— <strong>bidirectional</strong> T2V。一次性对整个
视频张量去噪,全局自注意力。<strong>纯 prompt 输入、不要流式输出</strong>时选这个。</li> <li><a href="../api/pipelines/anyflow#anyflowfarpipeline"><code>AnyFlowFARPipeline</code></a> —— <strong>causal (FAR)</strong>。
按 chunk 分段去噪,块稀疏因果注意力 + 跨 chunk 复用 KV cache。<strong>图生视频 (I2V)</strong>、<strong>视频续写 (V2V)</strong>、
或任何受益于逐帧自回归采样的场景选这个。同一个模型通过 <code>video</code>(像素空间)或 <code>video_latents</code>
(已编码 latent)这两个互斥 kwarg 来切换三种任务模式。</li>`,yl,B,Kl="简化对照表:",rl,Q,le="<thead><tr><th>场景</th> <th>Pipeline</th> <th>调用方式</th></tr></thead> <tbody><tr><td>纯文生视频,固定 NFE 求最大质量</td> <td><code>AnyFlowPipeline</code></td> <td><code>pipe(prompt, ...)</code></td></tr> <tr><td>图生视频(首帧给定)</td> <td><code>AnyFlowFARPipeline</code></td> <td><code>pipe(prompt, video=&lt;单帧 tensor&gt;, ...)</code></td></tr> <tr><td>视频续写 / V2V</td> <td><code>AnyFlowFARPipeline</code></td> <td><code>pipe(prompt, video=&lt;多帧 tensor&gt;, ...)</code></td></tr> <tr><td>流式 / 渐进式生成</td> <td><code>AnyFlowFARPipeline</code></td> <td>—</td></tr></tbody>",ml,F,ee=`高分辨率下 bidirectional 单 token 更快;causal 牺牲一点单步速度,换来在所有 latent 帧分配前就能开始
采样的能力,对超长序列尤其有用。`,dl,R,ul,Z,se="NVIDIA 发布了 4 个 AnyFlow checkpoint,pipeline × 规模各一份:",wl,k,hl,E,te=`四个 checkpoint 共用同一份 <a href="../api/schedulers/flow_map_euler_discrete"><code>FlowMapEulerDiscreteScheduler</code></a>,
默认 <code>shift=5.0</code>。`,jl,v,fl,G,ne=`AnyFlow 最关键的特性是同一个 checkpoint <strong>不需重新调度</strong>,NFE 越大质量越高。固定 prompt、扫一下步数
就能看出模型怎么在延迟和保真度之间权衡:`,Cl,N,Il,A,ae=`paper 的 Tab 3 / Fig 1 表明:每个 AnyFlow checkpoint 在 4 → 32 NFE 范围 VBench Quality 都单调上升,而
consistency 类基线(rCM、Self-Forcing)在同区间反而掉点。`,bl,m,pe=`<p>Classifier-free guidance (CFG) 已经在训练阶段融进权重。pipeline 推理
时<strong>不会</strong>再跑一次 unconditional 前向 —— guidance 直接由蒸馏后的权重带出。release 出来的 checkpoint
都用默认的 <code>guidance_scale=1.0</code> 即可。</p>`,gl,W,Vl,_,ie="Causal pipeline 用同一个蒸馏模型支持三种任务模式,<strong>通过 <code>video</code> / <code>video_latents</code> 二选一来选</strong>:",Bl,$,Je="<li><code>video</code> —— 像素空间张量,形状 <code>(B, T, C, H, W)</code> ∈ <code>[0, 1]</code>,pipeline 内部会过一遍 <code>VideoProcessor</code> <ul><li>VAE 编码;</li></ul></li> <li><code>video_latents</code> —— 已经在模型布局下的 latent,跳过 VAE 编码;</li> <li>两者都不传 —— 纯文生视频;</li> <li>两者同时传 —— 抛 <code>ValueError</code>(互斥)。</li>",Ql,x,oe="Context tensor 的帧数必须满足 <code>T = 4n + 1</code>,跟 VAE 时间步长对齐。",Fl,d,Me=`<p>FAR pipeline 是分块 (chunk) rollout,<code>num_frames</code> 必须配合 chunk 调度。发布的 checkpoint 在
transformer config 里写入 <code>chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2]</code>(求和 21),对应标准
<code>num_frames=81</code>(21 = (81 − 1) // 4 + 1)。改 <code>num_frames</code> 时<strong>必须</strong>显式传匹配的 <code>chunk_partition</code>,
使其求和等于 <code>(num_frames - 1) // 4 + 1</code>,否则 pipeline 会抛 <code>ValueError</code>。比如 <code>num_frames=33</code> 对应
9 个 latent 帧,可用 <code>chunk_partition=[1, 4, 4]</code>。</p>`,Rl,D,Zl,S,Te=`底层 patchify chunk 调度根据 <code>video</code> / <code>video_latents</code> 是否给定自动调整:纯文生用 kernel 2 (full) 和
4 (compressed);有 context 时第一个 chunk 改成 kernel 1,让条件帧保留全分辨率。`,kl,Y,Ue=`如果你已经有 VAE 编码过的 latent,可以直接传 <code>video_latents=&lt;tensor&gt;</code> 跳过 <code>vae_encode</code> 步骤
(和 <code>video</code> 互斥)。`,El,O,vl,X,ce=`两个 pipeline 都复用 <a href="../api/loaders/lora"><code>WanLoraLoaderMixin</code></a>,因此为对应 Wan2.1 backbone 训练的
LoRA adapter 直接加载即可:`,Gl,z,Nl,H,ye=`如果要做<strong>继续 on-policy 蒸馏微调</strong>(用论文里相同的 DMD 反向散度监督配方训新 LoRA),请参考原始
AnyFlow 训练框架 <a href="https://github.com/NVlabs/AnyFlow" rel="nofollow"><code>NVlabs/AnyFlow</code></a>,这套训练流程不在
diffusers 范围内。`,Al,L,Wl,q,re=`<li><strong>永远 <code>guidance_scale=1.0</code>。</strong> 蒸馏后的 checkpoint 已经把 CFG 融进权重。设 <code>&gt; 1</code> 会多跑一遍
unconditional 前向、延迟翻倍、质量微降。</li> <li><strong>Bidirectional pipeline 不支持流式。</strong> 所有 <code>num_frames</code> 一起去噪。需要边采边播请用 causal pipeline。</li> <li><strong>Causal pipeline KV cache 假设 chunk 调度跨调用一致。</strong> 中途重建 cache 不被 release 模型支持。</li> <li><strong><code>num_frames</code> 必须满足 VAE 时间步长。</strong> release checkpoint 用 <code>(N - 1) % 4 == 0</code> 的值(如 9、17、33、81)。</li>`,_l,P,$l,K,xl,ll,Dl,sl,Sl;return w=new Ie({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),h=new u({props:{title:"AnyFlow",local:"anyflow",headingTag:"h1"}}),b=new u({props:{title:"Bidirectional 还是 Causal —— 怎么选 pipeline",local:"bidirectional-还是-causal--怎么选-pipeline",headingTag:"h2"}}),R=new u({props:{title:"加载 checkpoint",local:"加载-checkpoint",headingTag:"h2"}}),k=new tl({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQW55Rmxvd1BpcGVsaW5lJTJDJTIwQW55Rmxvd0ZBUlBpcGVsaW5lJTBBJTBBJTIzJTIwQmlkaXJlY3Rpb25hbCUyQyUyMCVFOCVCRCVCQiVFOSU4NyU4RiUwQXBpcGUlMjAlM0QlMjBBbnlGbG93UGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMm52aWRpYSUyRkFueUZsb3ctV2FuMi4xLVQyVi0xLjNCLURpZmZ1c2VycyUyMiUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMEEpLnRvKCUyMmN1ZGElMjIpJTBBJTBBJTIzJTIwQmlkaXJlY3Rpb25hbCUyQyUyMCVFNiVCQiVBMSVFOCVBMSU4MCUwQXBpcGUlMjAlM0QlMjBBbnlGbG93UGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMm52aWRpYSUyRkFueUZsb3ctV2FuMi4xLVQyVi0xNEItRGlmZnVzZXJzJTIyJTJDJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5iZmxvYXQxNiUwQSkudG8oJTIyY3VkYSUyMiklMEElMEElMjMlMjBDYXVzYWwlMjAoRkFSKSUyQyUyMDEuM0IlMEFwaXBlJTIwJTNEJTIwQW55Rmxvd0ZBUlBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJudmlkaWElMkZBbnlGbG93LUZBUi1XYW4yLjEtMS4zQi1EaWZmdXNlcnMlMjIlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmJmbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQSUwQSUyMyUyMENhdXNhbCUyMChGQVIpJTJDJTIwMTRCJTBBcGlwZSUyMCUzRCUyMEFueUZsb3dGQVJQaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIybnZpZGlhJTJGQW55Rmxvdy1GQVItV2FuMi4xLTE0Qi1EaWZmdXNlcnMlMjIlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmJmbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AnyFlowPipeline, AnyFlowFARPipeline
<span class="hljs-comment"># Bidirectional, 轻量</span>
pipe = AnyFlowPipeline.from_pretrained(
<span class="hljs-string">&quot;nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers&quot;</span>, torch_dtype=torch.bfloat16
).to(<span class="hljs-string">&quot;cuda&quot;</span>)
<span class="hljs-comment"># Bidirectional, 满血</span>
pipe = AnyFlowPipeline.from_pretrained(
<span class="hljs-string">&quot;nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers&quot;</span>, torch_dtype=torch.bfloat16
).to(<span class="hljs-string">&quot;cuda&quot;</span>)
<span class="hljs-comment"># Causal (FAR), 1.3B</span>
pipe = AnyFlowFARPipeline.from_pretrained(
<span class="hljs-string">&quot;nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers&quot;</span>, torch_dtype=torch.bfloat16
).to(<span class="hljs-string">&quot;cuda&quot;</span>)
<span class="hljs-comment"># Causal (FAR), 14B</span>
pipe = AnyFlowFARPipeline.from_pretrained(
<span class="hljs-string">&quot;nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers&quot;</span>, torch_dtype=torch.bfloat16
).to(<span class="hljs-string">&quot;cuda&quot;</span>)`,lang:"py",wrap:!1}}),v=new u({props:{title:"Any-step 采样",local:"any-step-采样",headingTag:"h2"}}),N=new tl({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQW55Rmxvd1BpcGVsaW5lJTBBZnJvbSUyMGRpZmZ1c2Vycy51dGlscyUyMGltcG9ydCUyMGV4cG9ydF90b192aWRlbyUwQSUwQXBpcGUlMjAlM0QlMjBBbnlGbG93UGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMm52aWRpYSUyRkFueUZsb3ctV2FuMi4xLVQyVi0xLjNCLURpZmZ1c2VycyUyMiUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMEEpLnRvKCUyMmN1ZGElMjIpJTBBJTBBcHJvbXB0JTIwJTNEJTIwJTIyJUU2JUEzJUFFJUU2JTlFJTk3JUU5JTg3JThDJUU0JUI4JTgwJUU1JThGJUFBJUU1JUIwJThGJUU3JTg2JThBJUU3JThDJUFCJUU1JTlDJUE4JUU1JTk1JTgzJUU3JUFCJUI5JUU1JUFEJTkwJUVGJUJDJThDJUU3JTk0JUI1JUU1JUJEJUIxJUU2JTg0JTlGJUU1JTg1JTg5JUU3JTg1JUE3JTIyJTBBJTBBZm9yJTIwbmZlJTIwaW4lMjAlNUIxJTJDJTIwMiUyQyUyMDQlMkMlMjA4JTJDJTIwMTYlMkMlMjAzMiU1RCUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMCVFNiVBRiU4RiVFOCVCRCVBRSVFOSU4NyU4RCVFNSVCQiVCQSUyMGdlbmVyYXRvciUyMCVFMiU4MCU5NCVFMiU4MCU5NCUyMCVFOCVCRiU5OSVFNiVBMCVCNyVFOCVCNyVBOCVFNiVBRCVBNSVFNiU5NSVCMCVFNSVBRiVCOSVFNiVBRiU5NCVFNiU5NyVCNiVFNSU5NCVBRiVFNCVCOCU4MCVFNSU4RiU5OCVFOSU4NyU4RiVFNiU5OCVBRiUyME5GRSVFMyU4MCU4MiUwQSUyMCUyMCUyMCUyMGdlbmVyYXRvciUyMCUzRCUyMHRvcmNoLkdlbmVyYXRvciglMjJjdWRhJTIyKS5tYW51YWxfc2VlZCgwKSUwQSUyMCUyMCUyMCUyMHZpZGVvJTIwJTNEJTIwcGlwZShwcm9tcHQlMkMlMjBudW1faW5mZXJlbmNlX3N0ZXBzJTNEbmZlJTJDJTIwbnVtX2ZyYW1lcyUzRDgxJTJDJTIwZ2VuZXJhdG9yJTNEZ2VuZXJhdG9yKS5mcmFtZXMlNUIwJTVEJTBBJTIwJTIwJTIwJTIwZXhwb3J0X3RvX3ZpZGVvKHZpZGVvJTJDJTIwZiUyMm91dF9uZmUlN0JuZmUlN0QubXA0JTIyJTJDJTIwZnBzJTNEMTYp",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AnyFlowPipeline
<span class="hljs-keyword">from</span> diffusers.utils <span class="hljs-keyword">import</span> export_to_video
pipe = AnyFlowPipeline.from_pretrained(
<span class="hljs-string">&quot;nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers&quot;</span>, torch_dtype=torch.bfloat16
).to(<span class="hljs-string">&quot;cuda&quot;</span>)
prompt = <span class="hljs-string">&quot;森林里一只小熊猫在啃竹子,电影感光照&quot;</span>
<span class="hljs-keyword">for</span> nfe <span class="hljs-keyword">in</span> [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">4</span>, <span class="hljs-number">8</span>, <span class="hljs-number">16</span>, <span class="hljs-number">32</span>]:
<span class="hljs-comment"># 每轮重建 generator —— 这样跨步数对比时唯一变量是 NFE。</span>
generator = torch.Generator(<span class="hljs-string">&quot;cuda&quot;</span>).manual_seed(<span class="hljs-number">0</span>)
video = pipe(prompt, num_inference_steps=nfe, num_frames=<span class="hljs-number">81</span>, generator=generator).frames[<span class="hljs-number">0</span>]
export_to_video(video, <span class="hljs-string">f&quot;out_nfe<span class="hljs-subst">{nfe}</span>.mp4&quot;</span>, fps=<span class="hljs-number">16</span>)`,lang:"py",wrap:!1}}),W=new u({props:{title:"图生视频 与 视频续写",local:"图生视频-与-视频续写",headingTag:"h2"}}),D=new tl({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBaW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQW55Rmxvd0ZBUlBpcGVsaW5lJTBBZnJvbSUyMGRpZmZ1c2Vycy51dGlscyUyMGltcG9ydCUyMGV4cG9ydF90b192aWRlbyUyQyUyMGxvYWRfaW1hZ2UlMkMlMjBsb2FkX3ZpZGVvJTBBJTBBcGlwZSUyMCUzRCUyMEFueUZsb3dGQVJQaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIybnZpZGlhJTJGQW55Rmxvdy1GQVItV2FuMi4xLTEuM0ItRGlmZnVzZXJzJTIyJTJDJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5iZmxvYXQxNiUwQSkudG8oJTIyY3VkYSUyMiklMEElMEElMEFkZWYlMjB0b192aWRlb190ZW5zb3IoaW1hZ2VzJTJDJTIwaGVpZ2h0JTNENDgwJTJDJTIwd2lkdGglM0Q4MzIpJTNBJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyJUU2JThBJThBJTIwUElMJTIwJUU1JTg4JTk3JUU4JUExJUE4JUU4JUJEJUFDJUU2JTg4JTkwJTIwRkFSJTIwcGlwZWxpbmUlMjAlRTklOUMlODAlRTglQTYlODElRTclOUElODQlMjAoQiUyQyUyMFQlMkMlMjBDJTJDJTIwSCUyQyUyMFcpJTIwJTVCMCUyQyUyMDElNUQlMjAlRTUlQkMlQTAlRTklODclOEYlRTMlODAlODIlMjIlMjIlMjIlMEElMjAlMjAlMjAlMjBmcmFtZXMlMjAlM0QlMjBucC5zdGFjayglNUJucC5hc2FycmF5KGltZy5yZXNpemUoKHdpZHRoJTJDJTIwaGVpZ2h0KSkpJTIwZm9yJTIwaW1nJTIwaW4lMjBpbWFnZXMlNUQpLmFzdHlwZSglMjJmbG9hdDMyJTIyKSUyMCUyRiUyMDI1NS4wJTBBJTIwJTIwJTIwJTIwJTIzJTIwZnJhbWVzJTNBJTIwKFQlMkMlMjBIJTJDJTIwVyUyQyUyMEMpJTIwJUUyJTg2JTkyJTIwKFQlMkMlMjBDJTJDJTIwSCUyQyUyMFcpJTIwJUUyJTg2JTkyJTIwJUU1JThBJUEwJTIwYmF0Y2glMjAlRTclQkIlQjQlMjAlRTIlODYlOTIlMjAoMSUyQyUyMFQlMkMlMjBDJTJDJTIwSCUyQyUyMFcpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9yY2guZnJvbV9udW1weShmcmFtZXMpLnBlcm11dGUoMCUyQyUyMDMlMkMlMjAxJTJDJTIwMikudW5zcXVlZXplKDApJTBBJTBBJTBBJTIzJTIwMSklMjAlRTYlOTYlODclRTclOTQlOUYlRTglQTclODYlRTklQTIlOTElRUYlQkMlODglRTYlOTclQTAlMjBjb250ZXh0JUVGJUJDJTg5JUUzJTgwJTgyODElMjAlRTUlQjglQTclRTUlOEMlQjklRTklODUlOEQlRTklQkIlOTglRTglQUUlQTQlMjBjaHVua19wYXJ0aXRpb24lRTMlODAlODIlMEF2aWRlbyUyMCUzRCUyMHBpcGUocHJvbXB0JTNEJTIyJUU0JUI4JTgwJUU1JThGJUFBJUU3JThDJUFCJUU1JTlDJUE4JUU1JUE0JTk1JUU5JTk4JUIzJUU0JUI4JThCJUU1JTg2JUIyJUU2JUI1JUFBJTIyJTJDJTIwbnVtX2luZmVyZW5jZV9zdGVwcyUzRDQlMkMlMjBudW1fZnJhbWVzJTNEODEpLmZyYW1lcyU1QjAlNUQlMEFleHBvcnRfdG9fdmlkZW8odmlkZW8lMkMlMjAlMjJ0MnYubXA0JTIyJTJDJTIwZnBzJTNEMTYpJTBBJTBBJTIzJTIwMiklMjAlRTUlOUIlQkUlRTclOTQlOUYlRTglQTclODYlRTklQTIlOTElMjAlRTIlODAlOTQlRTIlODAlOTQlMjAlRTUlOEQlOTUlRTUlQjglQTclMjBjb250ZXh0JTIwJUU3JUJCJThGJUU4JUJGJTg3JTIwVkFFJTIwJUU2JTk4JUFGJTIwMSUyMCVFNCVCOCVBQSUyMGxhdGVudCVFRiVCQyU4QyVFNiVBRCVBMyVFNSVBNSVCRCVFNSVBRiVCOSVFNCVCOCU4QSVFOSVCQiU5OCVFOCVBRSVBNCUyMGNodW5rX3BhcnRpdGlvbiUyMCVFNyU5QSU4NCVFNyVBQyVBQyVFNCVCOCU4MCVFOSVBMSVCOSUyMCglNjAlNUIxJTJDJTIwLi4uJTVEJTYwKSVFMyU4MCU4MiUwQWZpcnN0X2ZyYW1lJTIwJTNEJTIwbG9hZF9pbWFnZSglMjJwYXRoJTJGdG8lMkZmaXJzdF9mcmFtZS5wbmclMjIpJTBBY29udGV4dF90ZW5zb3IlMjAlM0QlMjB0b192aWRlb190ZW5zb3IoJTVCZmlyc3RfZnJhbWUlNUQpLnRvKCUyMmN1ZGElMjIpJTIwJTIwJTIzJTIwKDElMkMlMjAxJTJDJTIwMyUyQyUyMDQ4MCUyQyUyMDgzMiklMkMlMjAlNUIwJTJDJTIwMSU1RCUwQXZpZGVvJTIwJTNEJTIwcGlwZSglMEElMjAlMjAlMjAlMjBwcm9tcHQlM0QlMjIlRTQlQjglODAlRTUlOEYlQUElRTclOEMlQUIlRTglQjUlQjAlRTglQkYlODclRTklOTglQjMlRTUlODUlODklRTQlQjglOEIlRTclOUElODQlRTglOEQlODklRTUlOUQlQUElMjIlMkMlMEElMjAlMjAlMjAlMjB2aWRlbyUzRGNvbnRleHRfdGVuc29yJTJDJTBBJTIwJTIwJTIwJTIwbnVtX2luZmVyZW5jZV9zdGVwcyUzRDQlMkMlMEElMjAlMjAlMjAlMjBudW1fZnJhbWVzJTNEODElMkMlMEEpLmZyYW1lcyU1QjAlNUQlMEFleHBvcnRfdG9fdmlkZW8odmlkZW8lMkMlMjAlMjJpMnYubXA0JTIyJTJDJTIwZnBzJTNEMTYpJTBBJTBBJTIzJTIwMyklMjAlRTglQTclODYlRTklQTIlOTElRTclQkIlQUQlRTUlODYlOTklRTMlODAlODI5JTIwJUU1JUI4JUE3JTIwcmF3JTIwY29udGV4dCUyMCVFMiU4NiU5MiUyMDMlMjAlRTQlQjglQUElMjBsYXRlbnQlMjBjb250ZXh0JUVGJUJDJTlCJUU2JTk4JUJFJUU1JUJDJThGJUU4JUE2JTg2JUU3JTlCJTk2JTIwY2h1bmtfcGFydGl0aW9uJUVGJUJDJThDJUU4JUFFJUE5JUU3JUFDJUFDJUU0JUI4JTgwJUU1JTlEJTk3JUU2JUFEJUEzJUU1JUE1JUJEJUU4JUE2JTg2JUU3JTlCJTk2JTIwY29udGV4dCVFMyU4MCU4MiUwQWNvbnRleHRfZnJhbWVzJTIwJTNEJTIwbG9hZF92aWRlbyglMjJwYXRoJTJGdG8lMkZjb250ZXh0Lm1wNCUyMiklNUIlM0E5JTVEJTIwJTIwJTIzJTIwOSUyMCUzRCUyMDQlQzIlQjcyJTIwJTJCJTIwMSUwQWNvbnRleHRfdGVuc29yJTIwJTNEJTIwdG9fdmlkZW9fdGVuc29yKGNvbnRleHRfZnJhbWVzKS50byglMjJjdWRhJTIyKSUyMCUyMCUyMyUyMCgxJTJDJTIwOSUyQyUyMDMlMkMlMjA0ODAlMkMlMjA4MzIpJTBBdmlkZW8lMjAlM0QlMjBwaXBlKCUwQSUyMCUyMCUyMCUyMHByb21wdCUzRCUyMiVFNyVCQiVBNyVFNyVCQiVBRCVFOCVCRiU5OSVFNCVCOCVBQSVFNiU5NSU4NSVFNCVCQSU4QiUyMiUyQyUwQSUyMCUyMCUyMCUyMHZpZGVvJTNEY29udGV4dF90ZW5zb3IlMkMlMEElMjAlMjAlMjAlMjBudW1faW5mZXJlbmNlX3N0ZXBzJTNENCUyQyUwQSUyMCUyMCUyMCUyMG51bV9mcmFtZXMlM0Q4MSUyQyUwQSUyMCUyMCUyMCUyMGNodW5rX3BhcnRpdGlvbiUzRCU1QjMlMkMlMjAzJTJDJTIwMyUyQyUyMDMlMkMlMjAzJTJDJTIwMyUyQyUyMDMlNUQlMkMlMjAlMjAlMjMlMjA3JTIwJUU0JUI4JUFBJTIwY2h1bmslMjAlQzMlOTclMjAzJTIwJTNEJTIwMjElMjBsYXRlbnQlRUYlQkMlOUIlRTklQTYlOTYlRTUlOUQlOTclRTUlQjAlQjElRTYlOTglQUYlMjBjb250ZXh0JTBBKS5mcmFtZXMlNUIwJTVEJTBBZXhwb3J0X3RvX3ZpZGVvKHZpZGVvJTJDJTIwJTIydjJ2Lm1wNCUyMiUyQyUyMGZwcyUzRDE2KQ==",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AnyFlowFARPipeline
<span class="hljs-keyword">from</span> diffusers.utils <span class="hljs-keyword">import</span> export_to_video, load_image, load_video
pipe = AnyFlowFARPipeline.from_pretrained(
<span class="hljs-string">&quot;nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers&quot;</span>, torch_dtype=torch.bfloat16
).to(<span class="hljs-string">&quot;cuda&quot;</span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">to_video_tensor</span>(<span class="hljs-params">images, height=<span class="hljs-number">480</span>, width=<span class="hljs-number">832</span></span>):
<span class="hljs-string">&quot;&quot;&quot;把 PIL 列表转成 FAR pipeline 需要的 (B, T, C, H, W) [0, 1] 张量。&quot;&quot;&quot;</span>
frames = np.stack([np.asarray(img.resize((width, height))) <span class="hljs-keyword">for</span> img <span class="hljs-keyword">in</span> images]).astype(<span class="hljs-string">&quot;float32&quot;</span>) / <span class="hljs-number">255.0</span>
<span class="hljs-comment"># frames: (T, H, W, C) → (T, C, H, W) → 加 batch 维 → (1, T, C, H, W)</span>
<span class="hljs-keyword">return</span> torch.from_numpy(frames).permute(<span class="hljs-number">0</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>).unsqueeze(<span class="hljs-number">0</span>)
<span class="hljs-comment"># 1) 文生视频(无 context)。81 帧匹配默认 chunk_partition。</span>
video = pipe(prompt=<span class="hljs-string">&quot;一只猫在夕阳下冲浪&quot;</span>, num_inference_steps=<span class="hljs-number">4</span>, num_frames=<span class="hljs-number">81</span>).frames[<span class="hljs-number">0</span>]
export_to_video(video, <span class="hljs-string">&quot;t2v.mp4&quot;</span>, fps=<span class="hljs-number">16</span>)
<span class="hljs-comment"># 2) 图生视频 —— 单帧 context 经过 VAE 是 1 个 latent,正好对上默认 chunk_partition 的第一项 (\`[1, ...]\`)。</span>
first_frame = load_image(<span class="hljs-string">&quot;path/to/first_frame.png&quot;</span>)
context_tensor = to_video_tensor([first_frame]).to(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-comment"># (1, 1, 3, 480, 832), [0, 1]</span>
video = pipe(
prompt=<span class="hljs-string">&quot;一只猫走过阳光下的草坪&quot;</span>,
video=context_tensor,
num_inference_steps=<span class="hljs-number">4</span>,
num_frames=<span class="hljs-number">81</span>,
).frames[<span class="hljs-number">0</span>]
export_to_video(video, <span class="hljs-string">&quot;i2v.mp4&quot;</span>, fps=<span class="hljs-number">16</span>)
<span class="hljs-comment"># 3) 视频续写。9 帧 raw context → 3 个 latent context;显式覆盖 chunk_partition,让第一块正好覆盖 context。</span>
context_frames = load_video(<span class="hljs-string">&quot;path/to/context.mp4&quot;</span>)[:<span class="hljs-number">9</span>] <span class="hljs-comment"># 9 = 4·2 + 1</span>
context_tensor = to_video_tensor(context_frames).to(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-comment"># (1, 9, 3, 480, 832)</span>
video = pipe(
prompt=<span class="hljs-string">&quot;继续这个故事&quot;</span>,
video=context_tensor,
num_inference_steps=<span class="hljs-number">4</span>,
num_frames=<span class="hljs-number">81</span>,
chunk_partition=[<span class="hljs-number">3</span>, <span class="hljs-number">3</span>, <span class="hljs-number">3</span>, <span class="hljs-number">3</span>, <span class="hljs-number">3</span>, <span class="hljs-number">3</span>, <span class="hljs-number">3</span>], <span class="hljs-comment"># 7 个 chunk × 3 = 21 latent;首块就是 context</span>
).frames[<span class="hljs-number">0</span>]
export_to_video(video, <span class="hljs-string">&quot;v2v.mp4&quot;</span>, fps=<span class="hljs-number">16</span>)`,lang:"py",wrap:!1}}),O=new u({props:{title:"LoRA 微调",local:"lora-微调",headingTag:"h2"}}),z=new tl({props:{code:"cGlwZS5sb2FkX2xvcmFfd2VpZ2h0cyglMjJwYXRoJTJGb3IlMkZyZXBvJTJGd2l0aCUyRndhbl9sb3JhJTIyKQ==",highlighted:'pipe.load_lora_weights(<span class="hljs-string">&quot;path/or/repo/with/wan_lora&quot;</span>)',lang:"py",wrap:!1}}),L=new u({props:{title:"常见坑",local:"常见坑",headingTag:"h2"}}),P=new u({props:{title:"引用",local:"引用",headingTag:"h2"}}),K=new tl({props:{code:"JTQwbWlzYyU3Qmd1MjAyNmFueWZsb3dhbnlzdGVwdmlkZW9kaWZmdXNpb24lMkMlMEElMjAlMjB0aXRsZSUzRCU3QkFueUZsb3clM0ElMjBBbnktU3RlcCUyMFZpZGVvJTIwRGlmZnVzaW9uJTIwTW9kZWwlMjB3aXRoJTIwT24tUG9saWN5JTIwRmxvdyUyME1hcCUyMERpc3RpbGxhdGlvbiU3RCUyQyUwQSUyMCUyMGF1dGhvciUzRCU3Qll1Y2hhbyUyMEd1JTIwYW5kJTIwR3VpYW4lMjBGYW5nJTIwYW5kJTIwWXV4aW4lMjBKaWFuZyUyMGFuZCUyMFdlaWppYSUyME1hbyUyMGFuZCUyMFNvbmclMjBIYW4lMjBhbmQlMjBIYW4lMjBDYWklMjBhbmQlMjBNaWtlJTIwWmhlbmclMjBTaG91JTdEJTJDJTBBJTIwJTIweWVhciUzRCU3QjIwMjYlN0QlMkMlMEElMjAlMjBlcHJpbnQlM0QlN0IyNjA1LjEzNzI0JTdEJTJDJTBBJTIwJTIwYXJjaGl2ZVByZWZpeCUzRCU3QmFyWGl2JTdEJTJDJTBBJTIwJTIwcHJpbWFyeUNsYXNzJTNEJTdCY3MuQ1YlN0QlMkMlMEElMjAlMjB1cmwlM0QlN0JodHRwcyUzQSUyRiUyRmFyeGl2Lm9yZyUyRmFicyUyRjI2MDUuMTM3MjQlN0QlMkMlMEElN0QlMEElMEElNDBhcnRpY2xlJTdCZ3UyMDI1bG9uZyUyQyUwQSUyMCUyMHRpdGxlJTNEJTdCTG9uZy1Db250ZXh0JTIwQXV0b3JlZ3Jlc3NpdmUlMjBWaWRlbyUyME1vZGVsaW5nJTIwd2l0aCUyME5leHQtRnJhbWUlMjBQcmVkaWN0aW9uJTdEJTJDJTBBJTIwJTIwYXV0aG9yJTNEJTdCR3UlMkMlMjBZdWNoYW8lMjBhbmQlMjBNYW8lMkMlMjBXZWlqaWElMjBhbmQlMjBTaG91JTJDJTIwTWlrZSUyMFpoZW5nJTdEJTJDJTBBJTIwJTIwam91cm5hbCUzRCU3QmFyWGl2JTIwcHJlcHJpbnQlMjBhclhpdiUzQTI1MDMuMTkzMjUlN0QlMkMlMEElMjAlMjB5ZWFyJTNEJTdCMjAyNSU3RCUwQSU3RA==",highlighted:`<span class="language-xml">@misc</span><span class="hljs-template-variable">{gu2026anyflowanystepvideodiffusion,
title={AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation}</span><span class="language-xml">,
author=</span><span class="hljs-template-variable">{Yuchao Gu and Guian Fang and Yuxin Jiang and Weijia Mao and Song Han and Han Cai and Mike Zheng Shou}</span><span class="language-xml">,
year=</span><span class="hljs-template-variable">{2026}</span><span class="language-xml">,
eprint=</span><span class="hljs-template-variable">{2605.13724}</span><span class="language-xml">,
archivePrefix=</span><span class="hljs-template-variable">{arXiv}</span><span class="language-xml">,
primaryClass=</span><span class="hljs-template-variable">{cs.CV}</span><span class="language-xml">,
url=</span><span class="hljs-template-variable">{https://arxiv.org/abs/2605.13724}</span><span class="language-xml">,
}
@article</span><span class="hljs-template-variable">{gu2025long,
title={Long-Context Autoregressive Video Modeling with Next-Frame Prediction}</span><span class="language-xml">,
author=</span><span class="hljs-template-variable">{Gu, Yuchao and Mao, Weijia and Shou, Mike Zheng}</span><span class="language-xml">,
journal=</span><span class="hljs-template-variable">{arXiv preprint arXiv:2503.19325}</span><span class="language-xml">,
year=</span><span class="hljs-template-variable">{2025}</span><span class="language-xml">
}</span>`,lang:"bibtex",wrap:!1}}),ll=new be({props:{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/using-diffusers/anyflow.md"}}),{c(){r=p("meta"),nl=n(),el=p("p"),al=n(),o(w.$$.fragment),pl=n(),o(h.$$.fragment),il=n(),j=p("p"),j.innerHTML=Xl,Jl=n(),f=p("p"),f.innerHTML=zl,ol=n(),C=p("p"),C.innerHTML=Hl,Ml=n(),I=p("p"),I.textContent=Ll,Tl=n(),o(b.$$.fragment),Ul=n(),g=p("p"),g.innerHTML=ql,cl=n(),V=p("ul"),V.innerHTML=Pl,yl=n(),B=p("p"),B.textContent=Kl,rl=n(),Q=p("table"),Q.innerHTML=le,ml=n(),F=p("p"),F.textContent=ee,dl=n(),o(R.$$.fragment),ul=n(),Z=p("p"),Z.textContent=se,wl=n(),o(k.$$.fragment),hl=n(),E=p("p"),E.innerHTML=te,jl=n(),o(v.$$.fragment),fl=n(),G=p("p"),G.innerHTML=ne,Cl=n(),o(N.$$.fragment),Il=n(),A=p("p"),A.textContent=ae,bl=n(),m=p("blockquote"),m.innerHTML=pe,gl=n(),o(W.$$.fragment),Vl=n(),_=p("p"),_.innerHTML=ie,Bl=n(),$=p("ul"),$.innerHTML=Je,Ql=n(),x=p("p"),x.innerHTML=oe,Fl=n(),d=p("blockquote"),d.innerHTML=Me,Rl=n(),o(D.$$.fragment),Zl=n(),S=p("p"),S.innerHTML=Te,kl=n(),Y=p("p"),Y.innerHTML=Ue,El=n(),o(O.$$.fragment),vl=n(),X=p("p"),X.innerHTML=ce,Gl=n(),o(z.$$.fragment),Nl=n(),H=p("p"),H.innerHTML=ye,Al=n(),o(L.$$.fragment),Wl=n(),q=p("ul"),q.innerHTML=re,_l=n(),o(P.$$.fragment),$l=n(),o(K.$$.fragment),xl=n(),o(ll.$$.fragment),Dl=n(),sl=p("p"),this.h()},l(l){const e=fe("svelte-u9bgzb",document.head);r=i(e,"META",{name:!0,content:!0}),e.forEach(s),nl=a(l),el=i(l,"P",{}),me(el).forEach(s),al=a(l),M(w.$$.fragment,l),pl=a(l),M(h.$$.fragment,l),il=a(l),j=i(l,"P",{"data-svelte-h":!0}),J(j)!=="svelte-x7hf4q"&&(j.innerHTML=Xl),Jl=a(l),f=i(l,"P",{"data-svelte-h":!0}),J(f)!=="svelte-1g3jlq0"&&(f.innerHTML=zl),ol=a(l),C=i(l,"P",{"data-svelte-h":!0}),J(C)!=="svelte-1kh0gnb"&&(C.innerHTML=Hl),Ml=a(l),I=i(l,"P",{"data-svelte-h":!0}),J(I)!=="svelte-1g7eyu5"&&(I.textContent=Ll),Tl=a(l),M(b.$$.fragment,l),Ul=a(l),g=i(l,"P",{"data-svelte-h":!0}),J(g)!=="svelte-c2dmjc"&&(g.innerHTML=ql),cl=a(l),V=i(l,"UL",{"data-svelte-h":!0}),J(V)!=="svelte-1yhoz96"&&(V.innerHTML=Pl),yl=a(l),B=i(l,"P",{"data-svelte-h":!0}),J(B)!=="svelte-nhe92g"&&(B.textContent=Kl),rl=a(l),Q=i(l,"TABLE",{"data-svelte-h":!0}),J(Q)!=="svelte-1r1r6ai"&&(Q.innerHTML=le),ml=a(l),F=i(l,"P",{"data-svelte-h":!0}),J(F)!=="svelte-147wpe4"&&(F.textContent=ee),dl=a(l),M(R.$$.fragment,l),ul=a(l),Z=i(l,"P",{"data-svelte-h":!0}),J(Z)!=="svelte-1ivm4tg"&&(Z.textContent=se),wl=a(l),M(k.$$.fragment,l),hl=a(l),E=i(l,"P",{"data-svelte-h":!0}),J(E)!=="svelte-9t7fux"&&(E.innerHTML=te),jl=a(l),M(v.$$.fragment,l),fl=a(l),G=i(l,"P",{"data-svelte-h":!0}),J(G)!=="svelte-1t8mtgo"&&(G.innerHTML=ne),Cl=a(l),M(N.$$.fragment,l),Il=a(l),A=i(l,"P",{"data-svelte-h":!0}),J(A)!=="svelte-1bqpcv3"&&(A.textContent=ae),bl=a(l),m=i(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),J(m)!=="svelte-19oa2n2"&&(m.innerHTML=pe),gl=a(l),M(W.$$.fragment,l),Vl=a(l),_=i(l,"P",{"data-svelte-h":!0}),J(_)!=="svelte-q7gkj0"&&(_.innerHTML=ie),Bl=a(l),$=i(l,"UL",{"data-svelte-h":!0}),J($)!=="svelte-1o3kz10"&&($.innerHTML=Je),Ql=a(l),x=i(l,"P",{"data-svelte-h":!0}),J(x)!=="svelte-j71wox"&&(x.innerHTML=oe),Fl=a(l),d=i(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),J(d)!=="svelte-vuhdwu"&&(d.innerHTML=Me),Rl=a(l),M(D.$$.fragment,l),Zl=a(l),S=i(l,"P",{"data-svelte-h":!0}),J(S)!=="svelte-1xvogfx"&&(S.innerHTML=Te),kl=a(l),Y=i(l,"P",{"data-svelte-h":!0}),J(Y)!=="svelte-6as2g1"&&(Y.innerHTML=Ue),El=a(l),M(O.$$.fragment,l),vl=a(l),X=i(l,"P",{"data-svelte-h":!0}),J(X)!=="svelte-1hp1p5d"&&(X.innerHTML=ce),Gl=a(l),M(z.$$.fragment,l),Nl=a(l),H=i(l,"P",{"data-svelte-h":!0}),J(H)!=="svelte-v9lpd7"&&(H.innerHTML=ye),Al=a(l),M(L.$$.fragment,l),Wl=a(l),q=i(l,"UL",{"data-svelte-h":!0}),J(q)!=="svelte-wokq2p"&&(q.innerHTML=re),_l=a(l),M(P.$$.fragment,l),$l=a(l),M(K.$$.fragment,l),xl=a(l),M(ll.$$.fragment,l),Dl=a(l),sl=i(l,"P",{}),me(sl).forEach(s),this.h()},h(){Yl(r,"name","hf:doc:metadata"),Yl(r,"content",Ve),Yl(m,"class","tip"),Yl(d,"class","important")},m(l,e){Ce(document.head,r),t(l,nl,e),t(l,el,e),t(l,al,e),T(w,l,e),t(l,pl,e),T(h,l,e),t(l,il,e),t(l,j,e),t(l,Jl,e),t(l,f,e),t(l,ol,e),t(l,C,e),t(l,Ml,e),t(l,I,e),t(l,Tl,e),T(b,l,e),t(l,Ul,e),t(l,g,e),t(l,cl,e),t(l,V,e),t(l,yl,e),t(l,B,e),t(l,rl,e),t(l,Q,e),t(l,ml,e),t(l,F,e),t(l,dl,e),T(R,l,e),t(l,ul,e),t(l,Z,e),t(l,wl,e),T(k,l,e),t(l,hl,e),t(l,E,e),t(l,jl,e),T(v,l,e),t(l,fl,e),t(l,G,e),t(l,Cl,e),T(N,l,e),t(l,Il,e),t(l,A,e),t(l,bl,e),t(l,m,e),t(l,gl,e),T(W,l,e),t(l,Vl,e),t(l,_,e),t(l,Bl,e),t(l,$,e),t(l,Ql,e),t(l,x,e),t(l,Fl,e),t(l,d,e),t(l,Rl,e),T(D,l,e),t(l,Zl,e),t(l,S,e),t(l,kl,e),t(l,Y,e),t(l,El,e),T(O,l,e),t(l,vl,e),t(l,X,e),t(l,Gl,e),T(z,l,e),t(l,Nl,e),t(l,H,e),t(l,Al,e),T(L,l,e),t(l,Wl,e),t(l,q,e),t(l,_l,e),T(P,l,e),t(l,$l,e),T(K,l,e),t(l,xl,e),T(ll,l,e),t(l,Dl,e),t(l,sl,e),Sl=!0},p:ue,i(l){Sl||(U(w.$$.fragment,l),U(h.$$.fragment,l),U(b.$$.fragment,l),U(R.$$.fragment,l),U(k.$$.fragment,l),U(v.$$.fragment,l),U(N.$$.fragment,l),U(W.$$.fragment,l),U(D.$$.fragment,l),U(O.$$.fragment,l),U(z.$$.fragment,l),U(L.$$.fragment,l),U(P.$$.fragment,l),U(K.$$.fragment,l),U(ll.$$.fragment,l),Sl=!0)},o(l){c(w.$$.fragment,l),c(h.$$.fragment,l),c(b.$$.fragment,l),c(R.$$.fragment,l),c(k.$$.fragment,l),c(v.$$.fragment,l),c(N.$$.fragment,l),c(W.$$.fragment,l),c(D.$$.fragment,l),c(O.$$.fragment,l),c(z.$$.fragment,l),c(L.$$.fragment,l),c(P.$$.fragment,l),c(K.$$.fragment,l),c(ll.$$.fragment,l),Sl=!1},d(l){l&&(s(nl),s(el),s(al),s(pl),s(il),s(j),s(Jl),s(f),s(ol),s(C),s(Ml),s(I),s(Tl),s(Ul),s(g),s(cl),s(V),s(yl),s(B),s(rl),s(Q),s(ml),s(F),s(dl),s(ul),s(Z),s(wl),s(hl),s(E),s(jl),s(fl),s(G),s(Cl),s(Il),s(A),s(bl),s(m),s(gl),s(Vl),s(_),s(Bl),s($),s(Ql),s(x),s(Fl),s(d),s(Rl),s(Zl),s(S),s(kl),s(Y),s(El),s(vl),s(X),s(Gl),s(Nl),s(H),s(Al),s(Wl),s(q),s(_l),s($l),s(xl),s(Dl),s(sl)),s(r),y(w,l),y(h,l),y(b,l),y(R,l),y(k,l),y(v,l),y(N,l),y(W,l),y(D,l),y(O,l),y(z,l),y(L,l),y(P,l),y(K,l),y(ll,l)}}}const Ve='{"title":"AnyFlow","local":"anyflow","sections":[{"title":"Bidirectional 还是 Causal —— 怎么选 pipeline","local":"bidirectional-还是-causal--怎么选-pipeline","sections":[],"depth":2},{"title":"加载 checkpoint","local":"加载-checkpoint","sections":[],"depth":2},{"title":"Any-step 采样","local":"any-step-采样","sections":[],"depth":2},{"title":"图生视频 与 视频续写","local":"图生视频-与-视频续写","sections":[],"depth":2},{"title":"LoRA 微调","local":"lora-微调","sections":[],"depth":2},{"title":"常见坑","local":"常见坑","sections":[],"depth":2},{"title":"引用","local":"引用","sections":[],"depth":2}],"depth":1}';function Be(Ol){return we(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ke extends he{constructor(r){super(),je(this,r,Be,ge,de,{})}}export{ke as component};

Xet Storage Details

Size:
32.7 kB
·
Xet hash:
e7bac32b76d97ebaf3238249a69e446031adbf6a33bd28ada05e333b4b9407f2

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.