TKMemeCreator
Burn meme text onto your video inside ComfyUI
- image
- audio
- image
- audio
So you generated a clip and want to slap "What! Memes with Comfy?" on top of it and drop it on Discord. ComfyUI has a thousand nodes for making video, but almost nobody ships one for the text overlay. TKMemeCreator is that node. It takes your frames plus an audio track, burns Impact-font-style top and bottom text onto every frame, and hands back an IMAGE + AUDIO pair you encode to MP4 or GIF downstream.
It's a one-trick pony, and that's fine. The demo workflow (in workflow/TKMemeCreatorDemo.json) shows the whole intended pipeline: VHS_LoadVideo feeds frames and audio in, TKMemeCreator annotates them, and a couple of VHS_VideoCombine nodes spit out both an MP4 and a GIF. The node itself does zero encoding - if you don't already have Video Helper Suite installed, that's the real dependency hiding behind this pack. The demo also uses a KJNodes resize node and rgthree labels, but those are optional trim - the essential chain is Load → Meme → Combine.
How it works
Under the hood it's just OpenCV's cv2.putText looping over frames. No model, no weights, no VRAM - this runs on pure CPU in a blink, which is a nice break after the video pipeline that fed it. The font is HERSHEY_TRIPLEX (that's the chunky serif look you remember from early 2000s MSPaint memes), auto-scaled to your clip's width so it doesn't explode on a 4K frame. Text is centered horizontally, top text sits at y≈50, bottom text near the bottom edge, and each color gets an automatic contrasting outline (black or blue text gets a white outline, everything else gets black) so it stays readable over busy footage.
The one genuinely clever bit is wobble_text. It synthesizes a hand-shake wobble by summing 30–40 random sine waves and interpolating them per frame - so your text jitters like someone filmed it on a phone instead of standing perfectly still. With wobble on, the top text shakes until the delay ticks over, then locks solid while the bottom text drops in shaking. With wobble off, both texts sit static.
The inputs that matter
- image / audio - your video batch (a normal 0–1 float IMAGE, straight from
VHS_LoadVideo) and the audio track, which is passed through untouched. - frame_count (default 85, min 40) - how many frames get texted; the node truncates past this, so it's your clip-length cap.
- fps (default 16) - used only for timing the text delay, not for the actual output rate. Keep it in sync with the
frame_rateyou set in VHS_VideoCombine or your punchline lands at the wrong second. - num_secs_delay_end_text (default 2) - seconds before the bottom text appears. This is your "punchline drop" knob.
- wobble_text and color_start_text / color_end_text (six colors) - the wobble on/off and the top/bottom text colors.
Outputs are exactly two: image (the annotated frames) and audio (the passthrough). Wire both into VHS_VideoCombine.
Install
ComfyUI Manager is the easy path - search "TKMemeCreator" and install. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/trashkollector/TKMemeCreator
# restart ComfyUI
One real gotcha: the repo's requirements.txt looks like a dump of the author's whole environment. It pins torch==2.7.1+cu126, numpy==2.3.2, and opencv versions, and it even lists nodes==1.2 and server==0.0.0 - those are ComfyUI's own internal modules, not pip packages. If Manager auto-installs that file over your existing torch, it can drag your whole install into a version fight. All this node actually needs is opencv-python plus the numpy/torch ComfyUI already ships. If pip starts touching torch, let it fail and remove the pinned torch lines - the node will run fine on what you already have.
The other thing to remember: TKMemeCreator alone gives you nothing viewable. You need VHS installed or there's no way to load the video or encode the result, so install Video Helper Suite too.
Troubleshooting
- "Your workflow needs a missing node" - it's probably
VHS_VideoCombineorVHS_LoadVideo. Install ComfyUI-VideoHelperSuite and reimport the demo. - Bottom text timing feels off - the
fpshere is only for the delay math; make sure it matches VHS's outputframe_rate. - Install errors mentioning torch or opencv versions - the pinned requirements clashing with your env. Let Manager's install skip them; this node is trivial on top of stock ComfyUI.
Life-changing? No. But when you need Impact-style text on a clip without leaving the graph or opening a video editor, it's a two-minute fix - and the wobble genuinely sells the "filmed it on my phone" joke.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| audio | AUDIO | — | |
| frame_count | INT | 85 | — |
| fps | FLOAT | 16.00 | — |
| top_text | STRING | Top Text | — |
| bottom_text | STRING | Bottom Text | — |
| num_secs_delay_end_text | INT | 2 | — |
| wobble_text | BOOLEAN | — | |
| color_start_text | COMBO | 6 options: red, white, black, blue, yellow, green | |
| color_end_text | COMBO | 6 options: red, white, black, blue, yellow, green |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| audio | AUDIO | — |