[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-Kosinkadink--ComfyUI-Advanced-ControlNet":3,"tool-Kosinkadink--ComfyUI-Advanced-ControlNet":62},[4,18,26,35,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,2,"2026-04-06T11:32:50",[14,15,13],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":32,"last_commit_at":41,"category_tags":42,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[43,14],"插件",{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":10,"last_commit_at":50,"category_tags":51,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[52,15,13,14],"语言模型",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4292,"Deep-Live-Cam","hacksider\u002FDeep-Live-Cam","Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具，用户仅需一张静态照片，即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点，让高质量的数字内容创作变得触手可及。\n\n这款工具不仅适合开发者和技术研究人员探索算法边界，更因其极简的操作逻辑（仅需三步：选脸、选摄像头、启动），广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换，还是制作趣味短视频和直播互动，Deep-Live-Cam 都能提供流畅的支持。\n\n其核心技术亮点在于强大的实时处理能力，支持口型遮罩（Mouth Mask）以保留使用者原始的嘴部动作，确保表情自然精准；同时具备“人脸映射”功能，可同时对画面中的多个主体应用不同面孔。此外，项目内置了严格的内容安全过滤机制，自动拦截涉及裸露、暴力等不当素材，并倡导用户在获得授权及明确标注的前提下合规使用，体现了技术发展与伦理责任的平衡。",88924,"2026-04-06T03:28:53",[14,15,13,61],"视频",{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":68,"readme_en":69,"readme_zh":70,"quickstart_zh":71,"use_case_zh":72,"hero_image_url":73,"owner_login":74,"owner_name":75,"owner_avatar_url":76,"owner_bio":77,"owner_company":77,"owner_location":77,"owner_email":77,"owner_twitter":77,"owner_website":78,"owner_url":79,"languages":80,"stars":89,"forks":90,"last_commit_at":91,"license":92,"difficulty_score":10,"env_os":93,"env_gpu":94,"env_ram":95,"env_deps":96,"category_tags":100,"github_topics":77,"view_count":32,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":101,"updated_at":102,"faqs":103,"releases":133},4875,"Kosinkadink\u002FComfyUI-Advanced-ControlNet","ComfyUI-Advanced-ControlNet","ControlNet scheduling and masking nodes with sliding context support","ComfyUI-Advanced-ControlNet 是专为 ComfyUI 设计的高级控制节点扩展，旨在为图像和视频生成提供精细化的动态控制能力。它核心解决了传统 ControlNet 在生成过程中强度固定、缺乏时序变化及局部掩码控制的局限，特别适配需要滑动上下文采样的长视频生成场景（如配合 AnimateDiff 使用）。\n\n该工具允许用户通过“时间步关键帧”和“潜变量关键帧”，在采样过程的不同阶段或针对特定画面帧，动态调整 ControlNet 的权重强度与应用掩码。其独特亮点在于完美复现并增强了 WebUI 中“提示词更重要”与\"ControlNet 更重要”的平衡调节功能，支持通过软权重参数进行微调。此外，它还广泛兼容各类先进模型，包括 ControlLoRA、SparseCtrl、SVD-ControlNet 及 Reference 模式等。\n\n这款工具非常适合已熟悉 ComfyUI 工作流的中高阶用户、AI 视频创作者及技术研究人员。对于希望突破静态控制限制，追求更自然过渡效果或复杂动态构图的设计师而言，ComfyUI-Advanced-ControlNet 提供了不可","ComfyUI-Advanced-ControlNet 是专为 ComfyUI 设计的高级控制节点扩展，旨在为图像和视频生成提供精细化的动态控制能力。它核心解决了传统 ControlNet 在生成过程中强度固定、缺乏时序变化及局部掩码控制的局限，特别适配需要滑动上下文采样的长视频生成场景（如配合 AnimateDiff 使用）。\n\n该工具允许用户通过“时间步关键帧”和“潜变量关键帧”，在采样过程的不同阶段或针对特定画面帧，动态调整 ControlNet 的权重强度与应用掩码。其独特亮点在于完美复现并增强了 WebUI 中“提示词更重要”与\"ControlNet 更重要”的平衡调节功能，支持通过软权重参数进行微调。此外，它还广泛兼容各类先进模型，包括 ControlLoRA、SparseCtrl、SVD-ControlNet 及 Reference 模式等。\n\n这款工具非常适合已熟悉 ComfyUI 工作流的中高阶用户、AI 视频创作者及技术研究人员。对于希望突破静态控制限制，追求更自然过渡效果或复杂动态构图的设计师而言，ComfyUI-Advanced-ControlNet 提供了不可或缺的颗粒度控制手段，让生成过程更加灵活可控。","# ComfyUI-Advanced-ControlNet\nNodes for scheduling ControlNet strength across timesteps and batched latents, as well as applying custom weights and attention masks. The ControlNet nodes here fully support sliding context sampling, like the one used in the  [ComfyUI-AnimateDiff-Evolved](https:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-AnimateDiff-Evolved) nodes. Currently supports ControlNets, T2IAdapters, ControlLoRAs, ControlLLLite, SparseCtrls, SVD-ControlNets, and Reference.\n\nCustom weights allow replication of the \"My prompt is more important\" feature of Auto1111's sd-webui ControlNet extension via Soft Weights, and the \"ControlNet is more important\" feature can be granularly controlled by changing the uncond_multiplier on the same Soft Weights.\n\nControlNet preprocessors are available through [comfyui_controlnet_aux](https:\u002F\u002Fgithub.com\u002FFannovel16\u002Fcomfyui_controlnet_aux) nodes.\n\n## Features\n- Timestep and latent strength scheduling\n- Attention masks\n- Replicate ***\"My prompt is more important\"*** feature from sd-webui-controlnet extension via ***Soft Weights***, and allow softness to be tweaked via ***base_multiplier***\n- Replicate ***\"ControlNet is more important\"*** feature from sd-webui-controlnet extension via ***uncond_multiplier*** on ***Soft Weights***\n  - uncond_multiplier=0.0 gives identical results of auto1111's feature, but values between 0.0 and 1.0 can be used without issue to granularly control the setting.\n- ControlNet, T2IAdapter, and ControlLoRA support for sliding context windows\n- ControlLLLite support\n- ControlNet++ support\n- CtrLoRA support\n  - Relevant models linked on [CtrLoRA github page](https:\u002F\u002Fgithub.com\u002FxyfJASON\u002Fctrlora)\n- SparseCtrl support\n- SVD-ControlNet support\n  - Stable Video Diffusion ControlNets trained by **CiaraRowles**: [Depth](https:\u002F\u002Fhuggingface.co\u002FCiaraRowles\u002Ftemporal-controlnet-depth-svd-v1\u002Ftree\u002Fmain\u002Fcontrolnet), [Lineart](https:\u002F\u002Fhuggingface.co\u002FCiaraRowles\u002Ftemporal-controlnet-lineart-svd-v1\u002Ftree\u002Fmain\u002Fcontrolnet)  \n- Reference support\n  - Supports ```reference_attn```, ```reference_adain```, and ```refrence_adain+attn``` modes. ```style_fidelity``` and ```ref_weight``` are equivalent to style_fidelity and control_weight in Auto1111, respectively, and strength of the Apply ControlNet is the balance between ref-influenced result and no-ref result. There is also a Reference ControlNet (Finetune) node that allows adjust the style_fidelity, weight, and strength of attn and adain separately.\n\n## Table of Contents:\n- [Scheduling Explanation](#scheduling-explanation)\n- [Nodes](#nodes)\n- [Usage](#usage) (will fill this out soon)\n\n\n# Scheduling Explanation\n\nThe two core concepts for scheduling are ***Timestep Keyframes*** and ***Latent Keyframes***.\n\n***Timestep Keyframes*** hold the values that guide the settings for a controlnet, and begin to take effect based on their start_percent, which corresponds to the percentage of the sampling process. They can contain masks for the strengths of each latent, control_net_weights, and latent_keyframes (specific strengths for each latent), all optional.\n\n***Latent Keyframes*** determine the strength of the controlnet for specific latents - all they contain is the batch_index of the latent, and the strength the controlnet should apply for that latent. As a concept, latent keyframes achieve the same affect as a uniform mask with the chosen strength value.\n\n![advcn_image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_0cd61cc8e548.png)\n\n# Nodes\n\nThe ControlNet nodes provided here are the ***Apply Advanced ControlNet*** and ***Load Advanced ControlNet Model*** (or diff) nodes. The vanilla ControlNet nodes are also compatible, and can be used almost interchangeably - the only difference is that **at least one of these nodes must be used** for Advanced versions of ControlNets to be used (important for sliding context sampling, like with AnimateDiff-Evolved).\n\nKey:\n- 🟩 - required inputs\n- 🟨 - optional inputs\n- 🟦 - start as widgets, can be converted to inputs\n- 🟥 - optional input\u002Foutput, but not recommended to use unless needed\n- 🟪 - output\n\n## Apply Advanced ControlNet\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_865e662f93d4.png)\n\nSame functionality as the vanilla Apply Advanced ControlNet (Advanced) node, except with Advanced ControlNet features added to it. Automatically converts any ControlNet from ControlNet loaders into Advanced versions.\n\n### Inputs\n- 🟩***positive***: conditioning (positive).\n- 🟩***negative***: conditioning (negative).\n- 🟩***control_net***: loaded controlnet; will be converted to Advanced version automatically by this node, if it's a supported type.\n- 🟩***image***: images to guide controlnets - if the loaded controlnet requires it, they must preprocessed images. If one image provided, will be used for all latents. If more images provided, will use each image separately for each latent. If not enough images to meet latent count, will repeat the images from the beginning to match vanilla ControlNet functionality.\n- 🟨***mask_optional***: attention masks to apply to controlnets; basically, decides what part of the image the controlnet to apply to (and the relative strength, if the mask is not binary). Same as image input, if you provide more than one mask, each can apply to a different latent.\n- 🟨***timestep_kf***: timestep keyframes to guide controlnet effect throughout sampling steps.\n- 🟨***latent_kf_override***: override for latent keyframes, useful if no other features from timestep keyframes is needed. *NOTE: this latent keyframe will be applied to ALL timesteps, regardless if there are other latent keyframes attached to connected timestep keyframes.*\n- 🟨***weights_override***: override for weights, useful if no other features from timestep keyframes is needed. *NOTE: this weight will be applied to ALL timesteps, regardless if there are other weights attached to connected timestep keyframes.*\n- 🟦***strength***: strength of controlnet; 1.0 is full strength, 0.0 is no effect at all.\n- 🟦***start_percent***: sampling step percentage at which controlnet should start to be applied - no matter what start_percent is set on timestep keyframes, they won't take effect until this start_percent is reached.\n- 🟦***stop_percent***: sampling step percentage at which controlnet should stop being applied - no matter what start_percent is set on timestep keyframes, they won't take effect once this end_percent is reached.\n\n### Outputs\n- 🟪***positive***: conditioning (positive) with applied controlnets\n- 🟪***negative***: conditioning (negative) with applied controlnets\n\n## Load Advanced ControlNet Model\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_313752149ff3.png)\n\nLoads a ControlNet model and converts it into an Advanced version that supports all the features in this repo. When used with **Apply Advanced ControlNet** node, there is no reason to use the timestep_keyframe input on this node - use timestep_kf on the Apply node instead.\n\n### Inputs\n- 🟥***timestep_keyframe***: optional and likely unnecessary input to have ControlNet use selected timestep_keyframes - should not be used unless you need to. Useful if this node is not attached to **Apply Advanced ControlNet** node, but still want to use Timestep Keyframe, or to use TK_SHORTCUT outputs from ControlWeights in the same scenario. Will be overriden by the timestep_kf input on **Apply Advanced ControlNet** node, if one is provided there.\n- 🟨***model***: model to plug into the diff version of the node. Some controlnets are designed for receive the model; if you don't know what this does, you probably don't want tot use the diff version of the node.\n\n### Outputs\n- 🟪***CONTROL_NET***: loaded Advanced ControlNet\n\n## Timestep Keyframe\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_ec8725ae37e8.png)\n\nScheduling node across timesteps (sampling steps) based on the set start_percent. Chaining Timestep Keyframes allows ControlNet scheduling across sampling steps (percentage-wise), through a timestep keyframe schedule.\n\n### Inputs\n- 🟨***prev_timestep_kf***: used to chain Timestep Keyframes together to create a schedule. The order does not matter - the Timestep Keyframes sort themselves automatically by their start_percent. *Any Timestep Keyframe contained in the prev_timestep_keyframe that contains the same start_percent as the Timestep Keyframe will be overwritten.*\n- 🟨***cn_weights***: weights to apply to controlnet while this Timestep Keyframe is in effect. Must be compatible with the loaded controlnet, or will throw an error explaining what weight types are compatible. If inherit_missing is True, if no control_net_weight is passed in, will attempt to reuse the last-used weights in the timestep keyframe schedule. *If Apply Advanced ControlNet node has a weight_override, the weight_override will be used during sampling instead of control_net_weight.*\n- 🟨***latent_keyframe***: latent keyframes to apply to controlnet while this Timestep Keyframe is in effect. If inherit_missing is True, if no latent_keyframe is passed in, will attempt to reuse the last-used weights in the timestep keyframe schedule. *If Apply Advanced ControlNet node has a latent_kf_override, the latent_lf_override will be used during sampling instead of latent_keyframe.*\n- 🟨***mask_optional***: attention masks to apply to controlnets; basically, decides what part of the image the controlnet to apply to (and the relative strength, if the mask is not binary). Same as mask_optional on the Apply Advanced ControlNet node, can apply either one maks to all latents, or individual masks for each latent. If inherit_missing is True, if no mask_optional is passed in, will attempt to reuse the last-used mask_optional in the timestep keyframe schedule. It is NOT overriden by mask_optional on the Apply  Advanced ControlNet node; will be used together.\n- 🟦***start_percent***: sampling step percentage at which this Timestep Keyframe qualifies to be used. Acts as the 'key' for the Timestep Keyframe in the timestep keyframe schedule.\n- 🟦***strength***: strength of the controlnet; multiplies the controlnet by this value, basically, applied alongside the strength on the Apply ControlNet node. If set to 0.0 will not have any effect during the duration of this Timestep Keyframe's effect, and will increase sampling speed by not doing any work.\n- 🟦***null_latent_kf_strength***: strength to assign to latents that are unaccounted for in the passed in latent_keyframes. Has no effect if no latent_keyframes are passed in, or no batch_indeces are unaccounted in the latent_keyframes for during sampling.\n- 🟦***inherit_missing***: determines if should reuse values from previous Timestep Keyframes for optional values (control_net_weights, latent_keyframe, and mask_option) that are not included on this TimestepKeyframe. To inherit only specific inputs, use default inputs.\n- 🟦***guarantee_steps***: when 1 or greater, even if a Timestep Keyframe's start_percent ahead of this one in the schedule is closer to current sampling percentage, this Timestep Keyframe will still be used for the specified amount of steps before moving on to the next selected Timestep Keyframe in the following step. Whether the Timestep Keyframe is used or not, its inputs will still be accounted for inherit_missing purposes.  \n\n### Outputs\n- 🟪***TIMESTEP_KF***: the created Timestep Keyframe, that can either be linked to another or into a Timestep Keyframe input.\n\n## Timestep Keyframe Interpolation\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_75ef1bd8704c.png)\n\nAllows to create Timestep Keyframe with interpolated strength values in a given percent range. (The first generated keyframe will have guarantee_steps=1, rest that follow will have guarantee_steps=0).\n\n### Inputs\n- 🟨***prev_timestep_kf***: used to chain Timestep Keyframes together to create a schedule. The order does not matter - the Timestep Keyframes sort themselves automatically by their start_percent. *Any Timestep Keyframe contained in the prev_timestep_keyframe that contains the same start_percent as the Timestep Keyframe will be overwritten.*\n- 🟨***cn_weights***: weights to apply to controlnet while this Timestep Keyframe is in effect. Must be compatible with the loaded controlnet, or will throw an error explaining what weight types are compatible. If inherit_missing is True, if no control_net_weight is passed in, will attempt to reuse the last-used weights in the timestep keyframe schedule. *If Apply Advanced ControlNet node has a weight_override, the weight_override will be used during sampling instead of control_net_weight.*\n- 🟨***latent_keyframe***: latent keyframes to apply to controlnet while this Timestep Keyframe is in effect. If inherit_missing is True, if no latent_keyframe is passed in, will attempt to reuse the last-used weights in the timestep keyframe schedule. *If Apply Advanced ControlNet node has a latent_kf_override, the latent_lf_override will be used during sampling instead of latent_keyframe.*\n- 🟨***mask_optional***: attention masks to apply to controlnets; basically, decides what part of the image the controlnet to apply to (and the relative strength, if the mask is not binary). Same as mask_optional on the Apply Advanced ControlNet node, can apply either one maks to all latents, or individual masks for each latent. If inherit_missing is True, if no mask_optional is passed in, will attempt to reuse the last-used mask_optional in the timestep keyframe schedule. It is NOT overriden by mask_optional on the Apply  Advanced ControlNet node; will be used together.\n- 🟦***start_percent***: sampling step percentage at which the first generated Timestep Keyframe qualifies to be used.\n- 🟦***end_percent***: sampling step percentage at which the last generated Timestep Keyframe qualifies to be used.\n- 🟦***strength_start***: strength of the Timestep Keyframe at start of range.\n- 🟦***strength_end***: strength of the Timestep Keyframe at end of range.\n- 🟦***interpolation***: the method of interpolation.\n- 🟦***intervals***: the amount of keyframes to generate in total - the first will have its start_percent equal to start_percent, the last will have its start_percent equal to end_percent.\n- 🟦***null_latent_kf_strength***: strength to assign to latents that are unaccounted for in the passed in latent_keyframes. Has no effect if no latent_keyframes are passed in, or no batch_indeces are unaccounted in the latent_keyframes for during sampling.\n- 🟦***inherit_missing***: determines if should reuse values from previous Timestep Keyframes for optional values (control_net_weights, latent_keyframe, and mask_option) that are not included on this TimestepKeyframe. To inherit only specific inputs, use default inputs.\n- 🟦***print_keyframes***: if True, will print the Timestep Keyframes generated by this node for debugging purposes.\n\n### Outputs\n- 🟪***TIMESTEP_KF***: the created Timestep Keyframe, that can either be linked to another or into a Timestep Keyframe input.\n\n## Timestep Keyframe From List\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_0492fb3f3f8d.png)\n\nAllows to create Timestep Keyframe via a list of floats, such as with Batch Value Schedule from [ComfyUI_FizzNodes](https:\u002F\u002Fgithub.com\u002FFizzleDorf\u002FComfyUI_FizzNodes) nodes. (The first generated keyframe will have guarantee_steps=1, rest that follow will have guarantee_steps=0).\n\n### Inputs\n- 🟨***prev_timestep_kf***: used to chain Timestep Keyframes together to create a schedule. The order does not matter - the Timestep Keyframes sort themselves automatically by their start_percent. *Any Timestep Keyframe contained in the prev_timestep_keyframe that contains the same start_percent as the Timestep Keyframe will be overwritten.*\n- 🟨***cn_weights***: weights to apply to controlnet while this Timestep Keyframe is in effect. Must be compatible with the loaded controlnet, or will throw an error explaining what weight types are compatible. If inherit_missing is True, if no control_net_weight is passed in, will attempt to reuse the last-used weights in the timestep keyframe schedule. *If Apply Advanced ControlNet node has a weight_override, the weight_override will be used during sampling instead of control_net_weight.*\n- 🟨***latent_keyframe***: latent keyframes to apply to controlnet while this Timestep Keyframe is in effect. If inherit_missing is True, if no latent_keyframe is passed in, will attempt to reuse the last-used weights in the timestep keyframe schedule. *If Apply Advanced ControlNet node has a latent_kf_override, the latent_lf_override will be used during sampling instead of latent_keyframe.*\n- 🟨***mask_optional***: attention masks to apply to controlnets; basically, decides what part of the image the controlnet to apply to (and the relative strength, if the mask is not binary). Same as mask_optional on the Apply Advanced ControlNet node, can apply either one maks to all latents, or individual masks for each latent. If inherit_missing is True, if no mask_optional is passed in, will attempt to reuse the last-used mask_optional in the timestep keyframe schedule. It is NOT overriden by mask_optional on the Apply  Advanced ControlNet node; will be used together.\n- 🟩***float_strengths***: a list of floats, that will correspond to the strength of each Timestep Keyframe; first will be assigned to start_percent, last will be assigned to end_percent, and the rest spread linearly between.\n- 🟦***start_percent***: sampling step percentage at which the first generated Timestep Keyframe qualifies to be used.\n- 🟦***end_percent***: sampling step percentage at which the last generated Timestep Keyframe qualifies to be used.\n- 🟦***null_latent_kf_strength***: strength to assign to latents that are unaccounted for in the passed in latent_keyframes. Has no effect if no latent_keyframes are passed in, or no batch_indeces are unaccounted in the latent_keyframes for during sampling.\n- 🟦***inherit_missing***: determines if should reuse values from previous Timestep Keyframes for optional values (control_net_weights, latent_keyframe, and mask_option) that are not included on this TimestepKeyframe. To inherit only specific inputs, use default inputs.\n- 🟦***print_keyframes***: if True, will print the Timestep Keyframes generated by this node for debugging purposes.\n\n### Outputs\n- 🟪***TIMESTEP_KF***: the created Timestep Keyframe, that can either be linked to another or into a Timestep Keyframe input.\n\n## Latent Keyframe\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_05d1d448b0c3.png)\n\nA singular Latent Keyframe, selects the strength for a specific batch_index. If batch_index is not present during sampling, will simply have no effect. Can be chained with any other Latent Keyframe-type node to create a latent keyframe schedule.\n\n### Inputs\n- 🟨***prev_latent_kf***: used to chain Latent Keyframes together to create a schedule. *If a Latent Keyframe contained in prev_latent_keyframes have the same batch_index as this Latent Keyframe, they will take priority over this node's value.*\n- 🟦***batch_index***: index of latent in batch to apply controlnet strength to. Acts as the 'key' for the Latent Keyframe in the latent keyframe schedule.\n- 🟦***strength***: strength of controlnet to apply to the corresponding latent.\n\n### Outputs\n- 🟪***LATENT_KF***: the created Latent Keyframe, that can either be linked to another or into a Latent Keyframe input.\n\n## Latent Keyframe Group\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_767de446ac91.png)\n\nAllows to create Latent Keyframes via individual indeces or python-style ranges.\n\n### Inputs\n- 🟨***prev_latent_kf***: used to chain Latent Keyframes together to create a schedule. *If any Latent Keyframes contained in prev_latent_keyframes have the same batch_index as a this Latent Keyframe, they will take priority over this node's version.* \n- 🟨***latent_optional***: the latents expected to be passed in for sampling; only required if you wish to use negative indeces (will be automatically converted to real values).\n- 🟦***index_strengths***: string list of indeces or python-style ranges of indeces to assign strengths to. If latent_optional is passed in, can contain negative indeces or ranges that contain negative numbers, python-style. The different indeces must be comma separated. Individual latents can be specified by ```batch_index=strength```, like ```0=0.9```. Ranges can be specified by ```start_index_inclusive:end_index_exclusive=strength```, like ```0:8=strength```. Negative indeces are possible when latents_optional has an input, with a string such as ```0,-4=0.25```.\n- 🟦***print_keyframes***: if True, will print the Latent Keyframes generated by this node for debugging purposes.\n\n### Outputs\n- 🟪***LATENT_KF***: the created Latent Keyframe, that can either be linked to another or into a Latent Keyframe input.\n\n## Latent Keyframe Interpolation\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_b128fa78341d.png)\n\nAllows to create Latent Keyframes with interpolated values in a range.\n\n### Inputs\n- 🟨***prev_latent_kf***: used to chain Latent Keyframes together to create a schedule. *If any Latent Keyframes contained in prev_latent_keyframes have the same batch_index as a this Latent Keyframe, they will take priority over this node's version.*\n- 🟦***batch_index_from***: starting batch_index of range, included.\n- 🟦***batch_index_to***: end batch_index of range, excluded (python-style range).\n- 🟦***strength_from***: starting strength of interpolation.\n- 🟦***strength_to***: end strength of interpolation.\n- 🟦***interpolation***: the method of interpolation.\n- 🟦***print_keyframes***: if True, will print the Latent Keyframes generated by this node for debugging purposes.\n\n### Outputs\n- 🟪***LATENT_KF***: the created Latent Keyframe, that can either be linked to another or into a Latent Keyframe input.\n\n## Latent Keyframe From List\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_c1e02a8f4b10.png)\n\nAllows to create Latent Keyframes via a list of floats, such as with Batch Value Schedule from [ComfyUI_FizzNodes](https:\u002F\u002Fgithub.com\u002FFizzleDorf\u002FComfyUI_FizzNodes) nodes.\n\n### Inputs\n- 🟨***prev_latent_kf***: used to chain Latent Keyframes together to create a schedule. *If any Latent Keyframes contained in prev_latent_keyframes have the same batch_index as a this Latent Keyframe, they will take priority over this node's version.* \n- 🟩***float_strengths***: a list of floats, that will correspond to the strength of each Latent Keyframe; the batch_index is the index of each float value in the list.\n- 🟦***print_keyframes***: if True, will print the Latent Keyframes generated by this node for debugging purposes.\n\n### Outputs\n- 🟪***LATENT_KF***: the created Latent Keyframe, that can either be linked to another or into a Latent Keyframe input.\n\n# There are more nodes to document and show usage - will add this soon! TODO\n","# ComfyUI-Advanced-ControlNet\n用于在不同采样步数和批量潜变量之间调度 ControlNet 强度的节点，以及应用自定义权重和注意力掩码。这里的 ControlNet 节点完全支持滑动上下文采样，就像 [ComfyUI-AnimateDiff-Evolved](https:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-AnimateDiff-Evolved) 节点中所使用的那样。目前支持 ControlNets、T2IAdapters、ControlLoRAs、ControlLLLite、SparseCtrls、SVD-ControlNets 和 Reference。\n\n通过软权重（Soft Weights），自定义权重可以复现 Auto1111 的 sd-webui ControlNet 扩展中的“我的提示更重要”功能；而“ControlNet 更重要”功能则可以通过调整同一软权重上的 uncond_multiplier 来进行精细控制。\n\nControlNet 预处理节点可通过 [comfyui_controlnet_aux](https:\u002F\u002Fgithub.com\u002FFannovel16\u002Fcomfyui_controlnet_aux) 节点获得。\n\n## 特性\n- 采样步数与潜变量强度调度\n- 注意力掩码\n- 通过“软权重”复现 sd-webui-controlnet 扩展中的“我的提示更重要”功能，并可通过 base_multiplier 调整软化程度。\n- 通过“软权重”上的 uncond_multiplier 复现 sd-webui-controlnet 扩展中的“ControlNet 更重要”功能。\n  - 当 uncond_multiplier=0.0 时，结果与 auto1111 的原生功能完全一致；但介于 0.0 和 1.0 之间的值也可无碍使用，以更精细地控制该设置。\n- 支持滑动上下文窗口的 ControlNet、T2IAdapter 和 ControlLoRA。\n- 支持 ControlLLLite。\n- 支持 ControlNet++。\n- 支持 CtrLoRA。\n  - 相关模型链接见 [CtrLoRA GitHub 页面](https:\u002F\u002Fgithub.com\u002FxyfJASON\u002Fctrlora)。\n- 支持 SparseCtrl。\n- 支持 SVD-ControlNet。\n  - 由 CiaraRowles 训练的稳定视频扩散 ControlNets：[深度](https:\u002F\u002Fhuggingface.co\u002FCiaraRowles\u002Ftemporal-controlnet-depth-svd-v1\u002Ftree\u002Fmain\u002Fcontrolnet)、[线稿](https:\u002F\u002Fhuggingface.co\u002FCiaraRowles\u002Ftemporal-controlnet-lineart-svd-v1\u002Ftree\u002Fmain\u002Fcontrolnet)。\n- 支持 Reference。\n  - 支持 reference_attn、reference_adain 和 reference_adain+attn 模式。style_fidelity 和 ref_weight 分别对应 Auto1111 中的 style_fidelity 和 control_weight，而 Apply ControlNet 的强度则决定了参考影响结果与无参考结果之间的平衡。此外，还有一个 Reference ControlNet（微调）节点，允许分别调整 style_fidelity、weight 以及 attn 和 adain 的强度。\n\n## 目录：\n- [调度说明](#scheduling-explanation)\n- [节点](#nodes)\n- [使用方法](#usage)（即将补充）\n\n# 调度说明\n\n调度的两个核心概念是“采样步数关键帧”和“潜变量关键帧”。\n\n“采样步数关键帧”保存了指导 ControlNet 设置的数值，并根据其 start_percent 开始生效，start_percent 对应于采样过程的百分比。它们可以包含每个潜变量的强度掩码、control_net_weights 以及 latent_keyframes（每个潜变量的具体强度），这些都是可选的。\n\n“潜变量关键帧”则决定特定潜变量上 ControlNet 的强度——它们仅包含潜变量的 batch_index 以及该潜变量应应用的 ControlNet 强度。作为一种概念，潜变量关键帧的效果等同于使用选定强度值的均匀掩码。\n\n![advcn_image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_0cd61cc8e548.png)\n\n# 节点\n\n此处提供的 ControlNet 节点包括“Apply Advanced ControlNet”和“Load Advanced ControlNet Model”（或 diff）节点。普通的 ControlNet 节点同样兼容，几乎可以互换使用——唯一的区别在于，要使用 Advanced 版本的 ControlNet，**必须至少使用其中一个节点**（这对于滑动上下文采样非常重要，例如 AnimateDiff-Evolved）。\n\n符号说明：\n- 🟩 — 必需输入\n- 🟨 — 可选输入\n- 🟦 — 默认为小部件，可转换为输入\n- 🟥 — 可选输入\u002F输出，但不建议在非必要情况下使用\n- 🟪 — 输出\n\n## Apply Advanced ControlNet\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_865e662f93d4.png)\n\n功能与普通版的 Apply Advanced ControlNet（Advanced）节点相同，只是增加了 Advanced ControlNet 的特性。它会自动将来自 ControlNet 加载器的任何 ControlNet 转换为 Advanced 版本。\n\n### 输入\n- 🟩 ***positive***：正向条件。\n- 🟩 ***negative***：反向条件。\n- 🟩 ***control_net***：已加载的 ControlNet；如果是受支持的类型，此节点会自动将其转换为 Advanced 版本。\n- 🟩 ***image***：用于引导 ControlNet 的图像——如果加载的 ControlNet 需要，这些必须是预处理过的图像。如果只提供一张图，将对所有潜变量使用同一张；如果提供了多张，则每张图分别应用于不同的潜变量。若提供的图片数量不足以覆盖所有潜变量，则会从头开始重复使用图片，以保持与普通 ControlNet 功能一致。\n- 🟨 ***mask_optional***：要应用于 ControlNet 的注意力掩码；基本上决定了 ControlNet 应用于图像的哪一部分（以及相对强度，如果掩码不是二值的）。与图像输入类似，若提供多于一个掩码，则每个掩码可应用于不同的潜变量。\n- 🟨 ***timestep_kf***：用于在整个采样过程中引导 ControlNet 效果的采样步数关键帧。\n- 🟨 ***latent_kf_override***：潜变量关键帧的覆盖设置，当不需要采样步数关键帧中的其他功能时非常有用。*注意：此潜变量关键帧将应用于所有采样步数，无论是否有其他潜变量关键帧连接到相应的采样步数关键帧。*\n- 🟨 ***weights_override***：权重的覆盖设置，当不需要采样步数关键帧中的其他功能时很有用。*注意：此权重将应用于所有采样步数，无论是否有其他权重连接到相应的采样步数关键帧。*\n- 🟦 ***strength***：ControlNet 的强度；1.0 为全强度，0.0 则完全无效。\n- 🟦 ***start_percent***：ControlNet 应开始应用的采样步骤百分比——无论采样步数关键帧设置了什么 start_percent，只有达到这个百分比后才会生效。\n- 🟦 ***stop_percent***：ControlNet 应停止应用的采样步骤百分比——无论采样步数关键帧设置了什么 start_percent，一旦达到这个结束百分比，ControlNet 就不再起作用。\n\n### 输出\n- 🟪 ***positive***：应用了 ControlNet 后的正向条件。\n- 🟪 ***negative***：应用了 ControlNet 后的反向条件。\n\n## 加载高级 ControlNet 模型\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_313752149ff3.png)\n\n加载一个 ControlNet 模型，并将其转换为支持本仓库所有功能的高级版本。当与 **应用高级 ControlNet** 节点一起使用时，无需在此节点上使用 timestep_keyframe 输入——请改用“应用高级 ControlNet”节点上的 timestep_kf 输入。\n\n### 输入\n- 🟥***timestep_keyframe***：可选且通常不必要的输入，用于让 ControlNet 使用选定的时间步关键帧；除非确实需要，否则不应使用。如果此节点未连接到 **应用高级 ControlNet** 节点，但仍希望使用时间步关键帧，或者在相同情况下使用来自 ControlWeights 的 TK_SHORTCUT 输出，则此输入会很有用。如果在 **应用高级 ControlNet** 节点上提供了 timestep_kf 输入，则该输入将覆盖此处的 timestep_keyframe。\n- 🟨***model***：要插入到差异版本节点中的模型。某些 ControlNet 是专门设计来接收模型的；如果你不清楚这个参数的作用，可能就不需要使用差异版本的节点。\n\n### 输出\n- 🟪***CONTROL_NET***：已加载的高级 ControlNet\n\n## 时间步关键帧\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_ec8725ae37e8.png)\n\n基于设定的 start_percent，在各个时间步（采样步骤）上调度节点。通过串联多个时间步关键帧，可以按照百分比在采样步骤中创建 ControlNet 的时间步关键帧调度。\n\n### 输入\n- 🟨***prev_timestep_kf***：用于将多个时间步关键帧串联起来以形成调度。顺序并不重要——时间步关键帧会根据其 start_percent 自动排序。*如果 prev_timestep_kf 中包含与当前时间步关键帧相同 start_percent 的关键帧，则会被覆盖。*\n- 🟨***cn_weights***：在此时间步关键帧生效期间应用于 ControlNet 的权重。必须与已加载的 ControlNet 兼容，否则会抛出错误，说明哪些权重类型是兼容的。如果 inherit_missing 为 True，且未传递 control_net_weight，则会尝试重用时间步关键帧调度中上次使用的权重。*如果“应用高级 ControlNet”节点设置了 weight_override，则在采样过程中将使用 override 权重，而非 control_net_weight。*\n- 🟨***latent_keyframe***：在此时间步关键帧生效期间应用于 ControlNet 的潜在关键帧。如果 inherit_missing 为 True，且未传递 latent_keyframe，则会尝试重用时间步关键帧调度中上次使用的潜在关键帧。*如果“应用高级 ControlNet”节点设置了 latent_kf_override，则在采样过程中将使用 override 潜在关键帧，而非 latent_keyframe。*\n- 🟨***mask_optional***：应用于 ControlNet 的注意力掩码；基本上决定了 ControlNet 应作用于图像的哪一部分（以及相对强度，如果掩码不是二值的）。与“应用高级 ControlNet”节点上的 mask_optional 相同，既可以对所有潜在变量应用同一张掩码，也可以为每个潜在变量单独指定掩码。如果 inherit_missing 为 True，且未传递 mask_optional，则会尝试重用时间步关键帧调度中上次使用的 mask_optional。它不会被“应用高级 ControlNet”节点上的 mask_optional 覆盖，而是会同时生效。\n- 🟦***start_percent***：此时间步关键帧有资格被使用的采样步骤百分比。它是时间步关键帧调度中的“关键”。\n- 🟦***strength***：ControlNet 的强度；基本上会将 ControlNet 的效果乘以此值，与“应用 ControlNet”节点上的强度叠加使用。如果设置为 0.0，则在此时间步关键帧生效期间不会产生任何效果，并且由于不进行任何计算，会加快采样速度。\n- 🟦***null_latent_kf_strength***：为未在传入的潜在关键帧中指定的潜在变量分配的强度。如果没有传入潜在关键帧，或者在采样过程中潜在关键帧中没有未指定的 batch_indeces，则此参数无效。\n- 🟦***inherit_missing***：决定是否从之前的时间步关键帧中重用未在此时间步关键帧中指定的可选值（control_net_weights、latent_keyframe 和 mask_option）。如果只想继承特定的输入，请使用默认值。\n- 🟦***guarantee_steps***：当设置为 1 或更大时，即使调度中排在此时间步关键帧之前的某个关键帧的 start_percent 更接近当前采样百分比，此时间步关键帧仍会在接下来的指定步骤内继续生效，然后再切换到下一个选定的时间步关键帧。无论该时间步关键帧是否被使用，其输入仍将用于 inherit_missing 目的。\n\n### 输出\n- 🟪***TIMESTEP_KF***：创建的时间步关键帧，可以链接到另一个时间步关键帧或作为时间步关键帧输入。\n\n## 时间步关键帧插值\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_75ef1bd8704c.png)\n\n允许在给定的百分比范围内创建具有插值强度值的时间步关键帧。（生成的第一个关键帧将具有 guarantee_steps=1，后续的关键帧则为 guarantee_steps=0）。\n\n### 输入\n- 🟨***prev_timestep_kf***：用于将多个时间步关键帧串联起来，形成一个调度表。输入顺序无关紧要——时间步关键帧会根据其 start_percent 自动排序。*如果 prev_timestep_keyframe 中包含与当前时间步关键帧相同 start_percent 的关键帧，则会被覆盖。*\n- 🟨***cn_weights***：在该时间步关键帧生效期间应用于 ControlNet 的权重。必须与已加载的 ControlNet 兼容，否则会抛出错误，说明哪些权重类型是兼容的。如果 inherit_missing 为 True，且未传入 control_net_weight，则会尝试复用时间步关键帧调度表中上次使用的权重。*如果“应用高级 ControlNet”节点设置了 weight_override，则在采样时将使用 weight_override，而非 control_net_weight。*\n- 🟨***latent_keyframe***：在该时间步关键帧生效期间应用于 ControlNet 的潜在关键帧。如果 inherit_missing 为 True，且未传入 latent_keyframe，则会尝试复用时间步关键帧调度表中上次使用的潜在关键帧。*如果“应用高级 ControlNet”节点设置了 latent_kf_override，则在采样时将使用 latent_lf_override，而非 latent_keyframe。*\n- 🟨***mask_optional***：应用于 ControlNet 的注意力掩码；基本上决定了 ControlNet 应作用于图像的哪一部分（以及相对强度，如果掩码不是二值的）。与“应用高级 ControlNet”节点上的 mask_optional 相同，可以为所有潜在变量应用同一张掩码，也可以为每个潜在变量指定单独的掩码。如果 inherit_missing 为 True，且未传入 mask_optional，则会尝试复用时间步关键帧调度表中上次使用的 mask_optional。它不会被“应用高级 ControlNet”节点上的 mask_optional 覆盖，而是会同时使用。\n- 🟦***start_percent***：第一个生成的时间步关键帧符合使用条件的采样步骤百分比。\n- 🟦***end_percent***：最后一个生成的时间步关键帧符合使用条件的采样步骤百分比。\n- 🟦***strength_start***：范围开始处时间步关键帧的强度。\n- 🟦***strength_end***：范围结束处时间步关键帧的强度。\n- 🟦***interpolation***：插值方法。\n- 🟦***intervals***：总共要生成的关键帧数量——第一个的关键帧的 start_percent 等于 start_percent，最后一个的关键帧的 start_percent 等于 end_percent。\n- 🟦***null_latent_kf_strength***：为未在传入的 latent_keyframes 中列出的潜在变量分配的强度。如果没有传入 latent_keyframes，或者在采样时 latent_keyframes 中没有未列出的 batch_indeces，则此参数无效。\n- 🟦***inherit_missing***：决定是否应从先前的时间步关键帧中复用可选值（control_net_weights、latent_keyframe 和 mask_option），这些值在当前时间步关键帧中未包含。若仅需继承特定输入，请使用默认输入。\n- 🟦***print_keyframes***：如果为 True，则会打印由该节点生成的时间步关键帧，用于调试目的。\n\n### 输出\n- 🟪***TIMESTEP_KF***：创建的时间步关键帧，可将其链接到另一个关键帧，或作为时间步关键帧输入使用。\n\n## 从列表创建时间步关键帧\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_0492fb3f3f8d.png)\n\n允许通过浮点数列表创建时间步关键帧，例如使用 [ComfyUI_FizzNodes](https:\u002F\u002Fgithub.com\u002FFizzleDorf\u002FComfyUI_FizzNodes) 节点中的“批量数值调度”。（第一个生成的关键帧将具有 guarantee_steps=1，后续的关键帧则为 guarantee_steps=0。）\n\n### 输入\n- 🟨***prev_timestep_kf***：用于将多个时间步关键帧串联起来，形成一个调度表。输入顺序无关紧要——时间步关键帧会根据其 start_percent 自动排序。*如果 prev_timestep_keyframe 中包含与当前时间步关键帧相同 start_percent 的关键帧，则会被覆盖。*\n- 🟨***cn_weights***：在该时间步关键帧生效期间应用于 ControlNet 的权重。必须与已加载的 ControlNet 兼容，否则会抛出错误，说明哪些权重类型是兼容的。如果 inherit_missing 为 True，且未传入 control_net_weight，则会尝试复用时间步关键帧调度表中上次使用的权重。*如果“应用高级 ControlNet”节点设置了 weight_override，则在采样时将使用 weight_override，而非 control_net_weight。*\n- 🟨***latent_keyframe***：在该时间步关键帧生效期间应用于 ControlNet 的潜在关键帧。如果 inherit_missing 为 True，且未传入 latent_keyframe，则会尝试复用时间步关键帧调度表中上次使用的潜在关键帧。*如果“应用高级 ControlNet”节点设置了 latent_kf_override，则在采样时将使用 latent_lf_override，而非 latent_keyframe。*\n- 🟨***mask_optional***：应用于 ControlNet 的注意力掩码；基本上决定了 ControlNet 应作用于图像的哪一部分（以及相对强度，如果掩码不是二值的）。与“应用高级 ControlNet”节点上的 mask_optional 相同，可以为所有潜在变量应用同一张掩码，也可以为每个潜在变量指定单独的掩码。如果 inherit_missing 为 True，且未传入 mask_optional，则会尝试复用时间步关键帧调度表中上次使用的 mask_optional。它不会被“应用高级 ControlNet”节点上的 mask_optional 覆盖，而是会同时使用。\n- 🟩***float_strengths***：一个浮点数列表，对应每个时间步关键帧的强度；第一个将分配给 start_percent，最后一个将分配给 end_percent，其余按线性方式均匀分布。\n- 🟦***start_percent***：第一个生成的时间步关键帧符合使用条件的采样步骤百分比。\n- 🟦***end_percent***：最后一个生成的时间步关键帧符合使用条件的采样步骤百分比。\n- 🟦***null_latent_kf_strength***：为未在传入的 latent_keyframes 中列出的潜在变量分配的强度。如果没有传入 latent_keyframes，或者在采样时 latent_keyframes 中没有未列出的 batch_indeces，则此参数无效。\n- 🟦***inherit_missing***：决定是否应从先前的时间步关键帧中复用可选值（control_net_weights、latent_keyframe 和 mask_option），这些值在当前时间步关键帧中未包含。若仅需继承特定输入，请使用默认输入。\n- 🟦***print_keyframes***：如果为 True，则会打印由该节点生成的时间步关键帧，用于调试目的。\n\n### 输出\n- 🟪***TIMESTEP_KF***：创建的时间步关键帧，可将其链接到另一个关键帧，或作为时间步关键帧输入使用。\n\n## 隐变量关键帧\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_05d1d448b0c3.png)\n\n单个隐变量关键帧，用于为特定的 `batch_index` 选择强度。如果采样过程中不存在该 `batch_index`，则不会产生任何效果。可以与其他任何隐变量关键帧类型的节点串联，以创建隐变量关键帧序列。\n\n### 输入\n- 🟨***prev_latent_kf***：用于将多个隐变量关键帧串联起来形成序列。*如果 `prev_latent_kf` 中包含的某个隐变量关键帧与当前隐变量关键帧具有相同的 `batch_index`，那么它将优先于当前节点的值。*\n- 🟦***batch_index***：批次中应用 ControlNet 强度的隐变量索引。在隐变量关键帧序列中充当“键”。\n- 🟦***strength***：应用于相应隐变量的 ControlNet 强度。\n\n### 输出\n- 🟪***LATENT_KF***：生成的隐变量关键帧，可链接到其他节点或作为隐变量关键帧输入。\n\n## 隐变量关键帧组\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_767de446ac91.png)\n\n允许通过单独的索引或 Python 风格的范围来创建隐变量关键帧。\n\n### 输入\n- 🟨***prev_latent_kf***：用于将多个隐变量关键帧串联起来形成序列。*如果 `prev_latent_kf` 中包含的任何隐变量关键帧与当前隐变量关键帧具有相同的 `batch_index`，那么它们将优先于本节点的版本。*\n- 🟨***latent_optional***：预计传入进行采样的隐变量；仅当您希望使用负索引时才需要（会自动转换为实际值）。\n- 🟦***index_strengths***：一个字符串列表，包含要分配强度的索引或 Python 风格的索引范围。如果传入了 `latent_optional`，则可以包含负索引或包含负数的 Python 风格范围。不同的索引必须用逗号分隔。可以通过 `batch_index=strength` 的形式指定单个隐变量，例如 `0=0.9`。范围可以通过 `start_index_inclusive:end_index_exclusive=strength` 的形式指定，例如 `0:8=strength`。当 `latent_optional` 有输入时，也可以使用负索引，例如 `0,-4=0.25`。\n- 🟦***print_keyframes***：如果为真，则会打印由该节点生成的隐变量关键帧，以便调试。\n\n### 输出\n- 🟪***LATENT_KF***：生成的隐变量关键帧，可链接到其他节点或作为隐变量关键帧输入。\n\n## 隐变量关键帧插值\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_b128fa78341d.png)\n\n允许在一定范围内创建具有插值强度的隐变量关键帧。\n\n### 输入\n- 🟨***prev_latent_kf***：用于将多个隐变量关键帧串联起来形成序列。*如果 `prev_latent_kf` 中包含的任何隐变量关键帧与当前隐变量关键帧具有相同的 `batch_index`，那么它们将优先于本节点的版本。*\n- 🟦***batch_index_from***：范围的起始 `batch_index`，包含在内。\n- 🟦***batch_index_to***：范围的结束 `batch_index`，不包含在内（Python 风格的范围）。\n- 🟦***strength_from***：插值的起始强度。\n- 🟦***strength_to***：插值的结束强度。\n- 🟦***interpolation***：插值方法。\n- 🟦***print_keyframes***：如果为真，则会打印由该节点生成的隐变量关键帧，以便调试。\n\n### 输出\n- 🟪***LATENT_KF***：生成的隐变量关键帧，可链接到其他节点或作为隐变量关键帧输入。\n\n## 从列表创建隐变量关键帧\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_readme_c1e02a8f4b10.png)\n\n允许通过浮点数列表创建隐变量关键帧，例如结合 [ComfyUI_FizzNodes](https:\u002F\u002Fgithub.com\u002FFizzleDorf\u002FComfyUI_FizzNodes) 节点中的批量数值调度功能。\n\n### 输入\n- 🟨***prev_latent_kf***：用于将多个隐变量关键帧串联起来形成序列。*如果 `prev_latent_kf` 中包含的任何隐变量关键帧与当前隐变量关键帧具有相同的 `batch_index`，那么它们将优先于本节点的版本。*\n- 🟩***float_strengths***：一个浮点数列表，对应每个隐变量关键帧的强度；`batch_index` 即为列表中每个浮点数值的索引。\n- 🟦***print_keyframes***：如果为真，则会打印由该节点生成的隐变量关键帧，以便调试。\n\n### 输出\n- 🟪***LATENT_KF***：生成的隐变量关键帧，可链接到其他节点或作为隐变量关键帧输入。\n\n# 还有更多的节点需要文档化并展示其用法——很快就会添加！ 待办事项","# ComfyUI-Advanced-ControlNet 快速上手指南\n\nComfyUI-Advanced-ControlNet 是一个增强型 ControlNet 节点包，支持在采样时间步（Timesteps）和批次潜变量（Batched Latents）上调度 ControlNet 强度，应用自定义权重及注意力掩码。它完美支持滑动上下文采样（Sliding Context Sampling），适用于动画生成（如配合 AnimateDiff-Evolved），并复刻了 Auto1111 中“提示词更重要”和\"ControlNet 更重要”的高级控制功能。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Windows, Linux, macOS\n- **Python**: 3.10 或更高版本（推荐与 ComfyUI 官方环境一致）\n- **ComfyUI**: 已安装最新版本的 ComfyUI 主程序\n- **显卡**: 推荐使用 NVIDIA GPU (CUDA) 以获得最佳性能，AMD (ROCm) 或 Apple Silicon 也可运行\n\n### 前置依赖\n本插件依赖以下核心组件，请确保已安装：\n1. **ComfyUI 主程序**: 基础运行环境。\n2. **comfyui_controlnet_aux**: 用于提供 ControlNet 预处理器（如 Canny, Depth 等）。\n   - 仓库地址: `https:\u002F\u002Fgithub.com\u002FFannovel16\u002Fcomfyui_controlnet_aux`\n3. **模型文件**: 需自行下载所需的 ControlNet 模型、T2IAdapter 或 ControlLoRA 模型至 `ComfyUI\u002Fmodels\u002Fcontrolnet\u002F` 目录。\n\n> **国内加速建议**:\n> - 克隆仓库时可使用 Gitee 镜像（如有）或在命令前添加代理。\n> - 模型下载推荐使用 Hugging Face 国内镜像站（如 `hf-mirror.com`）或 ModelScope。\n\n## 安装步骤\n\n### 方法一：通过 ComfyUI Manager 安装（推荐）\n如果您已安装 **ComfyUI-Manager** 插件：\n1. 启动 ComfyUI，点击右侧菜单的 **\"Manager\"** 按钮。\n2. 选择 **\"Install Custom Nodes\"**。\n3. 在搜索框输入 `Advanced-ControlNet`。\n4. 找到 `ComfyUI-Advanced-ControlNet` (作者：Kosinkadink)，点击 **Install**。\n5. 安装完成后重启 ComfyUI。\n\n### 方法二：手动命令行安装\n进入 ComfyUI 的 `custom_nodes` 目录，执行以下命令：\n\n```bash\ncd ComfyUI\u002Fcustom_nodes\ngit clone https:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-Advanced-ControlNet.git\n```\n\n*若网络受限，可使用国内加速代理：*\n```bash\ncd ComfyUI\u002Fcustom_nodes\ngit clone https:\u002F\u002Fghproxy.com\u002Fhttps:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-Advanced-ControlNet.git\n```\n\n安装完成后，重启 ComfyUI 以加载新节点。\n\n## 基本使用\n\n本插件的核心在于使用 **Apply Advanced ControlNet** 节点替代原生的 Apply ControlNet 节点，以实现更精细的控制。\n\n### 最简单的工作流示例\n\n1. **加载模型**:\n   - 使用 `Load Advanced ControlNet Model` 节点加载你的 ControlNet 模型（例如 `control_v11p_sd15_canny.pth`）。\n   - *注意：该节点会自动将普通模型转换为高级版本。*\n\n2. **准备图像**:\n   - 使用 `Load Image` 加载参考图。\n   - （可选）使用 `Preprocessor` 节点（来自 comfyui_controlnet_aux）对图像进行预处理（如提取边缘）。\n\n3. **应用控制**:\n   - 添加 `Apply Advanced ControlNet` 节点。\n   - **positive\u002Fnegative**: 连接你的正向和反向提示词条件（Conditioning）。\n   - **control_net**: 连接第 1 步加载的模型。\n   - **image**: 连接第 2 步的图像（或预处理后的图像）。\n   - **strength**: 设置控制强度（默认 1.0）。\n   - **start_percent \u002F stop_percent**: 设置控制在采样过程中的生效区间（例如 0.0 到 0.8 表示在前 80% 步骤生效）。\n\n4. **生成图像**:\n   - 将 `Apply Advanced ControlNet` 输出的 `positive` 和 `negative` 连接到 `KSampler`。\n   - 连接 VAE Decode 和 Save Image 节点即可生成结果。\n\n### 进阶功能速览\n\n- **时间步调度 (Timestep Scheduling)**:\n  使用 `Timestep Keyframe` 节点串联，可以在采样的不同阶段动态改变 ControlNet 强度。例如：前期强控制构图，后期弱控制以保留细节。\n  \n- **模拟 Auto1111 高级权重**:\n  在 `Timestep Keyframe` 或相关权重节点中：\n  - 调整 `base_multiplier` 可模拟 **\"My prompt is more important\"**（提示词更重要）。\n  - 调整 `uncond_multiplier` (设为 0.0) 可模拟 **\"ControlNet is more important\"**（ControlNet 更重要），也可在 0.0-1.0 间微调。\n\n- **滑动上下文 (Sliding Context)**:\n  当与 `AnimateDiff-Evolved` 配合制作视频时，本插件自动支持滑动窗口采样，无需额外配置即可实现长视频的一致性控制。\n\n### 节点连接示意\n```text\n[Load Advanced ControlNet Model] --> (control_net) [Apply Advanced ControlNet] --> (positive\u002Fnegative) [KSampler]\n                                           ^\n                                           | (image)\n                                     [Load Image \u002F Preprocessor]\n```\n\n通过以上步骤，您即可开始使用 ComfyUI-Advanced-ControlNet 进行高精度的图像生成控制。更多复杂调度（如 Latent Keyframes）可在熟悉基础用法后尝试。","一位动画创作者正在制作一段 15 秒的角色行走循环视频，希望角色在起步和停止时动作柔和，而在中间奔跑阶段严格遵循骨骼姿态约束，同时保持背景风格的连贯性。\n\n### 没有 ComfyUI-Advanced-ControlNet 时\n- **控制力度僵化**：ControlNet 在整个生成过程中强度恒定，导致角色在需要自然过渡的起止帧出现动作生硬或“鬼畜”抖动。\n- **缺乏局部精细调控**：无法针对特定帧（Latent）单独调整控制权重，若想强化某几帧的姿态一致性，只能重新生成整段视频或手动重绘。\n- **长视频上下文断裂**：在使用 AnimateDiff 生成长序列时，普通节点不支持滑动上下文窗口，导致长镜头中角色特征随时间推移逐渐崩坏或闪烁。\n- **提示词与控制权冲突**：难以平衡“提示词创意”与“控制网约束”，往往顾此失彼，要么画面偏离草图，要么失去了提示词带来的丰富细节。\n\n### 使用 ComfyUI-Advanced-ControlNet 后\n- **动态强度调度**：利用时间步关键帧（Timestep Keyframes），创作者设定了“弱 - 强 - 弱”的控制曲线，使角色起停动作流畅自然，中间奔跑阶段则精准贴合骨架。\n- **帧级独立控制**：通过潜在关键帧（Latent Keyframes），仅对动作复杂的第 10-15 帧增强控制权重，其余帧保持自由发挥，无需重复生成全片。\n- **无缝长序列生成**：借助对滑动上下文采样的原生支持，角色在长镜头中始终保持特征稳定，彻底消除了长视频生成中的闪烁和变形问题。\n- **柔性权重平衡**：通过 Soft Weights 功能微调“提示词重要性”与\"ControlNet 重要性”，既保留了草图的构图，又让光影细节完美响应了提示词描述。\n\nComfyUI-Advanced-ControlNet 通过将控制策略从“全局静态”升级为“时空动态”，让高质量、长篇幅的可控视频生成变得精准且高效。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKosinkadink_ComfyUI-Advanced-ControlNet_865e662f.png","Kosinkadink","Jedrzej Kosinski","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FKosinkadink_144e02ac.png",null,"https:\u002F\u002Fjedkos.com","https:\u002F\u002Fgithub.com\u002FKosinkadink",[81,85],{"name":82,"color":83,"percentage":84},"Python","#3572A5",96.4,{"name":86,"color":87,"percentage":88},"JavaScript","#f1e05a",3.6,956,90,"2026-04-04T09:24:57","GPL-3.0","","未说明（作为 ComfyUI 插件，通常依赖宿主环境的 NVIDIA GPU 以运行 ControlNet 模型）","未说明",{"notes":97,"python":95,"dependencies":98},"这是一个 ComfyUI 的自定义节点插件，并非独立运行的程序，因此没有单独列出的操作系统、Python 或显存需求，其运行环境完全取决于主程序 ComfyUI 的配置。该工具主要用于在采样步骤和批次潜变量中调度 ControlNet 强度，支持滑动上下文采样（需配合 ComfyUI-AnimateDiff-Evolved 使用）。使用前需安装主程序 ComfyUI 及可选的预处理器插件 comfyui_controlnet_aux。支持多种控制模型包括 ControlNet, T2IAdapter, ControlLoRA, SparseCtrl, SVD-ControlNet 等。",[28,99],"comfyui_controlnet_aux",[15,61,43],"2026-03-27T02:49:30.150509","2026-04-07T13:28:54.376162",[104,109,114,119,124,129],{"id":105,"question_zh":106,"answer_zh":107,"source_url":108},22158,"更新后出现 'ControlNet' object has no attribute 'device' 错误怎么办？","该错误通常是因为混淆了插件功能。IPAdapter 相关功能由 ComfyUI_IPAdapter_plus 插件处理，而不是 ComfyUI-Advanced-ControlNet。请检查您的工作流节点，确保 IPAdapter 相关的节点（如 IPAdapterUnifiedLoaderFaceID）已正确安装并来自正确的插件包，同时确认 ClipVision 模型文件是否存在于指定目录中。","https:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-Advanced-ControlNet\u002Fissues\u002F190",{"id":110,"question_zh":111,"answer_zh":112,"source_url":113},22159,"为什么 ControlNet 不支持 Reference ControlNet（参考控制网）？","Reference ControlNet (RefCN) 目前仅适用于 UNet 模型，不适用于 Transformer 架构的模型（如 SD3）。这是一种较旧的手动参考方法。维护者表示未来可能会尝试为 Transformer 模型开发类似的功能，但目前尚未支持。如果在 SD3.5 等基于 Transformer 的模型上使用，会报错 \"OpenAISignatureMMDITWrapper' object has no attribute 'input_blocks\"。","https:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-Advanced-ControlNet\u002Fissues\u002F100",{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},22160,"遇到 \"No such file or directory: ...\u002F__init__.py\" 或文件丢失错误如何解决？","这通常是由于安装不完整或文件损坏导致的。建议完全卸载该自定义节点（删除 custom_nodes 下对应的文件夹），然后重新通过 ComfyUI Manager 进行安装。如果是特定模型文件（如 LoRA）报错找不到，可能需要删除并重新创建对应的堆叠节点（Stacker Node），并确保模型文件路径正确。","https:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-Advanced-ControlNet\u002Fissues\u002F18",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},22161,"运行时报错 \"set_cond_hint() takes from 2 to 4 positional arguments but 5 were given\" 是什么原因？","这是一个典型的版本不兼容问题。通常是因为 ComfyUI 主程序版本过旧，而自定义节点已更新以适配新版本的 API，或者反之。解决方法是更新 ComfyUI 到最新版本，并确保所有依赖项和自定义节点都是最新的。如果问题依旧，尝试备份模型目录后，完全重装 ComfyUI 环境往往能解决残留的配置冲突。","https:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-Advanced-ControlNet\u002Fissues\u002F158",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},22162,"导入错误（Import Error）或突然无法运行该如何排查？","如果遇到突发的导入错误，首先检查 ComfyUI 是否为最新版本。许多此类问题是由于核心程序更新后，旧版自定义节点不兼容导致的。标签提示 \"update your comfyui\"，因此请优先执行更新操作。如果您使用的是 Colab 等云端环境，请确保运行的 Notebook 脚本也是最新的，因为旧的脚本可能包含过时的安装命令。","https:\u002F\u002Fgithub.com\u002FKosinkadink\u002FComfyUI-Advanced-ControlNet\u002Fissues\u002F55",{"id":130,"question_zh":131,"answer_zh":132,"source_url":118},22163,"LoRA Stacker 节点报错特定模型文件（如 .safetensors）未找到怎么办？","当 LoRA Stacker 节点报告特定模型文件不存在时，即使文件看似存在，也可能是节点缓存或引用失效。解决方案是删除工作流中报错的 LoRA Stacker 节点，然后重新添加一个新的该类型节点并重新配置参数。这可以强制节点重新读取模型列表和路径。",[]]