Wan Flf Video logo

Wan Flf Video

Community
artokun
wan-flf-video

Build WAN 2.2 First-Last-Frame video workflows. Native dual hi-lo (required), and WanVideoWrapper VACE approaches

Overview

Publisherartokun
Repositorycomfyui-mcp
Skill namewan-flf-video
Stars
811
Forks
137
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by artokun on GitHub. Read the source before you install it.

Installation

Install the Wan Flf Video AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/wan-flf-video
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/artokun/comfyui-mcp.git /tmp/comfyui-mcp
mkdir -p .claude/skills
cp -r /tmp/comfyui-mcp/plugin/skills/wan-flf-video .claude/skills/wan-flf-video
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Wan Flf Video in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Wan Flf Video on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Wan Flf Video is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

WAN 2.2 First-Last-Frame (FLF) Video Workflows

Overview

First-Last-Frame (FLF) video generation takes a start image and an end image and generates a smooth video transition between them. The WAN 2.2 I2V (Image-to-Video) 14B model is good at this.

CRITICAL: Dual Hi-Lo Architecture (REQUIRED)

WAN 2.2 I2V uses a split-noise architecture. Unlike WAN 2.1, the 2.2 model was trained with separate HighNoise and LowNoise components that handle different denoising ranges. You MUST use both models in a two-pass KSamplerAdvanced setup. Using a single model produces low-quality, broken output.

  • HighNoise model (pass 1, steps 0→N/2) establishes structure, motion, and composition
  • LowNoise model (pass 2, steps N/2→N) refines details and keeps fidelity to input frames
  • Both passes share the same conditioning from WanFirstLastFrameToVideo
  • Pass 1 returns noisy latent → Pass 2 continues from there

NEVER use a single KSampler with only one model for WAN 2.2 I2V.

Two native approaches are available:

  1. Native Dual Hi-Lo (Default): WanFirstLastFrameToVideo + dual KSamplerAdvanced two-pass
  2. WanVideoWrapper: WanVideoVACEStartToEndFrame + WanVideoVACEEncode + WanVideoSampler (VACE, caching, context windows)

Models

UNET Pairs (Always load BOTH Hi and Lo)

Remix NSFW (Recommended, built-in lightning, fp16):

ModelLoaderNotes
Wan2.2_Remix_NSFW_i2v_14b_high_lighting_fp16_v2.1.safetensorsUNETLoaderHighNoise, built-in lightning acceleration
Wan2.2_Remix_NSFW_i2v_14b_low_lighting_fp16_v2.1.safetensorsUNETLoaderLowNoise, built-in lightning acceleration

GGUF Q8 (Alternative, needs external lightning LoRAs):

ModelLoaderNotes
Wan2.2-I2V-A14B-HighNoise-Q8_0.ggufUnetLoaderGGUFHighNoise, quantized
Wan2.2-I2V-A14B-LowNoise-Q8_0.ggufUnetLoaderGGUFLowNoise, quantized

Official fp8:

ModelLoaderNotes
wan2.2_i2v_high_noise_14B_fp8_scaled.safetensorsUNETLoaderHighNoise, needs lightning LoRA
wan2.2_i2v_low_noise_14B_fp8_scaled.safetensorsUNETLoaderLowNoise, needs lightning LoRA

Text Encoder

ModelNodeNotes
nsfw_wan_umt5-xxl_bf16_fixed.safetensorsCLIPLoaderGGUF (type=wan)NSFW-tuned, pair with Remix models
umt5_xxl_fp8_e4m3fn_scaled.safetensorsCLIPLoader (type=wan)Standard UMT5-XXL fp8

CLIP Vision + VAE

ComponentNodeModel
CLIP VisionCLIPVisionLoaderclip_vision_h.safetensors
VAEVAELoaderwan_2.1_vae.safetensors

ModelSamplingSD3 (REQUIRED)

WAN 2.2 uses flow matching and requires ModelSamplingSD3 applied to each UNET:

json
{"class_type": "ModelSamplingSD3", "inputs": {"model": ["<unet>", 0], "shift": 5}}

shift=5 for lightning/Remix models. shift=8 for standard (non-lightning) models.

Lightning LoRAs

Remix NSFW models have lightning baked in. No external LoRA needed.

For GGUF/fp8 models, use paired hi/lo lightning LoRAs:

  • wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors → HighNoise UNET
  • wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors → LowNoise UNET

LoRA Stacks (rgthree)

Each model path has two stacked loaders (Common + Specific), each supporting 4 LoRA slots:

