Nodes/MKRShift_Nodes/Lower Third Template
ComfyUI Node

Lower Third Template

Burn a name bar onto video without opening a video editor

By criskb·Created 7 months ago·Updated 6 months ago· 0
Lower Third Template
  • video
  • video
  • output_path
  • summary
◄headlineHeadline►
◄sublineSubtitle line►
◄start_sec0.50►
◄duration_sec3.50►
◄animate_sec0.35►
◄inset_x56►
◄inset_y56►
◄bar_color#121212►
◄accent_color#E7B13D►
◄text_color#FFFFFF►
◄font_size_headline44►
◄font_size_subline28►
◄fallback_fps24.0►
◄output_formatauto►
◄filename_prefixMKR_lower_third►
◄subfolder►
◄overwritefalse►
◄filename_label►

The fastest way to caption a clip

Need a "GUEST NAME - Title" bar burned into a promo clip, and the thought of opening a video editor to make it makes you tired? MKRLowerThirdTemplate is the node that does it in the graph. You give it a video, type the headline and subline, and it renders the bar onto the frames with a fade/slide animation, then encodes the result. For review cuts, promos, and internal handoffs this is genuinely faster than the NLE.

It's part of MKRShift_Nodes, the big utility pack by Cris K B. Pure Python + Pillow for drawing, ffmpeg for encoding - no models, no API.

How it works

The node decodes your input video into frames, and for each frame between start_sec and start_sec + duration_sec it draws the bar: a background strip (default near-black #121212), an accent color (default that warm #E7B13D), and the two lines of text. The animate_sec window (default 0.35s) eases the bar in at the start and out at the end, so it doesn't just blink on. Every frame outside the time window passes through untouched. Then it encodes to your chosen format with ffmpeg.

That's the whole trick - it's a template, one clean look, not a title designer. If you want an animated multi-layer title card, this isn't it. But for "put a name on this clip," it's a one-stop node.

The inputs that matter

There are a lot of inputs, but the ones a beginner actually sets:

  • headline and subline - the text. Headline is the big line, subline the small one.
  • start_sec (default 0.5) and duration_sec (default 3.5) - when the bar appears and how long it stays.
  • bar_color, accent_color, text_color - hex strings. These three are where you make it match your brand.
  • font_size_headline / font_size_subline - sizes in px (defaults 44 / 28).
  • output_format - auto (matches the source), gif, webp, mp4, mov, webm.
  • filename_prefix, subfolder, overwrite - standard save controls. The optional filename_label overrides the filename.

The inset_x / inset_y (both default 56) control the bar's margin from the edges. If your source has no readable FPS it falls back to fallback_fps (24), which is also what you set if you want to force a rate.

Outputs and install

Outputs: video (the pack's MKR_VIDEO payload, ready to feed another MKR node), output_path (where the file landed), and a summary JSON with the settings used.

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart, or install "MKRShift Nodes" via ComfyUI Manager. No pip requirements or models. ffmpeg is required - this node both decodes and encodes video through it.

Gotchas

Two things bite people. First, the summary JSON sits on a node that writes a file - if you queue a huge batch with overwrite off, the node will keep creating uniquely-named files, so either set overwrite or be ready to clean up. Second, font availability: the node uses Pillow's default font stack, so don't expect your custom brand typeface - you get a clean system look, and the colors do the heavy lifting. If you're rendering text that must match a specific font family, you're in the wrong tool anyway.

CategoryMKRShift Nodes/Media/Timeline

Inputs (19)

NameTypeDefaultDescription
video*—
headlineSTRINGHeadline—
sublineSTRINGSubtitle line—
start_secFLOAT0.500–3600—
duration_secFLOAT3.500.1–3600—
animate_secFLOAT0.350.05–5—
inset_xINT560–2048—
inset_yINT560–2048—
bar_colorSTRING#121212—
accent_colorSTRING#E7B13D—
text_colorSTRING#FFFFFF—
font_size_headlineINT448–256—
font_size_sublineINT288–256—
fallback_fpsFLOAT24.01–240—
output_formatCOMBOauto6 options: auto, gif, webp, mp4, mov, webm
filename_prefixSTRINGMKR_lower_third—
subfolderSTRING—
overwriteBOOLEANfalse—
filename_labeloptSTRING—

Outputs (3)

NameTypeDescription
videoMKR_VIDEO—
output_pathSTRING—
summarySTRING—