Importing SVG images and tuning the scanner settings for graphics

I’m including the traced SVG image here.

I understand that it’s generally too much for one laser, but I’m pushing the limits intentionally to see what kind of bandwidth I have to deal with.

Appreciate the input!

Hi David,

I’ve taken a look at the SVG and it’s looking good - you’re close. The lines are all single stroke, which is the main win.

Before I get into specifics, I should say that this thread has pushed me to finally replace the underlying SVG parsing code entirely. So a lot of these issues won’t exist in future. For now though, Liberation is using the svgtiny library, which only supports a limited subset of SVG.

Fixing the SVG in Inkscape

The first thing to do is select everything, then go to:

Path → Stroke to Path

Some shapes (like circles or rounded rectangles) are stored as special SVG objects that svgtiny doesn’t support. Converting them to paths ensures they import correctly.

That should fix the circle in the middle of your image (which is currently coming through as a diamond shape)

Everything else imported correctly. The only thing lost was the gradient, but that’s easy to recreate in Liberation using a Colour By Position node.

Tuning the scanner settings

By default, Liberation uses quite conservative scanner settings to accommodate a wide range of laser qualities. That’s usually fine for beam shows, but graphics need a bit more push.

First, make sure you tune out any “tails” using the Scanner Sync setting. This is something you should ideally do every time you set up a new laser, but it’s especially important for graphics:

If you’re struggling to dial that in, try increasing the point rate in the Advanced settings. Importantly, in Liberation this does not change scanner speed, only temporal resolution. For graphics, you might want to push this to 40k or 50k to get more granularity.

NOTE that you do not need 50k scanners to run at 50k in Liberation. Point rate and speed are completely independent! You can adjust the actual point rate as much as you like but the speed will not change. Make sure you understand this concept!

Important: from here on in, we’re starting to push the scanners, so do this at your own risk.

So next, in the Laser Settings panel switch to the Graphics scanner preset as a starting point, then try increasing the main Speed setting.

If you want to push things further, you can use the FAST render profile in the SVG node:

Beyond that, you can experiment with custom scanner settings if you want to go deeper.

Content limitations

The main limitation here is actually the content.

I couldn’t get much beyond ~10 FPS with your graphic, which is noticeably flickery. It’s probably about twice as detailed as a single laser can comfortably handle. If you move the laser back further so the output range is smaller, you will be able to push the scanners further before they start “rounding over”

To get smooth results, you really want to be hitting around 25–30 FPS. For something like this, I’d recommend splitting it across at least two lasers using the canvas system.

Looking ahead

The next version of Liberation supports a much wider range of SVG features, so you won’t need to do the stroke-to-path step, and gradients will import properly.

Under the hood, this meant moving away from C++ SVG libraries (which are pretty limited) and bridging in a Rust-based parser. It was a fairly painful process, but it should remove a lot of these friction points going forward.


Liberation aims to make this easier, but laser graphics are still a complex subject. It takes a bit of practice to get clean results, so expect some trial and error along the way.

Hope that helps,

All the best,
Seb