Hi path: UNETLoader(HN) → ModelSamplingSD3(shift=5) → Hi Common Stack → Hi Lora Stack → MODEL_HI
Lo path: UNETLoader(LN) → ModelSamplingSD3(shift=5) → Lo Common Stack → Lo Lora Stack → MODEL_LO

Common stacks hold shared LoRAs (quality/style). Specific stacks hold model-variant LoRAs. Set slots to "None" when unused. Even with no LoRAs, include the stacks. They pass CLIP through for text encoding.

Image Resizing (ImageResizeKJv2)

Input frames MUST be resized to the target video resolution before FLF and CLIPVisionEncode. The end frame inherits width/height from the start frame's resize so the dimensions match.

json
{"class_type": "ImageResizeKJv2", "inputs": {
  "image": ["<load_image>", 0], "width": 480, "height": 720,
  "upscale_method": "nearest-exact", "keep_proportion": "crop",
  "pad_color": "0, 0, 0", "crop_position": "center", "divisible_by": 2
}}

KSamplerAdvanced Two-Pass Settings

ParameterPass 1 (Hi)Pass 2 (Lo)
modelHi LoRA stack outputLo LoRA stack output
add_noiseenabledisable
steps44
cfg11
sampler_nameuni_pcuni_pc
schedulerbetabeta
start_at_step02
end_at_step24
return_with_leftover_noiseenabledisable
latent_imageWanFLF output[2]Pass 1 output[0]

Both passes share the same positive/negative conditioning from WanFirstLastFrameToVideo outputs [0] and [1].

For standard (non-lightning) models: steps=20, split at step 10, cfg=4, sampler=euler, scheduler=simple, shift=8.

Negative Prompt (REQUIRED)

Always include a quality negative prompt:

The tones are vibrant, overexposed, static, details are unclear, subtitles, style, work, painting, image, still, overall grayish, worst quality, low quality, JPEG compression artifacts, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, distorted limbs, merged fingers, motionless image, cluttered background, three legs, many people in the background, walking backwards

Node: WanFirstLastFrameToVideo

Required Inputs:
  - positive: CONDITIONING (from CLIPTextEncode)
  - negative: CONDITIONING (from CLIPTextEncode with negative prompt)
  - vae: VAE
  - width: INT (from ImageResizeKJv2 end frame output[1])
  - height: INT (from ImageResizeKJv2 end frame output[2])
  - length: INT (default 81, step 4) — number of frames
  - batch_size: INT (default 1)

Optional Inputs:
  - clip_vision_start_image: CLIP_VISION_OUTPUT (from CLIPVisionEncode)
  - clip_vision_end_image: CLIP_VISION_OUTPUT (from CLIPVisionEncode)
  - start_image: IMAGE (resized start frame)
  - end_image: IMAGE (resized end frame)

Outputs:
  - [0] positive: CONDITIONING → feed to BOTH Hi and Lo KSamplerAdvanced
  - [1] negative: CONDITIONING → feed to BOTH Hi and Lo KSamplerAdvanced
  - [2] latent: LATENT → feed to Hi Pass only (Lo Pass gets Hi Pass output)

Pipeline Flow

UNETLoader (HighNoise) → ModelSamplingSD3 (shift=5) → Hi Common Stack → Hi Lora Stack → MODEL_HI
UNETLoader (LowNoise) → ModelSamplingSD3 (shift=5) → Lo Common Stack → Lo Lora Stack → MODEL_LO
CLIPLoaderGGUF (wan) → CLIP
  ├─ CLIPTextEncode (positive) → CONDITIONING
  └─ CLIPTextEncode (negative) → CONDITIONING
CLIPVisionLoader → CLIPVisionEncode (start) + CLIPVisionEncode (end)
VAELoader → VAE
LoadImage (start) → ImageResizeKJv2 (480x720) → resized start
LoadImage (end) → ImageResizeKJv2 (match dims) → resized end

WanFirstLastFrameToVideo (positive, negative, vae, clip_vision_start, clip_vision_end,
  start_image, end_image, width/height from resize)
  → modified positive [0], modified negative [1], latent [2]

KSamplerAdvanced (Hi: MODEL_HI, steps 0→2, add_noise=enable, return_leftover=enable)
  → noisy LATENT
KSamplerAdvanced (Lo: MODEL_LO, steps 2→4, add_noise=disable, return_leftover=disable)
  → final LATENT

VAEDecode → IMAGE → VHS_VideoCombine (raw output)
                   → VRAM_Debug → SeedVR2VideoUpscaler (1080p) → VHS_VideoCombine (upscaled)

Complete workflow (API JSON)

