GSoC 2026 Idea Discussion — Native Per-Character Text Animation for TextLayer

Hi everyone,

I’m currently exploring ideas for a potential GSoC 2026 proposal for Synfig and wanted to get some feedback from the community before developing the full proposal.

One thing I noticed while experimenting with text animation in Synfig Studio is that text is currently treated as a single object inside TextLayer. If you want to animate characters individually, it usually requires workarounds like plugins or manually splitting each letter into separate layers and offsetting them in time.

I’m considering a feature that would add native per-character animation support. The idea is to internally break the text into individual glyph elements (something like a TextGroupLayer containing per-character elements) so that each character could be animated independently.

This would allow effects such as:

  • typewriter-style text

  • staggered letter animation

  • wave/bounce effects across characters

  • individual transforms like position, rotation, scale, color, or opacity

From a quick look at the codebase, it seems text rendering currently relies on Pango + Cairo. My tentative idea is to use the glyph layout information from Pango and render characters individually rather than drawing the entire layout as a single block. Those glyphs could then expose transform parameters that integrate with Synfig’s existing ValueNode and waypoint system.

I’m currently experimenting with a small prototype to see how feasible it is to render glyphs individually and apply transforms per character.

Before I turn this into a full proposal, I wanted to ask:

  1. Does this direction sound like a reasonable project idea for Synfig?

  2. Would extending TextLayer be preferable, or would introducing something like a TextGroupLayer make more sense architecturally?

  3. Are there any limitations in the current text rendering pipeline that I should be aware of?

Any feedback or suggestions on scope would be really helpful.

Thanks!

3 Likes

No, it doesn’t use neither Pango nor Cairo.

It uses FreeType + HarfBuzz + FriBiDi. :slight_smile:

Yes, it is a good idea and a requested feature by some users (if I recall well, it would allow users to reproduce the “range selector” from Adobe After Effects).

Maybe it would also allow to import SVG text spans and effects.

IMO it depends on how many new parameters would be added (or changed) in the TextLayer.

2 Likes

Thanks for the clarification!

I’ve started looking into the FreeType + HarfBuzz + FriBiDi pipeline to understand how glyph shaping and positioning work in Synfig.

The “range selector” comparison is really helpful — that’s very close to the kind of workflow I had in mind.

For the architecture, I’m currently exploring whether it makes more sense to extend the existing TextLayer or introduce a separate grouping layer for per-character elements. I’ll experiment a bit more to see what fits better with the current system.

I’m working on a small proof-of-concept to validate this approach and will share updates as I make progress.

Thanks again for the guidance!:heart:

I love the idea, and yes it would significantly enhance Synfig’s capability to animate text, and be very helpful to animators.

I was thinking of if we can extend the scope of idea to have to have a bit more and create a general “multi element animation” (kindaa) layer.

What I have on mind is, within group layer, we can have multiple layers. So the things that you plan to do for individual characters (glyphs) of text, will be similarly applied to elements of the group. So for end user the workflow would be, just use let’s say "Animate Group” , we will animate some property for this “Animate Group” layer, for example scale property, and then this animated property will be applied to all the elements of the group with staggering / delay (which can be configured through the property of Animate Group layer).

If you decide to work on text only, just keep this idea in mind during development, so that you can design the solution in such a way that it can be extended to such usecase later.

2 Likes

That’s a really interesting direction, thanks for suggesting it!

I can see how the stagger/offset mechanism could be generalized to groups of layers, not just text.

I’ll explore how this could fit within the project scope, and try to design the solution in a way that keeps it extensible toward a more general “Animate Group” type system.

I’ll keep this in mind while working on the prototype.

1 Like

Quick update: i just Got a basic TextGroup-style prototype working — text is now split into individual glyph layers and shows up correctly in the layer panel.

Each glyph behaves like a normal layer, so per-character transforms are already working.

Currently I am refining synchronization between the layer tree and canvas rendering, and then I’ll move on to animation and staggered effects.

i have submitted my GSoC proposal based on this direction but i also wanted to get it reviewed and I’d really appreciate any feedback or suggestions to improve it.