60 lines
2.4 KiB
Markdown
60 lines
2.4 KiB
Markdown
---
|
|
tags:
|
|
- Animation
|
|
- CameraControl
|
|
---
|
|
|
|
# Load CameraCtrl Poses (File) 🎭🅐🅓②
|
|
## Documentation
|
|
- Class name: `ADE_LoadCameraPoses`
|
|
- Category: `Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses`
|
|
- Output node: `False`
|
|
|
|
The `ADE_LoadCameraPoses` node is designed to load camera control poses from a specified file, facilitating the manipulation and animation of camera positions within the Animate Diff framework. It serves as a foundational element in creating dynamic and complex camera movements for animation sequences.
|
|
## Input types
|
|
### Required
|
|
- **`pose_filename`**
|
|
- Specifies the filename from which camera control poses are to be loaded. This filename should correspond to a file containing the desired camera poses, enabling the node to retrieve and utilize these poses for animation purposes.
|
|
- Comfy dtype: `COMBO[STRING]`
|
|
- Python dtype: `str`
|
|
## Output types
|
|
- **`cameractrl_poses`**
|
|
- Comfy dtype: `CAMERACTRL_POSES`
|
|
- Outputs a list of camera control poses, which are structured as lists of floats representing the camera's position, orientation, and other relevant parameters in the animation context.
|
|
- Python dtype: `list[list[float]]`
|
|
## Usage tips
|
|
- Infra type: `CPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class LoadCameraPoses:
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
input_dir = folder_paths.get_input_directory()
|
|
files = [f for f in os.listdir(input_dir) if os.path.isfile(os.path.join(input_dir, f))]
|
|
files = [f for f in files if f.endswith(".txt")]
|
|
return {
|
|
"required": {
|
|
"pose_filename": (sorted(files),),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("CAMERACTRL_POSES",)
|
|
CATEGORY = "Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses"
|
|
FUNCTION = "load_camera_poses"
|
|
|
|
def load_camera_poses(self, pose_filename: str):
|
|
file_path = folder_paths.get_annotated_filepath(pose_filename)
|
|
with open(file_path, 'r') as f:
|
|
poses = f.readlines()
|
|
# first line of file is the link to source, so can be skipped,
|
|
# and the rest is a header-less CSV file separated by single spaces
|
|
poses = [pose.strip().split(' ') for pose in poses[1:]]
|
|
poses = [[float(x) for x in pose] for pose in poses]
|
|
poses = set_original_pose_dims(poses, pose_width=CAM.DEFAULT_POSE_WIDTH, pose_height=CAM.DEFAULT_POSE_HEIGHT)
|
|
return (poses,)
|
|
|
|
```
|