The full Native FLF (Remix NSFW + Lightning) graph is in references/workflows.md.

Optional: Video Upscaling with SeedVR2

Add after VAEDecode for AI-powered video upscaling to 1080p. Use VRAM_Debug to free VRAM between generation and upscaling:

json
{
  "25": { "class_type": "VRAM_Debug", "inputs": {
    "image_pass": ["23", 0], "empty_cache": true, "gc_collect": true, "unload_all_models": true
  }},
  "26": { "class_type": "SeedVR2LoadDiTModel", "inputs": {
    "model": "seedvr2_ema_3b_fp8_e4m3fn.safetensors", "device": "cuda:0",
    "blocks_to_swap": 0, "swap_io_components": false, "cache_model": false, "attention_mode": "sdpa"
  }},
  "27": { "class_type": "SeedVR2LoadVAEModel", "inputs": {
    "model": "ema_vae_fp16.safetensors", "device": "cuda:0",
    "encode_tiled": false, "decode_tiled": false, "cache_model": false
  }},
  "28": { "class_type": "SeedVR2VideoUpscaler", "inputs": {
    "image": ["25", 1], "dit": ["26", 0], "vae": ["27", 0],
    "seed": 0, "resolution": 1080, "max_resolution": 0,
    "batch_size": 5, "uniform_batch_size": false, "color_correction": "lab"
  }},
  "29": { "class_type": "VHS_VideoCombine", "inputs": {
    "images": ["28", 0], "frame_rate": 16, "loop_count": 0,
    "filename_prefix": "wan_flf_upscaled", "format": "video/h264-mp4",
    "pingpong": false, "save_output": true,
    "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, "trim_to_audio": false
  }}
}

Alternative: GGUF Models with Lightning LoRAs

When using GGUF Q8 models instead of Remix, add paired lightning LoRAs:

Hi path: UnetLoaderGGUF(HN Q8) → ModelSamplingSD3(shift=5) → LoraLoaderModelOnly(hi_noise_lightning) → Hi Common Stack → Hi Lora Stack
Lo path: UnetLoaderGGUF(LN Q8) → ModelSamplingSD3(shift=5) → LoraLoaderModelOnly(lo_noise_lightning) → Lo Common Stack → Lo Lora Stack

LoRA files:

  • Unknown\no tags\wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors
  • Unknown\no tags\wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors

Approach 2: WanVideoWrapper (Advanced Control)

Uses the WanVideoWrapper custom node pack for more control over conditioning, caching, context windows, and advanced features.

Key Differences from Native

  • Uses WANVIDEOMODEL type instead of generic MODEL
  • Uses WANVIDIMAGE_EMBEDS for conditioning instead of CONDITIONING
  • Has own sampler (WanVideoSampler) with shift parameter and scheduler options
  • Supports TeaCache, MagCache, EasyCache for speed optimization
  • Supports context windows for longer videos
  • VACE module provides more flexible frame conditioning

VACE-Based FLF Pipeline

WanVideoModelLoader → WANVIDEOMODEL
WanVideoVAELoader → WANVAE
WanVideoTextEncode → WANVIDEOTEXTEMBEDS
WanVideoClipVisionEncode (start + end images) → WANVIDIMAGE_CLIPEMBEDS

WanVideoVACEStartToEndFrame (start_image, end_image, num_frames=81)
  → images batch, masks

WanVideoVACEEncode (vae, input_frames, input_masks, width, height, num_frames)
  → WANVIDIMAGE_EMBEDS (vace_embeds)

WanVideoSampler (model, image_embeds, text_embeds, steps, cfg, shift, scheduler)
  → LATENT

WanVideoDecode (vae, samples) → IMAGE → VHS_VideoCombine → MP4

WanVideoSampler Settings

ParameterStandardLightningNotes
steps304
cfg6.01.0
shift5.05.0Flow matching shift
schedulerunipceulerWanVideoWrapper has own schedulers
force_offloadtruetrueMove model to CPU after sampling

When to Use WanVideoWrapper vs Native

FeatureNativeWanVideoWrapper
SimplicitySimplerMore complex
Dual Hi-LoManual two-passMay handle internally
LoRA loadingLora Loader Stack (rgthree)WanVideoLoraSelect → WanVideoModelLoader lora (see merge_loras caveat)
Caching (TeaCache)Not availableBuilt-in
Context windowsNot availableWanVideoContextOptions
Block swap (VRAM)Not availableWanVideoBlockSwap
VACE conditioningNot availableFull VACE support
Long video (>81 frames)LimitedInfiniteTalk / context windows

