CRT scanline look on a clean AI clip: drawgrid plus noise
Add dark horizontal scanlines and light flickering noise to a finished clip with a two-filter Sume video-filter graph. $0.02 per encode, free check first.

To give a clean generated clip a CRT look, send Sume's video filter two filters: drawgrid=w=0:h=4:t=1:c=black@0.35,noise=alls=8:allf=t. The first darkens one pixel row in every four to draw scanlines; the second adds light noise that changes every frame. One encode is $0.02, and the free check runs before you spend it.
Image-to-video outputs, such as a clip from grok-imagine-video-1.5 on Sume, are smooth by default. A scanline pass turns a smooth clip into a retro monitor or arcade bumper without regenerating anything.
How do the two filters work?
drawgrid normally draws a lattice. Setting the cell width to 0 skips the vertical lines, and h=4 puts a horizontal line every four rows. I tested it on a flat grey frame with a local ffmpeg build: rows 0, 4, 8 and 12 dropped from 128 to 83, which is a 35 percent black overlay, and all other rows stayed at 128.
noise=alls=8:allf=t adds noise to all planes with strength 8, and t makes it temporal, so the pattern changes each frame instead of freezing. Both filters are on Sume's allowlist, and the commas in the graph are at the top level where Sume's validator expects them.
What should I tune?
Line spacing is in pixels, so on a 480p clip a spacing of 4 looks coarser than on 1080p. Pick the value against the size you will watch it at.
| Setting | Value | Effect |
|---|---|---|
| Line spacing | h=4 | One dark row in four; use 3 for denser lines |
| Line opacity | black@0.35 | Raise to 0.5 for heavy lines |
| Line thickness | t=1 | One pixel on the encoded frame |
| Noise strength | alls=8 | Subtle; 20 is very visible |
| Noise mode | allf=t | New pattern every frame |
How do I run it safely?
Check first, then encode. The result is a new MP4, and the source is not touched.
Do not add captions before this pass: scanlines and noise would cross the text. Burn captions on the finished file instead.
curl -X POST https://api.sume.com/v1/video-filter/check \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
"filtergraph": "drawgrid=w=0:h=4:t=1:c=black@0.35,noise=alls=8:allf=t"
}'What does the effect cost in quality?
Noise makes compression harder, so the output file is larger than the source for the same length. Platforms that re-encode will soften the lines, and a 1-pixel line can shimmer on a downscaled phone screen. Look at one still with video frames before you publish. The source cap for video filter is 300 seconds.
Sources
Related posts
More in Media tools
- Avatar micro twitches: what Sume's 2 fps frame check can see
Tavus says Phoenix-4.5 cut micro twitches. To check your own clip, Sume's frame sampler tops out at 2 fps; use explicit times for 24 neighbouring frames.
- Mirror a video down the middle: a symmetry effect with hstack
Make a left-right symmetric video from one clip with a Sume video-filter graph: keep the left half, mirror it with hflip, join with hstack. $0.02, free check.
- Pixelate part of a video by API: a fixed-region mosaic
Hide a label or a screen area with a mosaic using one Sume video-filter graph: crop a region in 24-pixel multiples, shrink, enlarge with neighbor, overlay.
- Remix cut refused with only a start time: the 120 s budget
Why a remix media cut with start but no end fails remix_cut_too_long, how the 120 second and 20 span limits add up, and when to use video trim instead.
Written by Sume