154 lines
5.8 KiB
Markdown
154 lines
5.8 KiB
Markdown
# ComfyUI-WanKeyframing
|
|
|
|
A powerful ComfyUI custom node collection for keyframe-based video generation and batch image processing. This extension provides advanced tools for creating smooth video sequences from keyframes with intelligent conditioning and latent space interpolation.
|
|
|
|
## Features
|
|
|
|
- **Batch Image Loading**: Load and process multiple images from directories with smart resizing and sorting
|
|
- **Keyframe Video Generation**: Create video sequences from keyframes with smooth transitions
|
|
- **Multiple Resize Modes**: Flexible image resizing with stretch, fit, and crop options
|
|
- **Advanced Sorting**: Sort images by name, date, size, or keep original order
|
|
- **Multi-Latent Encoding**: Generate video-ready latent representations with conditioning
|
|
- **Prompt Keyframing**: Use indexed prompts for different video segments
|
|
|
|
## Installation
|
|
|
|
### Method 1: ComfyUI Manager (Recommended)
|
|
1. Install [ComfyUI Manager](https://github.com/ltdrdata/ComfyUI-Manager)
|
|
2. Search for "WanKeyframing" in the manager
|
|
3. Click Install
|
|
|
|
### Method 2: Git Clone
|
|
```bash
|
|
cd ComfyUI/custom_nodes/
|
|
git clone https://github.com/apenguin24/ComfyUI-WanKeyframing.git
|
|
```
|
|
|
|
### Method 3: Manual Download
|
|
1. Download the repository as a ZIP file
|
|
2. Extract to `ComfyUI/custom_nodes/comfyui-wankeyframing/`
|
|
3. Restart ComfyUI
|
|
|
|
## Nodes Overview
|
|
|
|
### Load Images From Directory
|
|
|
|
Efficiently loads and processes multiple images from a directory with advanced options.
|
|
|
|
**Features:**
|
|
- **Smart Resizing**: Automatically resize images to consistent dimensions
|
|
- **Multiple Sort Options**: Sort by name, date, size, or preserve order
|
|
- **Reload Control**: Force reload images when needed
|
|
- **Format Support**: PNG, JPG, JPEG, BMP, WEBP, TIF, TIFF
|
|
|
|
**Parameters:**
|
|
- `directory`: Input directory path (relative to ComfyUI input folder)
|
|
- `reload_on_execute`: Force reload on each execution
|
|
- `target_width/height`: Target dimensions for all images (8-8192px)
|
|
- `resize_mode`: How to handle different sized images
|
|
- **Stretch**: Stretch to exact dimensions (may distort)
|
|
- **Fit**: Fit inside dimensions, pad with black
|
|
- **Crop**: Crop to fill dimensions, maintain aspect ratio
|
|
- `sort_mode`: Image loading order
|
|
- **name_asc/desc**: Sort alphabetically by filename
|
|
- **date_asc/desc**: Sort by file modification date
|
|
- **size_asc/desc**: Sort by file size
|
|
- **none**: System order (no sorting)
|
|
|
|
### Wan Keyframe To Video
|
|
|
|
Advanced keyframe-to-video encoder that creates smooth video sequences with intelligent conditioning.
|
|
|
|
**Features:**
|
|
- **Multi-Segment Processing**: Process multiple keyframe pairs simultaneously
|
|
- **Indexed Prompts**: Use different prompts for different video segments
|
|
- **CLIP Vision Support**: Enhanced conditioning with vision embeddings
|
|
- **Flexible Video Length**: Control FPS and duration
|
|
- **Latent Space Interpolation**: Smooth transitions between keyframes
|
|
|
|
**Parameters:**
|
|
- `clip`: CLIP model for text encoding
|
|
- `positive_prompt`: Multi-line prompts with keyframe indexing (e.g., `[0] prompt1`)
|
|
- `negative_prompt`: Negative conditioning text
|
|
- `vae`: VAE model for latent encoding
|
|
- `width/height`: Video dimensions (16-8192px, step 16)
|
|
- `fps`: Frames per second (1-120)
|
|
- `seconds`: Video duration (1-60 seconds)
|
|
- `keyframes`: Input keyframe images (optional)
|
|
- `clip_vision_outputs`: CLIP vision embeddings (optional)
|
|
|
|
## 🔧 Usage Examples
|
|
|
|
### Basic Keyframe Video Workflow
|
|
|
|
1. **Load Keyframes**: Use "Load Images From Directory" to load your keyframe sequence
|
|
- Set appropriate target dimensions
|
|
- Use "name_asc" sorting for numbered sequences
|
|
|
|
2. **Generate Video**: Connect to "Wan Keyframe To Video"
|
|
- Set desired video parameters (FPS, duration, dimensions)
|
|
- Use indexed prompts for segment-specific conditioning:
|
|
```
|
|
[0] A serene mountain landscape at dawn
|
|
[1] The same landscape in golden hour
|
|
[2] A starlit night scene
|
|
```
|
|
|
|
3. **Process**: The node will create smooth transitions between keyframes
|
|
|
|
### Advanced Prompt Keyframing
|
|
|
|
Use indexed prompts to control different segments of your video:
|
|
|
|
```
|
|
[0] A peaceful garden in spring, soft lighting
|
|
[1] The garden in summer, vibrant colors, bright sun
|
|
[2] Autumn garden with falling leaves, warm tones
|
|
[3] Winter garden covered in snow, cold blue lighting
|
|
```
|
|
|
|
Each `[N]` corresponds to the keyframe at index N, creating segment-specific conditioning.
|
|
|
|
## Technical Details
|
|
|
|
### Resize Modes Explained
|
|
|
|
- **Stretch**: Direct resize to target dimensions. Fast but may distort aspect ratio.
|
|
- **Fit**: Maintains aspect ratio, adds padding. Good for preserving image content.
|
|
- **Crop**: Maintains aspect ratio, crops excess. Good for filling frame completely.
|
|
|
|
### Video Generation Process
|
|
|
|
1. **Keyframe Processing**: Each consecutive pair of keyframes creates a video segment
|
|
2. **Prompt Mapping**: Indexed prompts are matched to keyframe segments
|
|
3. **Latent Encoding**: Images are encoded to latent space with VAE
|
|
4. **Conditioning**: CLIP embeddings are generated for each segment
|
|
5. **Stacking**: All segments are combined into a single batch for processing
|
|
|
|
### Performance Tips
|
|
|
|
- Use consistent image sizes when possible to reduce processing overhead
|
|
- Moderate video lengths (1-5 seconds) work best for memory efficiency
|
|
- Consider using lower resolution for testing, then upscale final results
|
|
|
|
## Troubleshooting
|
|
|
|
**Images won't load:**
|
|
- Check that the directory path is relative to ComfyUI's input folder
|
|
- Ensure images are in supported formats
|
|
- Verify file permissions
|
|
|
|
**Memory errors:**
|
|
- Reduce video length or resolution
|
|
- Use fewer keyframes
|
|
- Close other applications to free RAM
|
|
|
|
**Inconsistent results:**
|
|
- Enable "reload_on_execute" if images change frequently
|
|
- Check that keyframe count matches your prompt indexing
|
|
- Ensure all keyframes have similar content/style
|
|
|
|
## Contributing
|
|
|
|
Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
|