Recommendation: use Native dual hi-lo for standard FLF transitions. Use WanVideoWrapper when you need caching, context windows, VRAM management, or advanced conditioning.

⚠️ CRITICAL: merge_loras=false with fp8-scaled models

When loading a LoRA through WanVideoLoraSelect → WanVideoModelLoader's lora input on an fp8-quantized model (quantization=fp8_e4m3fn_scaled, e.g. the official wan2.2_i2v_high/low_noise_14B_fp8_scaled weights), you MUST set the WanVideoLoraSelect widget merge_loras=false.

  • merge_loras=true (the node default) tries to bake the LoRA deltas into the already-quantized fp8 weights. That merge path hard-crashes ComfyUI during LoRA loading. The process dies with no Python traceback (so panel_get_errors / the frontend show nothing; only a process restart/OOM-style symptom). This is the #1 cause of a "crashed on lora loading" report with the wrapper.
  • merge_loras=false applies the LoRA as a runtime patch during the forward pass instead of merging. It is fp8-safe with negligible speed cost. This is the correct setting for the lightx2v 4-step lightning LoRAs (hi + lo) on the fp8 hi/lo I2V models.
  • It also pairs cleanly with block swap: WanVideoBlockSwap (e.g. 20 to 30 of 40 blocks → RAM) + merge_loras=false is the verified combo for fp8 14B I2V at 720p/81f on a 24GB card. (If you instead use a non-quantized bf16/fp16 model, merge_loras=true is fine.)

Separately, at 720p/81f enable enable_vae_tiling=true on WanVideoDecode. The full-frame decode is the other common uncaught-OOM crash point.

Resolution & Frame Count

Standard Resolutions

AspectResolutionMegapixels
Portrait 2:3480x7200.35MP (recommended default)
Landscape 16:9832x4800.4MP
Portrait 9:16480x8320.4MP
Square640x6400.4MP

Width and height must be divisible by 16. Use ImageResizeKJv2 with divisible_by: 2 and keep_proportion: crop.

Frame Count

  • 81 frames at 16fps = ~5 seconds (default, recommended)
  • 49 frames at 16fps = ~3 seconds (faster, less motion)
  • 121 frames at 16fps = ~7.5 seconds (longer, more VRAM)
  • Frame count should be 4n + 1 (1, 5, 9, ..., 49, 81, 121)

Frame Rate

Standard: 16 fps for WAN 2.2 output.

Video Output

VHS_VideoCombine

json
{
  "class_type": "VHS_VideoCombine",
  "inputs": {
    "images": ["<vae_decode>", 0],
    "frame_rate": 16,
    "loop_count": 0,
    "filename_prefix": "wan_flf",
    "format": "video/h264-mp4",
    "pingpong": false,
    "save_output": true,
    "pix_fmt": "yuv420p",
    "crf": 19,
    "save_metadata": true,
    "trim_to_audio": false
  }
}

VRAM Considerations

Dual Hi-Lo with Remix fp16

  • Two UNETs loaded sequentially (ComfyUI offloads between passes): ~14GB each
  • NSFW UMT5-XXL bf16: ~8GB (offloaded after text encoding)
  • CLIP Vision H: ~1.5GB (offloaded after encoding)
  • VAE: ~200MB
  • Latent (81 frames at 480x720): ~1-2GB

ComfyUI manages VRAM by offloading models between passes. The Hi UNET is offloaded before the Lo UNET loads.

Tips

  1. Always clear_vram before switching to WAN from another model family
  2. Use VRAM_Debug node between generation and SeedVR2 upscaling to free all VRAM
  3. For 24GB GPUs, 81 frames at 480x720 is the practical maximum
  4. Remix NSFW models have lightning baked in. No separate LoRA needed, 4 steps total

Morph LoRAs (Smooth Metamorphosis)

By default, FLF produces a transition/dissolve between frames. For true morphing (one shape continuously reshaping into another), use a morph LoRA on both Hi and Lo paths.

Magical Morph (Recommended)

VariantFileStrengthNotes
HighNoisewan2.2_i2v_magical_morph_highnoise.safetensors0.7-1.0Apply to Hi Common stack
LowNoisewan2.2_i2v_magical_morph_lownoise.safetensors0.7-1.0Apply to Lo Common stack
  • Source: NikolaSigmoid/wan2.2-i2v-loras-magical-morph
  • No trigger word needed. The LoRA modifies the denoising behavior
  • Strength 1.0 can add visual sparkle/particle effects. Reduce to 0.7-0.8 for cleaner morphs
  • Works with Remix NSFW models (no conflict with built-in lightning)

