Nodes/LingBot-Video Dense 1.3B FP8/LingBot TI2V Plaintext + Image + Qwen Encode
ComfyUI Node

LingBot TI2V Plaintext + Image + Qwen Encode

Give it an image, tell it what happens next

By ALX-CODE·Created 2 months ago·Updated about a month ago· 8
LingBot TI2V Plaintext + Image + Qwen Encode
  • model
  • first_frame
  • conditioning
  • structured_json
  • expanded_caption
  • conditioned_first_frame
plaintext_promptThe subject begins from the supplied first frame, then moves naturally while preserving identity, clothing, lighting, and scene layout. Stable cinematic camera motion.
structured_json_override
duration_seconds3.0
negative_prompt
width640
height352

Image-to-video is where the LingBot demo GIFs actually shine - the README's showcase is an anime character animating a continuous expression from a single starting frame, with the style and identity holding together. LingBotTI2VPromptEncode is the node that makes that happen. You feed it an image plus a plaintext description of the motion that should follow it, and it builds the conditioning for the TI2V sampler - including encoding your image into the latent that gets fixed as frame 0.

Why you'd reach for it over the plain LingBotPromptEncode: because the prompt node and the image conditioning have to agree. This node handles both in one place, and it makes sure the "what happens after the first frame" text and the "this is what frame 0 looks like" pixels end up in the same conditioning object. Do it separately and you'll fight resolution and timing mismatches all afternoon.

How it works

Three things happen when it runs:

  1. Frame prep. Your first_frame image is center-cropped to the selected video aspect ratio (the tooltip spells it out: "The first image in the batch is center-cropped to the selected video aspect ratio and fixed as frame 0") and normalized to the resolution you set via width/height.
  2. Rewrite. Your plaintext_prompt is expanded by Qwen into the LingBot JSON, exactly like the T2V prompt node - but here Qwen is Qwen3VL, and it sees the image during both rewrite stages. That's the trick: the model isn't blindly writing a generic motion prompt, it's describing motion relative to the actual pixels it's looking at. Identity, clothing, lighting - those stay consistent because the text encoder isn't guessing them.
  3. Encode. Both the structured JSON and the frame are encoded into a LINGBOT_CONDITIONING that carries the frame along as conditioning (first_frame_pixel), which the TI2V sampler later uses to pin the first latent during denoising.

Outputs are conditioning, structured_json, expanded_caption, and - handy - conditioned_first_frame, the actual processed image after crop/resize. Wire that into a preview node if you want to confirm the crop didn't butcher your subject before burning GPU time.

Inputs worth knowing

  • first_frame - an IMAGE. One RGB image; the sampler will reject multi-image batches ("TI2V currently supports one RGB first frame").
  • plaintext_prompt - what should happen after the first frame. The default is a decent template: "The subject begins from the supplied first frame, then moves naturally while preserving identity, clothing, lighting, and scene layout. Stable cinematic camera motion."
  • structured_json_override - non-empty JSON bypasses the rewrite; the image is still used both for Qwen-VL conditioning and as frame-0 conditioning.
  • duration_seconds - connect it to Generation Settings so action timestamps match the clip. Same rule as the T2V node.
  • negative_prompt - JSON only; empty uses LingBot's vendored default.
  • width / height - the target video resolution, and they must match what the sampler runs at.

Install and the workflow-required bits

Ships with the pack:

cd ComfyUI/custom_nodes
git clone https://github.com/ALX-CODE/lingbot-video-1.3b-fp8
pip install -r requirements.txt   # with ComfyUI's python

or ComfyUI Manager → search "LingBot" → restart. Needs the model's text_encoder/processor (for Qwen3VL) and a working model load first. Two pack-specific gotchas for TI2V:

  • The published TI2V workflow ships with placeholder Load Image nodes - intentionally nonexistent filenames so personal images aren't published. Replace every one before queueing, or you'll get "missing image" errors that look like the node is broken.
  • The sampler will refuse to run if the conditioning frame's resolution doesn't match the sampler's width/height. Keep the same Generation Settings connections feeding both.

Also worth knowing: TI2V is the supported image mode. The flashier first-and-last-frame mode is a separate experimental pair of nodes, and it's genuinely risky - LingBot wasn't trained for it. If you want reliable animated-from-an-image results, this node is the one to use.

CategoryLingBot Video

Inputs (8)

NameTypeDefaultDescription
modelLINGBOT_MODEL
first_frameIMAGEThe first image in the batch is center-cropped to the selected video aspect ratio and fixed as frame 0.
plaintext_promptSTRINGThe subject begins from the supplied first frame, then moves naturally while preserving identity, clothing, lighting, and scene layout. Stable cinematic camera motion.Describe what should happen after the supplied first frame. Qwen sees the image during both rewrite stages.
structured_json_overrideSTRINGOptional advanced override. The supplied image is still used by Qwen-VL and as frame-0 conditioning.
duration_secondsFLOAT3.00.1–120
negative_promptSTRINGJSON only. Leave empty to use LingBot's vendored default negative prompt.
widthINT64016–4096
heightINT35216–4096

Outputs (4)

NameTypeDescription
conditioningLINGBOT_CONDITIONING
structured_jsonSTRING
expanded_captionSTRING
conditioned_first_frameIMAGE