Building a 1920×1080 brand film with a Number Counter motion layer counting 0 to 1000. While the counter is counting, the number is unreadable: on every frame where a digit changes, two digit rows are drawn at the same time, each sliced horizontally through the glyphs, as if the roll is not masked to a single row height. Once the count settles on its final value the number renders perfectly, which is what makes this easy to miss – a spot-check frame often lands on a settled frame and looks fine. Sampling densely across the count showed roughly half the frames garbled at 30fps.
I isolated it as far as I could from the API side and it is not size, font, or motion blur (details under Steps). The '+' suffix, the layer's own caption text, and every other layer in the same frame render correctly, so it looks specific to the digit roll rather than to the layer or the render path.
Workaround in use: replaced the counter with a plain text layer showing the final figure, revealed symbol-by-symbol. That reads fine, but it loses the count.
Steps to reproduce
1. Create a video project, 1920×1080, 30fps.
2. Add a synthetic clip with mediaType "motion" and a timeline item on its own unsnapped channel carrying motionTemplateId "counter".
3. motionParams: startValue 0, endValue 1000, prefix "", suffix "+", decimals 0, thousands true, fontWeight 800, fontSize 240, speed 1.
4. Render with POST /render-onserver (mp4, 1920×1080, 30fps).
5. Step through the counting frames one by one – do not spot-check, the settled frames look correct.
Variations tried, all showing the same tearing:
– fontSize 300 and the template default fontSize 240
– fontFamily "Manrope, Inter, sans-serif" and the template default "Inter, sans-serif"
– motionBlurEnabled true and false
– thousands true (values above 999 and below 999 both tear)
Expected
Each rendered frame shows one readable number. During a digit change the rolling digit is masked to a single row height, so at most a sliver of the outgoing and incoming digit is visible.
Actual
On every frame where a digit changes, two full digit rows are drawn at once, each cut horizontally through the middle of the glyphs. The number cannot be read. Example frames from one 4s count at 30fps: at 21.4s the frame shows a row reading roughly "692" clipped at the top with a second row "683" clipped at the bottom, directly beneath it; at 22.0s the same doubling with "989". The "+" suffix in the same layer is drawn correctly and is not doubled. Frames where no digit is changing (and the final settled value) render correctly.
Error output
No error is raised. The render returns HTTP 200 and a valid mp4 - the defect is visual only.
motionParams used:
{ "startValue": 0, "endValue": 1000, "prefix": "", "suffix": "+", "decimals": 0,
"thousands": true, "color": "#171717", "fontFamily": "Inter, sans-serif",
"fontWeight": 800, "fontSize": 240, "speed": 1 }
Context
Video Editor > MotionFast motion layer, template id "counter" (Number Counter, category Numbers, pro: false). Render path: POST /api/moodboards/{board_id}/video-projects/{project_id}/render-onserver, mp4 1920×1080 30fps. Layer is on its own unsnapped channel with cameraLocked true; no camera clip is active during the beat. App build is the one that ships Advanced Transition packages (.gltransition), the WebGPU renderer option, Repetile layouts and Grid Builder. Render host reports browser rung system-chrome, gpu true, webgpu true; project leaves data.veRenderer unset (classic WebGL).
Environment
App version: 10.4.0
Platform: Windows 11 (AMD64)
Post a Reply