SkinMorph Redmond (Alternative — Face/Body Focus)

For person-to-person morphs (identity, gender transforms):

  • Trigger word: Skin morph
  • Strength: 0.8-1.0
  • Source: CivitAI

Prompt Tips

Describe the transition motion in addition to the start/end states:

Good: "A small cat sitting on the ground smoothly transforms and grows into a woman standing tall, seamless transformation, cinematic"
Bad: "A cat and a girl"

IMPORTANT: prompt language affects visuals.

  • AVOID words like "magical", "enchanted", "mystical". They cause literal sparkle/particle effects
  • USE clean motion language: "smoothly transforms", "gradually reshapes", "seamlessly morphs", "transitions into"
  • The morph LoRA handles the morphing effect. The prompt should describe motion and form change, not style
  • Include scale/position cues when subjects differ in size: "grows into", "expands upward", "shrinks down"

Settings Quick Reference

ConfigLightning (Remix)Standard
ModelsRemix NSFW Hi+Lo fp16Official Hi+Lo fp8
CLIPnsfw_wan_umt5-xxl_bf16_fixedumt5_xxl_fp8_e4m3fn_scaled
ModelSamplingSD3 shift58
Total steps420
Hi pass end_at_step210
CFG14
Sampleruni_pceuler
Schedulerbetasimple
External LoRA neededNo (built-in)Yes (paired hi/lo)

Multi-Step Pipeline Pattern

Anchor Frame Strategy (Proportions)

When the start and end frames have different subject sizes (e.g., small cat → tall person), generate the "anchor" frame first (the one with the most complex composition), then use Qwen Edit to create the other frame from it. This gives you:

  • Consistent background/scene between frames
  • Correct relative proportions (the edit inherits the scene scale)
  • Better FLF results since both frames share the same visual context

Example, cat-to-girl morph:

  1. Generate girl standing in front of barn with Z-Image (she fills the frame)
  2. Qwen Edit: "Replace the woman with a small cat sitting at the bottom of the image"
  3. FLF: cat (start) → girl (end). Proportions are correct because the barn establishes scale

Anti-pattern: generating cat and girl independently produces mismatched scale.

Full Pipeline

  1. Generate anchor frame with Z-Image/SDXL/Flux (portrait orientation for standing subjects)
  2. Qwen Edit to create second frame. The edit preserves scene context
  3. Clear VRAM between model families
  4. Stage both frames as inputs. When the frames are ComfyUI OUTPUTS from a prior stage (the generated/edited frames above), use upload_image (action:"stage") with each output's { filename, subfolder?, type? } and feed the returned input filename into each LoadImage. (For a frame already on local disk, use upload_image (action:"image").) NEVER copy the output file into, or guess, a filesystem input/ path. ComfyUI's input/output dirs may be CUSTOM (--input-directory / --output-directory), so a guessed path makes LoadImage reject the file (Invalid image file) and wastes the render. upload_image (action:"stage") routes through the server API (/view → /upload/image), which resolves the real dirs correctly.
  5. Run dual hi-lo FLF with morph LoRA if morphing is desired
  6. Optionally upscale with SeedVR2 to 1080p

Proven timing on RTX 4090: Z-Image (35s) → Qwen Edit (78s) → WAN FLF 81 frames (139s) = ~4 minutes total.

Working with Saved Workflows

Use get_workflow (action:"analyze") to understand any saved WAN FLF workflow before modifying or executing it. It returns a structured summary with sections, node IDs, key settings, and virtual wire connections. No raw JSON needed.

get_workflow(action="analyze", filename="Wan FirstLastFrame Advanced.json")                # summary view (default)
get_workflow(action="analyze", filename="Wan FirstLastFrame Advanced.json", view="flat")   # mermaid diagram

Only use get_workflow when you need the raw JSON for enqueue_workflow or create_workflow (action:"modify").

Sources

  • Official: none found.
  • Empirical: sampler values, wiring, and prompt notes from working graphs in packs/ and observed renders; not a vendor prompting guide.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Wan Flf Video AI skill do?

Build WAN 2.2 First-Last-Frame video workflows. Native dual hi-lo (required), and WanVideoWrapper VACE approaches

Why use Wan Flf Video on TypingMind?

Because you install it once and use it with any model. Wan Flf Video is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Wan Flf Video in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/wan-flf-video. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Wan Flf Video?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Wan Flf Video?

As many as you like. As long as a model supports skills, you can use Wan Flf Video with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Wan Flf Video AI skill free?

Yes. It is published on GitHub by artokun under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