102 lines
4.4 KiB
Markdown
102 lines
4.4 KiB
Markdown
# LoRA Hook Keyframes Interpolation 🎭🅐🅓
|
|
## Documentation
|
|
- Class name: ADE_LoraHookKeyframeInterpolation
|
|
- Category: Animate Diff 🎭🅐🅓/conditioning/schedule lora hooks
|
|
- Output node: False
|
|
- Repo Ref: https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git
|
|
|
|
此节点用于创建插值的LoRA挂钩关键帧,从而动态调整模型行为随时间的变化。它基于指定的起始和结束百分比、强度和插值方法生成一系列关键帧,从而实现对模型参数的细粒度控制。
|
|
|
|
## Input types
|
|
### Required
|
|
- start_percent
|
|
- 定义插值的起始百分比,设置生成关键帧序列的起始点。
|
|
- Comfy dtype: FLOAT
|
|
- Python dtype: float
|
|
- end_percent
|
|
- 指定插值的结束百分比,确定生成关键帧序列的终点。
|
|
- Comfy dtype: FLOAT
|
|
- Python dtype: float
|
|
- strength_start
|
|
- 设置插值的初始强度值,标记强度调整范围的开始。
|
|
- Comfy dtype: FLOAT
|
|
- Python dtype: float
|
|
- strength_end
|
|
- 确定插值的结束强度值,结束强度调整范围。
|
|
- Comfy dtype: FLOAT
|
|
- Python dtype: float
|
|
- interpolation
|
|
- 选择用于生成关键帧序列的插值方法,影响起始和结束值之间的过渡。
|
|
- Comfy dtype: COMBO[STRING]
|
|
- Python dtype: InterpolationMethod
|
|
- intervals
|
|
- 指定起始和结束点之间生成的间隔(或关键帧)数,影响插值的粒度。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- print_keyframes
|
|
- 可选。控制是否记录生成的关键帧,有助于调试和可视化插值过程。
|
|
- Comfy dtype: BOOLEAN
|
|
- Python dtype: bool
|
|
|
|
### Optional
|
|
- prev_hook_kf
|
|
- 可选。允许包括先前定义的一组LoRA挂钩关键帧,新的插值关键帧将添加到其中。
|
|
- Comfy dtype: LORA_HOOK_KEYFRAMES
|
|
- Python dtype: LoraHookKeyframeGroup
|
|
|
|
## Output types
|
|
- HOOK_KF
|
|
- Comfy dtype: LORA_HOOK_KEYFRAMES
|
|
- 返回一组LoRA挂钩关键帧,包括先前存在的和新插值的关键帧,准备在模型条件中应用。
|
|
- Python dtype: LoraHookKeyframeGroup
|
|
|
|
## Usage tips
|
|
- Infra type: CPU
|
|
- Common nodes: unknown
|
|
|
|
## Source code
|
|
```python
|
|
class CreateLoraHookKeyframeInterpolation:
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {
|
|
"required": {
|
|
"start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}),
|
|
"end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}),
|
|
"strength_start": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}, ),
|
|
"strength_end": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}, ),
|
|
"interpolation": (InterpolationMethod._LIST, ),
|
|
"intervals": ("INT", {"default": 5, "min": 2, "max": 100, "step": 1}),
|
|
"print_keyframes": ("BOOLEAN", {"default": False}),
|
|
},
|
|
"optional": {
|
|
"prev_hook_kf": ("LORA_HOOK_KEYFRAMES",),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("LORA_HOOK_KEYFRAMES",)
|
|
RETURN_NAMES = ("HOOK_KF",)
|
|
CATEGORY = "Animate Diff 🎭🅐🅓/conditioning/schedule lora hooks"
|
|
FUNCTION = "create_hook_keyframes"
|
|
|
|
def create_hook_keyframes(self,
|
|
start_percent: float, end_percent: float,
|
|
strength_start: float, strength_end: float, interpolation: str, intervals: int,
|
|
prev_hook_kf: LoraHookKeyframeGroup=None, print_keyframes=False):
|
|
if prev_hook_kf:
|
|
prev_hook_kf = prev_hook_kf.clone()
|
|
else:
|
|
prev_hook_kf = LoraHookKeyframeGroup()
|
|
percents = InterpolationMethod.get_weights(num_from=start_percent, num_to=end_percent, length=intervals, method=interpolation)
|
|
strengths = InterpolationMethod.get_weights(num_from=strength_start, num_to=strength_end, length=intervals, method=interpolation)
|
|
|
|
is_first = True
|
|
for percent, strength in zip(percents, strengths):
|
|
guarantee_steps = 0
|
|
if is_first:
|
|
guarantee_steps = 1
|
|
is_first = False
|
|
prev_hook_kf.add(LoraHookKeyframe(strength=strength, start_percent=percent, guarantee_steps=guarantee_steps))
|
|
if print_keyframes:
|
|
logger.info(f"LoraHookKeyframe - start_percent:{percent} = {strength}")
|
|
return (prev_hook_kf,) |