Files
CavinHuang-comfyui-nodes-docs/docs/SaltParallaxMotion.md
2024-07-04 08:39:03 +08:00

227 lines
9.6 KiB
Markdown

# Documentation
- Class name: `SaltParallaxMotion`
- Category: `SALT/Scheduling/Parallax Motion`
- Output node: `False`
SaltParallaxMotion节点旨在为音视频演示中的视差运动效果生成参数计划表。它利用各种输入动态调整元素的运动和深度,从而创造出更具沉浸感和吸引力的体验。
# Input types
## Required
- **`zoom_preset`**
- 未知
- Comfy dtype: `COMBO[STRING]`
- Python dtype: 未知
- **`horizontal_pan_preset`**
- 未知
- Comfy dtype: `COMBO[STRING]`
- Python dtype: 未知
- **`vertical_pan_preset`**
- 未知
- Comfy dtype: `COMBO[STRING]`
- Python dtype: 未知
- **`custom_x_min`**
- 未知
- Comfy dtype: `FLOAT`
- Python dtype: 未知
- **`custom_x_max`**
- 未知
- Comfy dtype: `FLOAT`
- Python dtype: 未知
- **`custom_y_min`**
- 未知
- Comfy dtype: `FLOAT`
- Python dtype: 未知
- **`custom_y_max`**
- 未知
- Comfy dtype: `FLOAT`
- Python dtype: 未知
- **`custom_z_min`**
- 未知
- Comfy dtype: `FLOAT`
- Python dtype: 未知
- **`custom_z_max`**
- 未知
- Comfy dtype: `FLOAT`
- Python dtype: 未知
- **`parallax_intensity`**
- 未知
- Comfy dtype: `FLOAT`
- Python dtype: 未知
- **`zoom_intensity`**
- 未知
- Comfy dtype: `FLOAT`
- Python dtype: 未知
# Output types
- **`front_x_min`**
- Comfy dtype: `FLOAT`
- 前层运动范围的X轴最小值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`front_x_max`**
- Comfy dtype: `FLOAT`
- 前层运动范围的X轴最大值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`front_y_min`**
- Comfy dtype: `FLOAT`
- 前层运动范围的Y轴最小值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`front_y_max`**
- Comfy dtype: `FLOAT`
- 前层运动范围的Y轴最大值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`front_z_min`**
- Comfy dtype: `FLOAT`
- 前层运动范围的Z轴最小值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`front_z_max`**
- Comfy dtype: `FLOAT`
- 前层运动范围的Z轴最大值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`back_x_min`**
- Comfy dtype: `FLOAT`
- 后层运动范围的X轴最小值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`back_x_max`**
- Comfy dtype: `FLOAT`
- 后层运动范围的X轴最大值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`back_y_min`**
- Comfy dtype: `FLOAT`
- 后层运动范围的Y轴最小值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`back_y_max`**
- Comfy dtype: `FLOAT`
- 后层运动范围的Y轴最大值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`back_z_min`**
- Comfy dtype: `FLOAT`
- 后层运动范围的Z轴最小值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
- **`back_z_max`**
- Comfy dtype: `FLOAT`
- 后层运动范围的Z轴最大值,用于在视差运动中贡献深度效果。
- Python dtype: `float`
## Usage tips
- Infra type: `CPU`
- Common nodes: unknown
## Source code
```python
class SaltParallaxMotion:
"""
A node for generating min/max FLOAT values for Front and Back layers across X, Y, and Z axes
in 2D plane translations to create a parallax effect, based on selected presets or custom input values.
Adjusts these values based on the parallax intensity.
"""
def __init__(self):
pass
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"zoom_preset": (["None", "Zoom In", "Zoom Out", "Zoom In/Out", "Zoom Out/In", "Custom", "Select Random"], {
"default": "None"
}),
"horizontal_pan_preset": (["None", "Pan Left → Right", "Pan Right → Left", "Pan Left → Center",
"Pan Right → Center", "Pan Center → Right", "Pan Center → Left", "Custom", "Select Random"], {
"default": "None"
}),
"vertical_pan_preset": (["None", "Pan Up → Down", "Pan Down → Up", "Pan Up → Center",
"Pan Down → Center", "Pan Center → Up", "Pan Center → Down", "Custom", "Select Random"], {
"default": "None"
}),
"custom_x_min": ("FLOAT", {"default": 0.0}),
"custom_x_max": ("FLOAT", {"default": 0.0}),
"custom_y_min": ("FLOAT", {"default": 0.0}),
"custom_y_max": ("FLOAT", {"default": 0.0}),
"custom_z_min": ("FLOAT", {"default": 1.0}),
"custom_z_max": ("FLOAT", {"default": 1.0}),
"parallax_intensity": ("FLOAT", {"default": 1.0}),
"zoom_intensity": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0}),
},
}
RETURN_TYPES = ("FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT")
RETURN_NAMES = ("front_x_min", "front_x_max", "front_y_min", "front_y_max", "front_z_min", "front_z_max", "back_x_min", "back_x_max", "back_y_min", "back_y_max", "back_z_min", "back_z_max")
FUNCTION = "generate_parameters"
CATEGORY = "SALT/Scheduling/Parallax Motion"
def generate_parameters(self, zoom_preset, horizontal_pan_preset, vertical_pan_preset,
custom_x_min, custom_x_max, custom_y_min, custom_y_max,
custom_z_min, custom_z_max, parallax_intensity, zoom_intensity):
# Handle random selection for zoom presets
if zoom_preset == "Select Random":
zoom_options = [key for key in zoom_presets.keys() if key not in ["None", "Custom", "Select Random"]]
zoom_preset = random.choice(zoom_options)
# Apply the selected or randomly chosen zoom preset
if zoom_preset in zoom_presets:
z_min, z_max = zoom_presets[zoom_preset]
# Handle random selection for horizontal pan presets
if horizontal_pan_preset == "Select Random":
horizontal_options = [key for key in horizontal_pan_presets.keys() if key not in ["None", "Custom", "Select Random"]]
horizontal_pan_preset = random.choice(horizontal_options)
# Apply the selected or randomly chosen horizontal pan preset
if horizontal_pan_preset in horizontal_pan_presets:
x_min, x_max = horizontal_pan_presets[horizontal_pan_preset]
# Handle random selection for vertical pan presets
if vertical_pan_preset == "Select Random":
vertical_options = [key for key in vertical_pan_presets.keys() if key not in ["None", "Custom", "Select Random"]]
vertical_pan_preset = random.choice(vertical_options)
# Apply the selected or randomly chosen vertical pan preset
if vertical_pan_preset in vertical_pan_presets:
y_min, y_max = vertical_pan_presets[vertical_pan_preset]
# Initialize default axis values
x_min, x_max = 0, 0
y_min, y_max = 0, 0
z_min, z_max = 1, 1 # Default Z values assume no zoom (scale of 1)
# Apply the selected zoom preset
if zoom_preset in zoom_presets:
z_min, z_max = zoom_presets[zoom_preset]
# Apply the selected horizontal pan preset
if horizontal_pan_preset in horizontal_pan_presets:
x_min, x_max = horizontal_pan_presets[horizontal_pan_preset]
# Apply the selected vertical pan preset
if vertical_pan_preset in vertical_pan_presets:
y_min, y_max = vertical_pan_presets[vertical_pan_preset]
# For 'Custom' selections, override with custom values
if zoom_preset == "Custom":
z_min, z_max = custom_z_min, custom_z_max
if horizontal_pan_preset == "Custom":
x_min, x_max = custom_x_min, custom_x_max
if vertical_pan_preset == "Custom":
y_min, y_max = custom_y_min, custom_y_max
# Calculate the back layer's values based on the parallax intensity
back_x_min = x_min / parallax_intensity if x_min != 0 else 0
back_x_max = x_max / parallax_intensity if x_max != 0 else 0
back_y_min = y_min / parallax_intensity if y_min != 0 else 0
back_y_max = y_max / parallax_intensity if y_max != 0 else 0
# Z values are not adjusted by parallax intensity
back_z_min, back_z_max = z_min, z_max
# Adjust for zoom intensity for Z axis to increase front zoom relative to back with higher intensity values
# This approach assumes the front layer's zoom can increase more than the back's as zoom_intensity increases.
# Adjust the formula as needed to align with your specific vision for the effect.
adjusted_front_z_min = z_min * (1 + zoom_intensity - 1) # Example adjustment, enhances the front zoom based on intensity
adjusted_front_z_max = z_max * (1 + zoom_intensity - 1) # Similarly for max zoom
# The back layer's zoom could remain unchanged, or you could apply a different formula if the back layer also needs adjustment.
back_z_min, back_z_max = z_min, z_max # Keeps back layer's zoom unchanged; modify as needed.
return (x_min, x_max, y_min, y_max, adjusted_front_z_min, adjusted_front_z_max, back_x_min, back_x_max, back_y_min, back_y_max, back_z_min, back_z_max)
```