)
人工智能大模型本地部署推理引擎媒体生成【免费下载链接】stable-diffusion.cppDiffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C项目地址https://gitcode.com/GitHub_Trending/st/stable-diffusion.cpp点击查看免费下载AnimateDiff 通过在冻结的 Stable Diffusion 1.5 UNet 的 20 个位置注入时序注意力temporal-attention模块把原本独立生成的单帧图像变成连贯动画。本文以仓库文档 docs/animatediff.md 为核心结合 animatediff.hpp、unet.hpp、video.cpp 等源码完整讲解模型权重准备、版本选型、-M vid_gen命令行实战、官方参考质量复现、Domain Adapter LoRA 增强以及 img2video 工作流读完即可上手生成 816 帧的 MJPEG AVI 动画。工作原理冻结的 SD 1.5 20 处时序注意力注入AnimateDiff 的核心思路参考 Guo et al., AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning是保持基础 SD 1.5 模型、VAE、文本编码器完全不动只额外加载一个运动模块motion module在 UNet 的 down / up 路径共 20 个插槽位置注入时序残差把一批独立帧变成一段连贯动画。在本仓库中UNet 是否启用 AnimateDiff 是从权重本身自动探测的。在 unet.hpp 中模型加载时会检查是否存在motion_module.down_blocks.0.motion_modules.0.temporal_transformer.proj_in.weight张量若存在则开启config.enable_animatediff若同时存在motion_module.mid_block.motion_modules.0...则进一步标记animatediff_has_mid_block true这正是 v2 与 v3 的拓扑差异见下文版本对照。随后在 unet.hpp 构造AnimateDiff::AnimateDiffModel并在前向计算中通过apply_motion_input/apply_motion_output/apply_motion_mid三个 lambda 把运动模块挂接到 UNet 的各个 resblock 之后见 unet.hpp。运动模块本身的架构定义在 animatediff.hppTemporalAttention对pos_encoder.pe形状[channels, max_frames, 1]的可学习位置编码与输入相加后经过to_q/to_k/to_v三个 Linear均不带 bias做多头注意力再用to_out.0输出num_heads默认 8见 animatediff.hpp。TemporalTransformerBlock包含两个attention_blocks各配一个 LayerNorm加残差以及一个激活为 GEGLU 的FeedForward隐藏层扩到 4 倍通道加残差见 animatediff.hpp。TemporalTransformerGroupNormnorm_num_groups 32→proj_in→ 单个 Transformer block →proj_out整体残差连接前向时把张量按时间维 permute/reshape 成[C, F, W*H]以便对帧轴做注意力见 animatediff.hpp。AnimateDiffModel按MotionModuleConfig布局创建模块。默认配置为 down 侧 4 组通道 320/640/1280/1280每组 2 个 motion module、up 侧 4 组1280/1280/640/320每组 3 个、max_frames 32、enable_mid_block false见 animatediff.hpp 与 animatediff.hpp。mid block 是否启用由加载时探测结果决定。权重准备运动模块 SD 1.5 基座 可选Domain Adapter LoRA生成视频需要三类权重运动模块motion modulev3 推荐约 836 MB随 SD 1.5 UNet 一起通过--motion-module加载。官方提供两种格式fp16 safetensors 版AnimateDiff-A1111 仓库的mm_sd15_v3.safetensors推荐直接使用原始 ckpt 版guoyww/animatediff 的v3_sd15_mm.ckpt。SD 1.5 基础模型任意 SD 1.5 checkpoint 均可guoyww 官方参考配置使用的是realisticVisionV60B1与toonyou_beta3。因为基础 UNet 是冻结的人物身份与画风完全由你传给--model的 SD 1.5 checkpoint 决定LoRA 与提示词权重也照常挂在基础模型上。Domain Adapter LoRA可选仅 v3 使用v3_sd15_adapter.ckpt用于把基础 UNet 的输出校准到运动模块微调时所见的训练分布。把它放到--lora-model-dir目录下并在提示词中以lora:v3_sd15_adapter:1.0方式引用见 docs/animatediff.md。从源码看运动模块权重在上下文初始化阶段加载使用的张量前缀为model.diffusion_model.motion_module.见 diffusion_engine.cpp。CLI 选项定义在 common.cpp--motion-module的说明为path to AnimateDiff motion module (SD 1.5); enables video generation on --video-frames 1即只有同时满足提供了运动模块且--video-frames 1时才会走视频生成路径generate_video也会先检查animatediff_loaded sd_version_supports_animatediff(sd-version)再做 AnimateDiff 分派见 video.cpp。运动模块版本对照与分辨率选择各版本运动模块的差异源自官方模型页信息整理如下模块基座原生分辨率运动特点mm_sd_v14.ckpt1.5256x256最早版本抖动更多mm_sd_v15.ckpt1.5256x256相比 v1.4 稳定性提升mm_sd_v15_v2.ckpt1.5384x384运动动态显著更好v3_sd15_mm.ckpt1.5512x512最平滑、质量最高建议搭配 Domain Adapter LoRAmm_sdxl_v10_betaSDXL512x512实验性本仓库暂不支持使用要点将-H -W设置为模块的原生分辨率效果最佳。v3 按 512x512 训练若缩小到 384x384 仍可运行但运动表现会趋近 v2。另外 v2 在 UNet 中间块还有一个额外的 motion module而 v3 去掉了它本实现会从 checkpoint 自动探测该拓扑无需手工指定。第一条生成命令8 帧 512x512 文生视频下面的命令生成 8 帧、512x512、seed 42、20 步的动画Windows 下可执行文件位于.\bin\Release\sd-cli.exe模型路径按你自己的目录调整.\bin\Release\sd-cli.exe -M vid_gen \ --model ..\models\checkpoints\realisticVisionV60B1.safetensors \ --motion-module ..\models\animatediff\mm_sd15_v3.safetensors \ --offload-to-cpu --diffusion-fa \ -p a red apple on a wooden table \ --cfg-scale 8.0 --sampling-method euler --scheduler discrete \ -H 512 -W 512 --video-frames 8 --fps 8 --steps 20 -s 42 \ -o out.avi重要提示上面的 sampler / scheduler / CFG 取值是配合mm_sd15_v3训练条件设定的euler discrete CFG 8.0。如果改用 SD 1.5 默认的euler_a 低 CFG会得到近似噪点的输出这与官方 AnimateDiff 行为一致。各关键参数含义参数作用-M vid_gen切换到视频生成模式--motion-module path指定 AnimateDiff 运动模块启用视频生成的前提--video-frames N输出帧数官方训练上下文为 16见下文--fps N播放帧率同时决定 AVI 的播放速度--steps/-s采样步数 / 随机种子--cfg-scale 8.0无分类器引导强度v3 训练值--sampling-method euler --scheduler discretev3 训练使用的采样器与调度器--offload-to-cpu将部分权重驻留 CPU降低峰值显存--diffusion-fa启用扩散阶段的 Flash Attention 优化-o out.avi输出文件MJPEG 编码的 AVI原生 16 帧上下文推荐的最高时序质量配置运动模块按video_length16训练因此--video-frames 16能获得最好的时序一致性。但 512x512 16 帧对显存压力更大文档给出的推荐做法是降到 384x384或改用 layer streaming / 显存上限.\bin\Release\sd-cli.exe -M vid_gen \ --model ..\models\checkpoints\realisticVisionV60B1.safetensors \ --motion-module ..\models\animatediff\mm_sd15_v3.safetensors \ --offload-to-cpu --diffusion-fa \ -p photo of coastline, rocks, storm weather, wind, waves, lightning \ --cfg-scale 8.0 --sampling-method euler --scheduler discrete \ -H 384 -W 384 --video-frames 16 --fps 8 --steps 20 -s 42 \ -o out.avi源码层面帧数上限由运动模块的位置编码上下文决定。MotionModuleConfig.max_frames默认为 32见 animatediff.hppTemporalAttention在F pe-ne[1]时直接复用完整位置编码、否则对位置编码做ggml_view_3d切片见 animatediff.hpp。generate_animatediff_video会把--video-frames超过 32 的情况警告并截断到 32见 video.cpp。低显存流式生成2 GiB 上限跑通 RTX 3060文档提供了一个经实际验证RTX 30602 GiB 显存上限的低显存方案去掉--offload-to-cpu改用--max-vram 2.0让权重按需流式驻留.\bin\Release\sd-cli.exe -M vid_gen \ --model ..\models\checkpoints\realisticVisionV60B1.safetensors \ --motion-module ..\models\animatediff\mm_sd15_v3.safetensors \ --max-vram 2.0 --diffusion-fa \ -p photo of coastline, rocks, storm weather, wind, waves, lightning \ --cfg-scale 8.0 --sampling-method euler --scheduler discrete \ -H 384 -W 384 --video-frames 8 --fps 8 --steps 20 -s 42 \ -o out.avi复现官方参考质量采用 guoyww 官方参考配置RealisticVision v6.0 基座 mm_sd15_v3或mm_sd_v15_v2 原生分辨率 16 帧 euler 25 步 CFG 8 linear beta 调度即可在本实现上复现官方 AnimateDiff 的输出风格。v3512x512mm_sd15_v3PromptSampleBW man on stormy coastlineClose-up rabbit macro shotCoastline, storm, waves, lightningOld house, storm, forest, nightv2384x384mm_sd_v15_v2.ckptPromptSampleBW man on stormy coastlineClose-up rabbit macro shotCoastline, storm, waves, lightningOld house, storm, forest, night观察要点当提示词包含明确的运动线索storm / waves / wind时运动幅度强而静态主体close-up macro运动细微与官方参考行为一致。v2 比 v3 多一个 UNet 中间块的运动模块本实现会自动识别。v3 Domain Adapter LoRA在同样提示词、种子与配置的基础上附加v3_sd15_adapterLoRA会把基础 UNet 的输出向运动模块微调所见的训练分布校准画面细节更锐利——与无 LoRA 渲染相比兔子的单根绒毛、内耳发光、更丰富的森林细节都更明显sd-cli -M vid_gen --model realisticVisionV60B1.safetensors \ --motion-module mm_sd15_v3.safetensors \ --lora-model-dir ./loras \ -p close up photo of a rabbit ...lora:v3_sd15_adapter:1.0 ...img2video从静态图出发的图生视频通过-i / --init-img传入预渲染图像即可从该图出发做动画所有 N 帧输出都从编码后的 init latent 起步再在每一帧上按--strength添加噪声。初始图锚定了人物身份、构图与画质运动模块在其之上叠加细微运动。典型流程先用-M img_gen生成任意高质量静帧作为起点sd-cli -M img_gen ... -o init.png # any high-quality still sd-cli -M vid_gen --motion-module mm_sd15_v3.safetensors \ -i init.png --strength 0.75 \ --cfg-scale 7.0 --sampling-method euler --scheduler karras \ -H 512 -W 512 --video-frames 8 --steps 25 -s 42 \ -p ... -o out.avi--strength控制运动模块被允许偏离初始图的程度值越大运动越明显值越小画面越接近静帧。注意事项与已知边界帧数选择运动模块按video_length16训练--video-frames 16时序一致性最好F8可用但运动弧线较短。位置编码虽支持到 32 帧但超出训练范围后输出会偏静态。单帧退化规避--video-frames 1时运动模块被完全跳过输出与-M img_gen逐位一致——这避免了单帧样本上时序注意力产生未训练量级残差的退化问题。源码实现中generate_animatediff_video会把参数转译为sd_img_gen_params_t并设置sd-animatediff_num_frames后调用generate_image见 video.cpp而 UNet 前向只在config.enable_animatediff num_video_frames 1时才构造motion_root见 unet.hpp。基座冻结人物身份与风格跟随--model指定的 SD 1.5 checkpointLoRA 与提示词加权照常作用于基础模型。拓扑差异v3 没有 mid_block 运动模块mm_sdxl_v10_betaSDXL 变体暂不支持。输出格式视频以 MJPEG 编码的 AVI 写出用--fps控制播放速度源码中*fps_out std::max(1, sd_vid_gen_params-fps)见 video.cpp。延伸阅读模型实现细节animatediff.hppUNet 注入与拓扑自动探测unet.hpp、unet.hpp视频生成入口与帧数截断video.cpp运动模块加载张量前缀model.diffusion_model.motion_module.diffusion_engine.cpp--motion-module等 CLI 选项定义common.cpp更多视频模型Wan、LTX-V、HunyuanVideo 等与图文模型可参考 docs 目录下的对应指南。赞分享人工智能大模型本地部署推理引擎媒体生成【免费下载链接】stable-diffusion.cppDiffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C项目地址https://gitcode.com/GitHub_Trending/st/stable-diffusion.cpp点击查看免费下载相关推荐DINO视频生成完全指南从输入视频到注意力动态可视化全流程DINO视频生成完全指南从输入视频到注意力动态可视化全流程 DINODistilled Vision Transformer是一个基于自监督学习的视觉Tr人工智能深度学习计算机视觉预训练终极指南stable-diffusion.cpp支持的10大模型全解析从SD到FLUX、WAN视频生成终极指南stable diffusion.cpp支持的10大模型全解析从SD到FLUX、WAN视频生成 stable diffusion.cpp是一个纯C/人工智能大模型本地部署推理引擎媒体生成Motif-Video 视频生成实战指南基于 Diffusers 的文生视频与图生视频 Pipeline 深度解析Motif Video 视频生成实战指南基于 Diffusers 的文生视频与图生视频 Pipeline 深度解析 Motif Video 是一个面向文生视频人工智能深度学习媒体生成计算机视觉音频多模态预训练微调上一篇深入理解better-monadic-for原理Scala编译器插件如何改写for表达式下一篇FunClip 视频剪辑零门槛 3 分钟切出 2 小时录像里的精华创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考