← All articles

Make Data Videos on an 8GB GPU: Qwen Image + Motion Graphics

2026-10-14 — Michael Leung

Part 8 of 8 · Local AI on an 8GB GPU

Useful already? ☕ Buy me a coffee and keep these articles free and ad-free.

A home creator desk at night with a gaming PC and a video timeline showing animated bar charts

I now make short data videos on my own PC in minutes, not hours. Qwen Image 2.1 draws the background pictures, the Motion Graphics feature I used with Claude Opus 5.5 turns the figures into animated code, and ffmpeg joins the frames into an MP4. On my RTX 4060 Ti 8GB, each background took about 32 seconds, and rendering 12 seconds of 1080×1920 video took 22 seconds. One LTX video clip used to take me 4 to 5 minutes.

Below I show each step with screenshots from my machine, the code that makes the numbers move, and an animated preview of the result. At the end is the YouTube Short I made this way from the latest ABS building figures.

What Is Motion Graphics, and Why Is It Different from LTX?

Motion Graphics is animation written as code. It is like an animated <div> on a web page, not a video model guessing every pixel.

An image-to-video model such as LTX has to invent every frame on the GPU. That is great for moving people, water or cameras, but it is slow on an 8GB card. It also can't be trusted with numbers: a figure like 248,733 may come out blurred or wrong.

Motion Graphics works the other way round. The picture stays a still image from Qwen Image 2.1. Claude writes HTML, CSS and JavaScript that puts text, counters and bars on top and moves them over time. The browser draws each frame, so every number is sharp and exactly right. If a number is wrong, I change one line and render again.

The pipeline: Qwen Image 2.1 backgrounds, Claude writes the animation code, preview in a browser, Playwright captures frames, ffmpeg makes the MP4

Step 1: How Do I Make the Background Images in Qwen Image 2.1?

I use ComfyUI with the standard Qwen Image 2.1 graph, set to a vertical size of 768×1328 for a YouTube Short. Each image took 32 to 34 seconds on my 8GB card.

The graph has only ten nodes. It uses the int8 Qwen Image 2.1 model, the Qwen3-VL 8B text encoder, ModelSamplingAuraFlow with shift 3.1, and a KSampler at 20 steps, CFG 2.5, with the res_multistep sampler. My full setup is in Running Qwen-Image-2.1 on an 8GB GPU.

ComfyUI screenshot of the Qwen Image 2.1 workflow set to 768 by 1328 for a vertical Short

Two tips for video backgrounds:

The ComfyUI job queue shows the real times. The three backgrounds and the cover for this article took 2 minutes 11 seconds in total:

ComfyUI job queue showing four Qwen Image 2.1 images at 32 to 34 seconds each Three vertical Qwen Image 2.1 backgrounds: the Brisbane skyline with cranes, timber house frames at sunrise, and an aerial view of a new housing estate

Step 2: How Does the Code Make the Figures Move?

Every frame is a function of time. One JavaScript function, seek(t), sets the whole picture for any moment t in seconds.

For each scene, it works out how far into the scene we are. Then it:

Because nothing depends on a real clock, frame 150 always looks exactly the same. That makes the render repeatable.

Screenshot of the motion graphics code next to a preview of the video at 5.4 seconds, with the house approvals counter part way through counting up

The code also lets me check the video before rendering it. I open the HTML file in Chrome, call seek(5.4), and look at that frame. If the headline wraps badly or a label overlaps, I fix the CSS and reload.

That is how I found two problems in my first render: a label covering the headline in the third scene, and the yellow tags wrapping onto two lines. Both took one line each to fix.

Step 3: How Do the Frames Become a Video?

A short Python script opens the page in headless Chrome through Playwright. For each frame it calls seek(i / 30) and saves a screenshot. ffmpeg then joins the screenshots into an H.264 MP4.

for i in range(n):                      # n = 12 s × 30 fps = 360
    page.evaluate(f"seek({i / 30})")
    page.screenshot(path=f"frames/f{i:04d}.jpg", type="jpeg", quality=92)

ffmpeg -framerate 30 -i frames/f%04d.jpg -c:v libx264 -crf 20 \
       -pix_fmt yuv420p -movflags +faststart short.mp4

On my PC the 360 frames took 19.5 seconds to capture and 2 seconds to encode. The GPU averaged about 16% while it ran, because Chrome only uses it to draw the page. No AI model runs during this step.

Here is the result, shown as an animated image at a smaller size:

Animated preview of the motion graphics Short: homes under construction counting up to 248,733, house approvals to 10,885, and the Housing Accord progress bar showing 124,183 homes behind

The figures come from my article on Building Approvals in August 2026, so every number on screen matches the ABS data I checked there.

Is It Really Faster Than LTX on an 8GB GPU?

Yes, for this kind of video. The animation step is about ten times faster than one LTX clip, and it barely uses the GPU.

Render time on an RTX 4060 Ti 8GB: one Qwen Image 2.1 still 32 seconds, 12 seconds of motion graphics video 22 seconds, one 10-second LTX clip about 4 to 5 minutes

For my podcast video on 10 October, LTX-2 in Wan2GP took about 4 to 5 minutes for each 10-second clip at 1280×704. I also had to render clips one at a time to keep RAM free. A 1-minute video with six clips meant half an hour of rendering before any editing.

With Motion Graphics, a 12-second Short needs three Qwen images (about 1 minute 40 seconds) plus a 22-second render. The machine time is about 2 minutes.

The trade-off is the kind of movement you get:

You can mix them, too. Use one LTX clip for the opening shot and Motion Graphics for the data scenes, then join them with ffmpeg.

What Do You Need to Try This at Home?

Check every number on screen against your source before you publish. The code shows exactly what you give it, mistakes included. For more on what runs well on this card, see my local LLM vs cloud API guide.

Watch the Short I Made This Way

This is the YouTube Short I made with Qwen Image 2.1 backgrounds and Motion Graphics, in Cantonese, from the ABS building figures: 澳洲起樓加緊油?昆士蘭動工一年多兩成|ABS建築數據 (YouTube).

Sources and Notes

Checked on 14 October 2026. The demo video in this article is an English rebuild of the same method, made for this post. This article was drafted with AI assistance and reviewed by me. The images were made locally with Qwen Image 2.1, and the screenshots are from my own machine.

Series: Local AI on an 8GB GPU

Running real AI models on an ordinary 8GB graphics card, and when the cloud is the better deal.

  1. The Death of Local LLMs? How Xiaomi's MiMo V2.6 Just Flipped the AI Economics in Australia
  2. Unlocking Local AI: Running Qwen-Image-2.1 on an 8GB GPU
  3. Local AI Gets a Big Boost: How Ollama's New Jev-Style Decision Models Change Everything
  4. Run Qwen3.8-Flash-Next on an 8 GB RTX 4060 Ti (Here's How)
  5. The Great LLM Debate 2026: Local Hardware vs. Cloud APIs (An Australian Dev's Guide)
  6. EmbeddingGemma 2 Makes On-Device Multimodal Search Work
  7. Underdog Saluki 27B on an 8GB GPU: Why I Got 4.7 Tokens/s
  8. Make Data Videos on an 8GB GPU: Qwen Image + Motion Graphics
Start the series from part 1 →

← All articles