How do I simulate karaoke text effect in Blender?

I’m hoping this is the right forum to post in.

How would I go about creating a karaoke text effect in Blender? What I mean is white text that changes color as the lyrics are sung. I’m sure it can be done with materials & transparency but I can’t figure it out.

Cycles or BI?

Most comfortable with Blender, but will go Cycles if there’s a way.

There’s a lot of ways, probably the best way to do it is with compositing.

This is a quick way to do it with cycles without compositing, with one plane, one material and one image. It uses a greyscale image of the text, which is used as a mask to create two materials (before and after the wipe, in this case yellow and red) In the example it is just a diffuse shader but the node setups can be as fancy as you like. There is a procedural mask created half black/half white which is keyframed on x, moving left to right. You keyframe the mapping node by right clicking on the x location. That mask then mixes your two setups. Node screenshot explained below video.

This is a test animation of the effect, I’ll post the blend if you want to look at it.


And the nodes explained:


Doh! One image for each line of the lyrics… As if the animation of the rest wasn’t tedious enough! :wink:

BlenderAllDay’s post led me to look closely at those Generated Coordinates which I never use. Quite handy for a text object… :eyebrowlift: Yep! That’s what I did: One single text object for all the lyrics… and the whole karaoke display. The result of my first attempt on a black background:

(Watch in 720p!)

You’re supposed to render transparent images to overlay the original video. And it’s really quick because I use Emission shaders which allow to use very low settings for a perfect noiseless result.

I synchronized the lines with the “lyrics” but I didn’t do the fine “lipsync” to synchronize the “Karaoke cursor” with the words. (I’m usually really lazy at 4 AM with a massive headache…) :wink:

The node tree with an enhanced “Karaoke cursor”:

Everything is customizable, from the various materials to the style of the scrolling. You can have a simple stepped scrolling to give the impression that the lines appear one by one, for example.

The blend file is here: Forum Karaoke.blend (1.2 MB) (including the “lyrics” in OGG) :wink:

The questions go in the little box down below. :smiley:

That is really nice kaluura, for real karaoke text it’s definitely a lot better. Just out of spite I hope the OP comes back and says, “well what I really want to do is change my wolverine from gold to blue…”

@blenderallday: :smiley: That’s mean… I like it! :wink:

Well, it doesn’t matter what the OP does with my blend file, it was fun to do. It might be useful for other people so, once documented, I’ll put the whole thing on BlendSwap.

Now, we need the OP to come back to see who wins. :wink:

Well what I really want to do is change my wolverine from blue to gold… :wink:

Thanks blenderallday for going the extra mile and posting the .blend file and the detailed post. By the time I saw your response I was already neck deep in a ridiculous workaround involving transparent planes, text converted to meshes, and boolean difference modifiers, so I finished the project that way to meet a deadline rather than start over.

And thanks Kaluura for taking it to the next level. Next time I will definitely use Cycles. So much easier and straightforward. I’m not familiar with it at all, but it’s obviously time to learn.


I’m digging out an old subject, sorry.
Your solution seems perfect for my needs but I can’t seem to get the end result to look right. I have Blender 2.79b and your file won’t work.

  • The coloured line is not the current one but the line at the very top of the screen. If I change the number of lines from 10 to 2, it looks a bit better (I have no clue why…).
  • The XOffset needs to go from -1 to 2 for the end result to look right.

I would appreciate some pointers on how to fix this.

I wouldn’t do this with compositing, not if you’re planning on rendering anyways, because compositing is slow, doesn’t show up in the preview, is unnecessary, and is less intuitive than doing it in the 3D viewport.

Instead, I would use texture coordinates from an empty to control the color position. In 2.79b:

You can move the empty in its x axis to control the position of the transition, and keyframe it as desired. Should be pretty intuitive.

If you want a transition, don’t use a greater than; remap coordinates as desired, then clamp them.

Multiple lines would probably be best done with multiple empties+materials, but it would be possible to remap your coordinates to handle them.

1 Like

Thanks for the help. I have managed to get the color effect of the lyrics, but I need to change the “Greater than” value in order to move the color along the text.
In other words, I have created an Empty, and used it in the “Texture Coordinate”, but when I move it along the x axis, the color will not change. What am I missing?

I’d have to see a file to tell you. Probably something simple.

I can’t seem to upload files as a new user.
Here is my file.

In the file you provided, the color does change with moving the empty. (It leads the empty a little bit, because the test isn’t for >0.)

1 Like

Oh you’re right. I need to switch to the rendered viewport shading. I got confused by the way the material viewport shading behaves.