Earngenix Logo
Skip to main content

Workflow Blog · Intermediate · Updated 2026

FramePack Start and End Frame Workflow in ComfyUI (Full Guide)

One workflow, two modes: feed it a single image for standard FramePack image-to-video, or add a second image and it generates the motion that morphs the first into the second. Full node setup, exact sampler settings, and how to switch between both modes.

2

Modes

8 GB

Min VRAM

RTX 4090

Tested on

Intermediate

Skill level

By Earngenix Team ·

⚡ Quick Answer

To generate a video that morphs from one image into another in ComfyUI, use the FramePack Start and End Frame workflow — it needs the ComfyUI-FramePackWrapper_PlusOne custom node, the FramePack I2V diffusion model, a CLIP vision encoder for each image, and the Hunyuan Video VAE. The same workflow also runs as plain single-image FramePack if you mute the end-image branch — you don't need two separate workflows. Minimum 8 GB VRAM with the fp8 model; 16 GB+ recommended for bf16.

FramePack normally takes one image and a text prompt, then generates motion outward from that single frame. This build goes further: give it a second image — an end frame — and it generates the motion that connects the two. The two modes live in the same node graph, so this guide covers both instead of treating them as separate workflows.

Tested on ComfyUI v0.3.28, RTX 4090 (24 GB VRAM). Minimum VRAM: 8 GB (fp8 model, lower resolution).

Start image, end image, and blended output frame side by side
Start frame → generated motion → end frame.

What You Need Before You Start

Custom nodes:

This workflow needs two custom node packs — ComfyUI-FramePackWrapper_PlusOne (adds the FramePackSampler and DownloadAndLoadFramePackModel nodes) and ComfyUI-KJNodes (adds the GetImageSizeAndCount, SetNode, and GetNode utility nodes). You don't need to hunt these down one by one — load the workflow JSON above in ComfyUI, then let the Manager find and install whatever's missing automatically:

  1. Drag the downloaded workflow JSON into your ComfyUI canvas (or use Workflow > Open on the top menu).
  2. Open Manager from the top menu.
  3. Click "Install Missing Custom Nodes." ComfyUI scans the loaded workflow and lists every node pack it can't find locally — this will include ComfyUI-FramePackWrapper_PlusOne and ComfyUI-KJNodes.
  4. Select both from the list and click Install.
  5. Restart ComfyUI once installation finishes.

Models (exact filenames and folders):

ModelFilenameGoes in
FramePack diffusion model (quality)FramePackI2V_HY_bf16.safetensorsmodels/diffusion_models/
FramePack diffusion model (low VRAM)FramePackI2V_HY_fp8_e4m3fn.safetensorsmodels/diffusion_models/
CLIP Visionsigclip_vision_patch14_384.safetensorsmodels/clip_vision/
Text encoderclip_l.safetensorsmodels/text_encoders/
Text encoderllava_llama3_fp16.safetensorsmodels/text_encoders/
VAEhunyuan_video_vae_bf16.safetensorsmodels/vae/
Tip: Skip the DownloadAndLoadFramePackModel node's automatic download if your connection is slow — it pulls the full lllyasviel/FramePackI2V_HY repo. Downloading the single-file bf16 or fp8 version from Kijai's repackaged repo and loading it manually is faster.

Get the exact node graph used in this guide instead of building it from scratch:

Download Workflow JSON

Two Ways to Run This Workflow

This is one node graph, not two. The end-image branch — a second LoadImage, its GetImageSizeAndCount, VAEEncode, and CLIPVisionEncode — feeds FramePackSampler's end_latent and end_image_embeds inputs. Both are optional.

Mode 1 — Simple Image-to-Video

Mute the end-image branch and leave end_latent / end_image_embeds disconnected. FramePack generates motion outward from the single start image, same as a standard FramePack workflow.

Mode 2 — Start/End Frame

Unmute the end-image branch and connect both outputs into FramePackSampler. The model blends between the two identities using the weighted_average setting, generating the frames in between.

To switch from start/end back to simple I2V:

  1. Select the end-image LoadImage node, its GetImageSizeAndCount, VAEEncode, and CLIPVisionEncode nodes (drag a selection box around all four).
  2. Press Ctrl+M (Cmd+M on Mac) to mute them. Muted nodes turn grey and stop passing data.
  3. On FramePackSampler, confirm end_latent and end_image_embeds show no connection — if a wire is still attached to a muted node, disconnect it manually.
  4. Queue Prompt. The workflow now runs as plain single-image FramePack.
