Why Progress Bars Matter In Video
So you need a progress bar for your DaVinci Resolve videos, whether it’s keeping retention for social media, or making your SAAS videos sexy. You need it, here’s how to make it!
The usual Fusion progress bar made with keyframes on a rectangle's width and a text layer you retype by hand.
It breaks the moment the edit changes:
- Clip gets trimmed → the bar finishes early
- Clip gets stretched → the bar finishes late
- Counter and bar disagree → looks amateur
- Every fix means reopening the comp
This version reads the clip's own length and works the rest out. Trim it, stretch it, drop it on a different clip - it re-times itself.
- Why Progress Bars Matter In Video
- What you need
- How to use the paste blocks
- Stage 0 - Start With a Canvas
- How
- Checkpoint
- Copy and paste this into fusion
- Stage 1 - Building The Progress bar
- A Rectangle for Shape, a Background for Colour
- How
- The shape
- Checkpoint
- Stage 2 - Two Expressions, and the Bar Animates Itself
- Why
- How
- Learning opportunity, a breakdown of what this expression does
- Checkpoint
- Stage 3 - Create a background bar
- Checkpoint 4
- Stage 4 - Add scale and position controls without breaking your hard work.
- Why
- How
- Checkpoint
- Stage 6 - The Counter, in One Line of Text
- Instead of spending hours animating complex text
- How
- Checkpoint
- Bonus Stage - A sprinkle of aesthetic
- How
- Checkpoint
- Where to Change Things
- Reusing It
What you need
- DaVinci Resolve with a Fusion composition open - a Fusion Clip (
Ctrl+Shift+Fon a selected clip) or Effects > Fusion Composition on the timeline - Two shortcuts you'll use constantly:
Shift+Space- opens Select Tool. Type a node name, hit Enter, it's addedF2- renames the selected node
🔴 Do the renaming. The expressions in stage 4 refer to nodes by name. A node called Rectangle1 will not answer to Progressbar.
How to use the paste blocks
Every stage ends with a paste block. Each one is the whole comp up to that point, not a fragment.
- Copy the code out of the block.
- Click into an empty Fusion Nodes view.
- Press
Ctrl+V. The nodes appear, named and wired.
Paste into an empty comp each time. If a node already exists, Fusion renames the incoming one [name]_1 and things may break.
Build by hand to learn it. Paste a block to catch up or skip ahead.
Stage 0 - Start With a Canvas
With all compositions, I recommend starting with a canvas, basically a transparent background node.
How
- Add a Background node -
Shift+Space, type "Background", Enter. - Rename it
CanvasBackground-F2. - Color tab → Type: Solid Color → colour
#141414. - Not pure black. Otherwise our texture won’t look great after.
Park it at the bottom of the graph. Everything gets merged onto it at the very end.
Checkpoint
Copy and paste this into fusion
- ✅ One node, named
CanvasBackground - ✅ Viewer shows flat dark grey - not black, not checkerboard
- ✅ Nothing else in the comp yet
Stage 1 - Building The Progress bar
A Rectangle for Shape, a Background for Colour
We NEED to use 2 nodes to create the automatic progress bar.
1 - A Mask (to create the shape)
2 - Another Background Node (creates the colour)
If you skip it, you won’t have the control needed to make YOUR progress bar look exactly how you want.
In Fusion a mask has no colour. It's pure shape - an alpha stencil. To get a blue bar you make a full-frame plate of blue and cut it to the stencil.
That split is the habit the whole build rests on:
Geometry lives on one node, colour on anotherRestyle without touching the animationRe-animate without touching the lookStage 2 hangs expressions on the rectangle - you don't want colour controls in that panel too
How
The shape
- Add a Rectangle mask.
F2→ Rename itProgressbar.
Settings:
- Height:
0.1- mask sizes are fractions of the frame, so this is one tenth of frame height - Corner Radius:
1- the maximum, gives you fully round pill ends - Width:
0.5- placeholder only, stage 2 replaces it with an expression - Filter: Fast Gaussian - the cheap, clean default for edge softening
The paint
- Add a Background node. Rename it
progressbarcolor. - Set the colour to
#2997FF.
Connect the shape and colour together.
- Find the small blue triangle at the bottom-left of
progressbarcolor's node tile. That's the effect mask input. - Drag
Progressbar's output into it. The full-frame blue plate is now clipped to the rectangle. - Add a Merge -
progressbarcoloroverCanvasBackground.
Checkpoint
- ✅ A blue pill sitting mid-frame on dark grey.
- ✅ Drag
Progressbar's Width → only the bar's length changes.
Two nodes, two jobs, no overlap. That's the property everything downstream leans on.
Stage 2 - Two Expressions, and the Bar Animates Itself
Why
This is the stage that does the work. Two short expressions replace every keyframe in the build.
- Bar reads 0% on the first frame and 100% on the last — at any clip length
- Trim or stretch the clip and it re-times itself
- No keyframes to maintain, ever
Skip it? Everything downstream still works. You've just built an ordinary keyframed bar with extra steps.
Expressions in ten seconds: type = into any numeric field and it becomes an expression field - or right-click the control → Expression. The field turns green. Right-click → Remove Expression to undo.
How
1. Expression 01 → Automate the progress bar growing.
In Progressbar Width control:
Add the following expression
time/comp.RenderEndLearning opportunity, a breakdown of what this expression does
Now when you scrub the timeline, the rectangle grows from its centre, so the bar grows in both directions. Progress bars fill from one side… which is where we need to add…
2. Expression 02 →Pin the progress bar left edge.
In Progressbar → Center:
Point(Width/2, 0.5 - Height/2)Checkpoint
- ✅ Two expressions on
Progressbar - ✅ Zero width on the first frame, full width on the last
- ✅ Left edge doesn't move at any point in between
- ✅ The real test: trim the clip shorter and scrub again — still hits 100% exactly on the last frame
Stage 3 - Create a background bar
Let’s add a nice detail with a background for the progress bar, and by using an instance node, we won’t have to copy a kajillion settings.
Create an instance of the progress Bar
- Select
Progressbar→Ctrl+C→ Edit > Paste Instance (Ctrl+Shift+V). - Rename the new node
InstanceProgressBar. Every control is green — it's reading the original's values, not its own. - Right-click each of these three → Deinstance, then set it:
- Width →
1. The track is full width and doesn't animate - Center → the expression
Point(0.5, 0.5 - Height/2). Same vertical logic as the fill, so the two share a top edge, but horizontally centred rather than pinned left - Border Width →
0.02. Fattens the track very slightly past the fill, so you get a thin grey rim instead of both shapes ending on the same pixel - Leave everything else instanced. Height, Corner Radius and Filter still follow the original — that's the payoff.
Paint the track
- Add a Background. Rename it
ProgressbarBGcolor. Colour#929292— a mid grey that reads as an empty channel without competing with the fill. - Effect mask input ←
Instance_ProgressBarTransform.
Composite
- (Merge2) - Merge the progress bar and it’s background together.
Checkpoint 4
You shoud now have:
- ✅ A background for your progress bar, that…
- Automatically copies the settings, (like rounded corners) of your main progress bar.
Stage 4 - Add scale and position controls without breaking your hard work.
Why
The bar animates itself, but you no longer have a Center and Width to control the size and position of your progress bar. If you do try to change them, you’ll break your autoamtion.
So let’s add a node that’s dedicated just for that.
How
The Transform
- Add a Transform node. Rename it
ProgressBarTransform. - Insert it between
Progressbarandprogressbarcolor's effect mask input. - Set Size to
0.8. - The Transform scales around frame centre, so this pulls both ends inward evenly.
- Center on this node is now your position control. Drag it and the whole bar moves.
Instance the Transform too
- Select
ProgressBarTransform→Ctrl+C→Ctrl+Shift+V - Feed
InstanceProgressBarinto it. - There is now exactly one set of layout controls in the comp. Move it and both bars move.
Checkpoint
- ✅ Full-width grey track with a blue fill growing along it from the left
- ✅ Both inset from the frame edges with matching margins
- ✅ Drag
ProgressBarTransform→ Center — both bars move together - ✅ Change
Progressbar→ Height — both bars thicken, still sharing a top edge - ✅ Change
Progressbar→ Corner Radius — both bars round off together
Stage 6 - The Counter, in One Line of Text
Instead of spending hours animating complex text
We can automate it in moments with EXPRESSIONS!
How
Style it first, so you can see what you're doing
- Add a Text+ node. Leave it named
Text1— nothing refers to it by name. - Set:
- Font: Anton, Regular (my preference).
- Size:
0.0681 - Colour:
#212121, near-black. It sits on the bar, so it has to read against both the bright fill and the grey track
Position it against the bar
- In Text1.Center, paste this expression:
Point(0.5, Progressbar.Center.Y)This makes the text, copy the same position as our progress bar.
The counter
- Right-click the Styled Text field → Expression, and enter:
"Progress: " .. ceil(Progressbar.Width*100).. "%"Reading it left to right:
"Progress: "— literal text...is Lua's concatenation operator. It joins multiple things, into one text thing.ceil(...)rounds up to a whole number, so you never seeProgress: 47.328%.Progressbar.Width*100- grab the progress bar’s width value, and multiple it by 100... "%"sticks the percent sign on the end
Composite
- Add a Merge — background from the bar's Merge, foreground from
Text1. Then that overCanvasBackground. - Add another transform instance node after the text.
Checkpoint
- ✅ The number climbs as the fill grows
- ✅ First frame reads
Progress: 0%, last frame readsProgress: 100% - ✅ Label stays centred on the bar throughout
- ✅ Trim the clip and scrub again — still 0 to 100, still landing on the last frame
Bonus Stage - A sprinkle of aesthetic
How
Glow on the fill
- Add a Glow after
progressbarcolor, before the Merge. Rename itGlow2. - Set:
- Filter: Fast Gaussian
- Glow Size:
34.6 - Glow:
0.724 - Blend:
0.11
💡 Strong glow, low Blend. Blend mixes a node's output back against its input, so 0.11 means you're only seeing 11% of the effect. You keep the wide, soft falloff shape of a big glow while barely lifting the brightness. Do it the other way round — a weak glow at full Blend — and you get a tight, dirty halo that reads as a mistake.
Glow over everything
- Add a second Glow after the text Merge. Rename it
Glow1. Identical settings. - The fill now passes through both glows and picks up the halo twice, while the track and text only get the second one. That build-up is a feature — it's part of why the fill reads brighter and more alive than everything around it.
- Merge
Glow1overCanvasBackground.
Grain, last
- Add a Film Grain node at the very end of the chain, after that Merge.
- Set:
- Complexity:
13 - Master X Size:
0.6 - Master Strength:
0.0605 - Six percent strength. You'll barely see it on a still frame — but look at the flat grey canvas and the flat grey track and they've stopped looking like solid fills
- It goes last, over the canvas as well. Grain that only covers part of the frame gives the game away instantly
Optional: the gradient fill
progressbarcolor has a green gradient sitting on it already — #73FA79 down to #368225 — but its Type is still Solid Color, so the gradient never renders and the bar comes out flat blue.
- Set Type → Linear Gradient
- Drag the gradient's start and end handles in the viewer to set the ramp direction
- A short vertical ramp across the bar's height → subtle bevelled look
- A long horizontal ramp along its length → the bar changes colour as it fills. Nice on a bar that runs for a few seconds
Checkpoint
- ✅ Soft halo around the bar, with extra lift on the fill
- ✅ Faint grain over the whole frame, canvas included
- ✅ Text and bar reading as one object
Where to Change Things
Once it's built, these are the only controls worth touching.
- Bar colour →
progressbarcolor→ Color - Track colour →
ProgressbarBGcolor→ Color - Bar thickness →
Progressbar→ Height (the instance follows) - End rounding →
Progressbar→ Corner Radius (the instance follows) - Position in frame →
ProgressBarTransform→ Center — not the rectangle's Center, that's an expression - Bar width / margins →
ProgressBarTransform→ Size — not the rectangle's Width, that's an expression - Label wording →
Text1→ Styled Text, the"Progress: "part - Glow intensity → either Glow → Blend (leave Glow and Glow Size where they are)
- Grain amount →
FilmGrain1→ Master Strength (leave Complexity alone)
Reusing It
Two options once it's working.
Macro — select every node, right-click → Macro > Create Macro. Promote the handful of controls from the list above and you get a single node with a clean panel: bar colour, track colour, thickness, position, label text. That's the version to hand to someone else.
Template — save the comp as a .setting into the Templates > Edit > Titles folder of your Fusion user directory and it shows up in the Effects Library, draggable straight onto the timeline.