First Frame & Last Frame Extractor
Extract the first and last frame from any video file or image batch in ComfyUI.
ComfyUI-FirstframeLastframeExtractor 🎬
Extract the first frame and last frame from any video — directly in your ComfyUI workflow.
A lightweight, zero-config utility node for ComfyUI that takes any video input and returns the first and last frames as standard IMAGE outputs. Works with direct file paths and image batches from other nodes like VideoHelperSuite.*
✨ Features
- 🎯 Dual Input Mode — Accepts a video file path (
STRING) or a pre-loaded image batch (IMAGE) from other nodes - 🔄 Auto Detection — Connect whichever input you have; the node handles the rest
- 🎥 Broad Codec Support —
.mp4,.avi,.mkv,.mov,.webm,.gifand more via OpenCV - 🛡️ Robust Fallback — If the codec doesn't support direct seeking, falls back to sequential reading
- ⚡ Lightweight — No heavy dependencies beyond what ComfyUI already ships with
- 🔗 Universal Compatibility — Works with all ComfyUI versions using the stable node API
📦 Installation
Option A — ComfyUI Manager (Easiest)
If you have ComfyUI Manager installed (it comes pre-installed with Comfy Desktop):
- Open ComfyUI and click the Manager button
- Click "Install Custom Nodes"
- Search for "FirstFrameLastFrame" or "First Frame Last Frame"
- Click Install → Restart ComfyUI
ComfyUI Manager handles cloning and dependency installation automatically.
Option B — ComfyUI Portable (Windows Standalone)
This is the most common Windows setup — the one you download as a .7z or .zip from the ComfyUI releases page.
Step 1: Clone the node
Open a Command Prompt or PowerShell window and navigate to your portable folder:
cd ComfyUI_windows_portable\ComfyUI\custom_nodes
git clone https://github.com/RmaNMetaverse/ComfyUI-FirstframeLastframeExtractor.git
Step 2: Install requirements
[!IMPORTANT] You must use the embedded Python that ships with the portable version, not your system Python. Otherwise the packages will be installed in the wrong place and ComfyUI won't see them.
Navigate back to the portable root folder and run:
cd ComfyUI_windows_portable
.\python_embeded\python.exe -m pip install -r .\ComfyUI\custom_nodes\ComfyUI-FirstframeLastframeExtractor\requirements.txt
Step 3: Restart ComfyUI.
Option C — Comfy Desktop (Electron App)
Comfy Desktop runs its own isolated Python environment. It also comes with ComfyUI Manager pre-installed, so Option A above is the recommended method.
If you need to install manually:
Step 1: Clone the node
Find your Comfy Desktop's custom_nodes folder. The typical location is:
| OS | Path |
|:---|:-----|
| Windows | C:\Users\<YOU>\AppData\Roaming\ComfyUI\custom_nodes\ |
| macOS | ~/Library/Application Support/ComfyUI/custom_nodes/ |
| Linux | ~/.config/ComfyUI/custom_nodes/ |
cd <path_to_custom_nodes>
git clone https://github.com/RmaNMetaverse/ComfyUI-FirstframeLastframeExtractor.git
Step 2: Install requirements
Locate the python_embeded (or python) folder inside your Comfy Desktop installation directory, then run:
"<path_to_comfy_desktop_python>\python.exe" -m pip install -r "<path_to_custom_nodes>\ComfyUI-FirstframeLastframeExtractor\requirements.txt"
[!TIP] The easiest way to find the right Python path: open Comfy Desktop → Manager → click "Open Terminal" — this opens a terminal pre-configured with the correct Python. Then just run:
pip install -r custom_nodes/ComfyUI-FirstframeLastframeExtractor/requirements.txt
Step 3: Restart Comfy Desktop.
Option D — Manual Install (pip / venv / conda)
For users who installed ComfyUI manually via git clone into a virtual environment or conda environment:
Step 1: Clone the node
cd ComfyUI/custom_nodes/
git clone https://github.com/RmaNMetaverse/ComfyUI-FirstframeLastframeExtractor.git
Step 2: Install requirements
Make sure your virtual environment is activated first, then:
pip install -r ComfyUI/custom_nodes/ComfyUI-FirstframeLastframeExtractor/requirements.txt
Step 3: Restart ComfyUI.
Option E — Manual Download (No Git)
- Go to the GitHub repo
- Click Code → Download ZIP
- Extract the folder into your
ComfyUI/custom_nodes/directory - Make sure the folder structure is correct —
__init__.pyshould be directly insidecustom_nodes/ComfyUI-FirstframeLastframeExtractor/(no double nesting) - Install requirements using the method for your ComfyUI version (see above)
- Restart ComfyUI
🚀 Quick Start
- Right-click the ComfyUI canvas
- Navigate to Add Node → Video/Utils → First Frame & Last Frame Extractor 🎬
- Connect an input (see below)
- Wire the outputs to Preview Image, Save Image, or any downstream node
- Queue the prompt
🔧 Node Reference
Inputs
| Name | Type | Required | Description |
|:------------ |:-------- |:--------:|:------------------------------------------------------------------------------- |
| video_path | STRING | Optional | Absolute path to a video file (.mp4, .avi, .mkv, .mov, .webm, .gif) |
| images | IMAGE | Optional | Image batch tensor from another node (e.g., VHS Load Video) |
[!NOTE] At least one input must be provided. If both are connected, the image batch takes priority.
Outputs
| Name | Type | Description |
|:------------- |:------- |:------------------------------------------------ |
| first_frame | IMAGE | The very first frame of the video [1, H, W, C] |
| last_frame | IMAGE | The very last frame of the video [1, H, W, C] |
Category
📁 Video/Utils → First Frame & Last Frame Extractor 🎬
💡 Usage Examples
Example 1: Direct File Path
Paste or type a video file path directly into the node — no other nodes needed.
┌─────────────────────────────────┐ ┌────────────────┐
│ First Frame & Last Frame Extractor 🎬 │ │ │
│ │ │ Preview Image │
│ video_path: C:\video.mp4 ├──────►│ │
│ │ └────────────────┘
│ first_frame ○──┤
│ last_frame ○──┼──────►┌────────────────┐
│ │ │ Save Image │
└─────────────────────────────────┘ └────────────────┘
Example 2: From VideoHelperSuite (VHS)
Connect the IMAGE output of a VHS Load Video node to extract the boundary frames from a loaded sequence.
┌──────────────────┐ ┌─────────────────────────────────┐ ┌────────────────┐
│ VHS Load Video │ │ First Frame & Last Frame Extractor 🎬 │ │ │
│ │ │ │ │ Preview Image │
│ IMAGE ○──┼──────►│ images ├──────►│ │
│ │ │ first_frame ○──┤ └────────────────┘
└──────────────────┘ │ last_frame ○──┤
│ │
└─────────────────────────────────┘
Example 3: Frame-to-Frame Comparison
Use both outputs for side-by-side comparison, img2img pipelines, or interpolation workflows.
🔗 Compatibility
| Component | Supported |
|:----------- |:---------------------------------------------------------------- |
| ComfyUI | All versions (stable NODE_CLASS_MAPPINGS API) |
| Python | 3.8+ |
| OS | Windows, Linux, macOS |
| Interop | VideoHelperSuite (VHS), or any node that outputs IMAGE batches |
🛠️ Dependencies
| Package | Notes |
|:-------------------------------- |:--------------------------------- |
| opencv-python-headless ≥ 4.5.0 | For reading video files from disk |
| torch | Already included in ComfyUI |
| numpy | Already included in ComfyUI |
🧪 Running Tests
A smoke test suite is included for local verification:
cd ComfyUI-FirstframeLastframeExtractor
python test_node.py
📄 License
This project is licensed under the MIT License.
🤝 Contributing
Contributions, issues, and feature requests are welcome! Feel free to open an issue or submit a pull request.
👤 Author
RmaN (Arman Jangmiri)
- GitHub: @RmaNMetaverse
<p align="center"> Made with ❤️ by RmaN for the ComfyUI community </p>