End-image branch nodes greyed out after muting, converting the workflow to simple image-to-video
The end-image branch muted (greyed out) — the workflow now behaves as simple I2V.
Tip: Save two copies of the workflow JSON once you have it working — one with the end-image branch muted, one active — instead of muting and unmuting every session.

How Start/End Frame Differs From Standard FramePack

The difference happens at the CLIP vision stage. Instead of one CLIPVisionEncode node, the workflow has two: one encodes your start image, the other encodes your end image. Both outputs feed into FramePackSampler separately, as image_embeds and end_image_embeds. The sampler blends between them using the weighted_average method — this tells the model how much to weight the start frame's identity versus the end frame's identity while generating the frames in between.

Sample start frame reference photo
Start image
Sample end frame reference photo
End image
Warning: If your start and end images have very different poses, backgrounds, or compositions, the model can struggle to bridge them smoothly and produce a "slideshow" effect — a hard cut instead of continuous motion. Keep the two images visually close (same subject, same framing, same background) for the best results.

Step-by-Step: Building the Workflow

1. Load the FramePack diffusion model

Right-click the canvas and select Add Node > FramePackWrapper > DownloadAndLoadFramePackModel. This loads the main video model — the transformer that predicts each frame.

Set: Model to lllyasviel/FramePackI2V_HY, Precision to bf16 (or fp8 under 12 GB VRAM), Compile to disabled, Attention mode to sdpa. You should see a single FramePackMODEL output — this feeds the sampler later.

2. Load the text encoders

Add a DualCLIPLoader node. Set clip_name1 to clip_l.safetensors, clip_name2 to llava_llama3_fp16.safetensors, and type to hunyuan_video. This node reads your text prompt and turns it into a format the model understands.

3. Load the VAE

Add a VAELoader node and select hunyuan_video_vae_bf16.safetensors. The VAE (this converts the AI's internal latent representation into an actual image you can see, and back again) is needed twice in this workflow: once to encode your input images, once to decode the final output.

4. Write your prompt and zero out the negative

Add a CLIPTextEncode node connected to the DualCLIPLoader's CLIP output. Describe the motion, not just a static scene — for example, "the woman turns her head slowly and smiles."

Add a ConditioningZeroOut node and connect your CLIPTextEncode output into it. FramePack doesn't use a traditional negative prompt — zeroing out the conditioning is how this model architecture handles the negative side of guidance.

5. Load your start image and encode it

Add a LoadImage node for your start frame. Connect its output through a GetImageSizeAndCount node, then into two places: a VAEEncode node (producing start_latent) and a CLIPVisionEncode node — loaded with a CLIPVisionLoader using sigclip_vision_patch14_384.safetensors — producing image_embeds.

6. Load your end image and encode it (skip for simple I2V)

Repeat step 5 with a second LoadImage node for your end frame. Connect it through its own GetImageSizeAndCount, then to a second VAEEncode (producing end_latent) and a second CLIPVisionEncode using the same loaded CLIP vision model (producing end_image_embeds).

Tip: Reuse the same CLIPVisionLoader node for both encodes instead of loading the model twice — right-click the loader and use KJNodes > Set/Get to reference it without duplicating VRAM usage.

7. Connect everything into FramePackSampler

Add the FramePackSampler node and connect:

  • model → the FramePackMODEL output from step 1
  • positive → your CLIPTextEncode conditioning
  • negative → the ConditioningZeroOut output
  • start_latent → your start image's VAEEncode output
  • image_embeds → your start image's CLIP vision output
  • end_latent → your end image's VAEEncode output (simple I2V: leave disconnected)
  • end_image_embeds → your end image's CLIP vision output (simple I2V: leave disconnected)
Full node graph with both start and end image branches wired into FramePackSampler
Complete graph — both branches active (start/end frame mode).

8. Decode and save the video

Connect FramePackSampler's samples output into a VAEDecode node (using the same VAE), then into a VHS_VideoCombine node (from ComfyUI-VideoHelperSuite) to save it as an MP4.

9. Run it

Click Queue Prompt (top-right, orange button) or press Ctrl/Cmd + Enter. A progress bar appears below the button. On an RTX 4090 with the bf16 model, a 5-second clip at these settings takes several minutes — fp8 is noticeably faster at a small quality cost.

FramePackSampler Settings Explained

These are the values from a tested, working configuration — apply to both modes unless noted.

SettingValueWhat it does
steps30How many denoising passes run. More steps = cleaner motion, slower generation.
use_teacachetrueSkips redundant computation between similar frames — speeds up generation with minimal quality loss.
teacache_rel_l1_thresh0.15How aggressive the TeaCache skipping is. Lower is safer, higher is faster but riskier for quality.
seed47 (fixed)Locks the random seed so re-runs match — useful while tuning other settings.
guidance / real guidance / rescale9 / 5 / 6Controls how strictly the model follows your prompt versus the input images.
samplerunipc_bh1The denoising algorithm — FramePack's default and generally the most stable choice.
blend methodweighted_averageHow the model combines start and end frame identities across the sequence (start/end mode only).
blend strength0.5Even 50/50 blend. Push toward 0 to favor the start image, toward 1 to favor the end image.
FramePackSampler node widget panel showing the 30-step, teacache, and seed values
FramePackSampler widget panel with the tested values.
Warning: Don't set use_teacache to true and then push steps below 20 — the combination produces visible flicker between frames on most GPUs.

Output Examples: Both Modes

Same base settings, run once with the end-image branch muted and once with it active.

Simple I2V

Single Image, Motion Generated Outward

Simple I2V · end-image branch muted

Start/End Frame

Start Image Morphing Into End Image

Start/End Frame · both branches active

Simple I2V

Single Image, Motion Generated Outward

Simple I2V · end-image branch muted

Simple I2V

Single Image, Motion Generated Outward

Simple I2V · end-image branch muted

Troubleshooting

"This node type does not exist" (red node in workflow)

You're missing one or both custom node packs this workflow depends on. Let the Manager find and install them for you instead of tracking down each one manually:

  1. Make sure the workflow JSON is loaded on your canvas (drag it in, or Workflow > Open).
  2. Click Manager in the top menu.
  3. Click "Install Missing Custom Nodes" — ComfyUI reads the loaded workflow and lists every node pack it can't find, including ComfyUI-FramePackWrapper_PlusOne and ComfyUI-KJNodes.
  4. Select the listed packs and click Install.
  5. Restart ComfyUI completely once installation finishes.

CUDA out of memory

The bf16 model needs roughly 16 GB+ VRAM at default settings.

  1. Switch the DownloadAndLoadFramePackModel node's precision to fp8.
  2. Lower your input image resolution — 704×544 is already conservative; go smaller if you're still hitting OOM.
  3. Increase gpu_memory_preservation in the sampler node if your GPU is shared with other applications.

The video "jump cuts" instead of morphing smoothly (start/end mode)

This is the frozen-background / slideshow issue — it happens when the start and end images differ too much in pose, background, or composition.

  1. Re-crop or re-generate your start/end images so the subject and background match more closely.
  2. Lower the blend strength toward 0.3–0.4 so the start image has more influence throughout the sequence.
  3. Increase steps to 35–40 — more denoising passes give the model more room to find a smooth path between the two frames.

For anything not covered here, see the full ComfyUI troubleshooting guide.

Frequently Asked Questions

FramePack is the original single-direction model. FramePack F1 is a later release that changed the prediction direction and generally produces steadier, less drifting motion. The PlusOne wrapper used in this workflow supports both.

Yes, using the fp8_e4m3fn model instead of bf16, at a lower resolution than 704×544 if needed. Expect longer generation times and a small drop in sharpness compared to bf16.

This happens when the start and end images are too visually different for the model to bridge naturally. Matching composition, pose, and background between your two images fixes most cases.

No. ComfyUI-FramePackWrapper_PlusOne is a self-contained fork — it includes everything from the original wrapper plus the start/end frame and blending features. Installing both can cause node name conflicts.

bf16 stores each number with more precision, producing sharper output at the cost of roughly 60% more VRAM. fp8 compresses that precision to run on smaller GPUs, with a modest quality trade-off that is hard to spot at normal viewing resolution.

Select the end-image LoadImage, GetImageSizeAndCount, VAEEncode, and CLIPVisionEncode nodes, then press Ctrl+M (Cmd+M on Mac) to mute them. Leave end_latent and end_image_embeds disconnected on FramePackSampler — both are optional, so the workflow falls back to standard single-image FramePack generation.

What to Do Next

Run the workflow once as simple I2V first

Download the workflow JSON above and drag it into ComfyUI. Run it once with the end-image branch muted and the default settings first — once you get a clean single-image result, unmute the end-image branch, add your second image, and start tuning the blend strength.

Published: 2026-07-18 · Last updated: 2026-07-18 · Tested on ComfyUI v0.3.28, RTX 4090 (24 GB VRAM) · Custom node: ComfyUI-FramePackWrapper_PlusOne

Discussion

Join the discussion

Sign in to leave a comment or reply

💬

No comments yet

Be the first to share your thoughts!