Batch engraving names in LightBurn with Variable Text and a CSV
- Feb 17
- 7 min read
I use this any time I have a stack of items where the artwork stays the same but the text changes, like names on tumblers, name plates, awards, and tags. It saves a ton of setup time, and it is repeatable once you understand what LightBurn is actually doing.
LightBurn’s Variable Text feature works by letting you type special “replacement codes” into a normal text object, then LightBurn substitutes real values when you Preview or send the job.
Step 1: Turn on the Variable Text panel
In the top menu bar, click Window.
Scroll to the bottom.
Click Variable Text so it shows a check mark.
The Variable Text panel will appear somewhere on your screen. If it pops up floating, you can drag it and dock it. If you lose it later, repeat Window → Variable Text and it will come back.
Step 2: Make your CSV in Excel and save it correctly
You can use any program, but Excel is fine as long as you actually save as CSV.\
Build the sheet
Make your first row a header. That header row is not a “name,” it is just labels.
Example 1: names only
Column A header: Name
Then put one name per row under it.
Example 2: name and date columns
Column A header: Name
Column B header: Date
Then each row gets a Name and a Date.
Save as CSV
File → Save As
Choose a folder
In Save as type, choose CSV
Excel will warn you that some features are not supported in CSV. That is fine. You want the simple format.
Step 3: Understand the “percent codes” and the zero numbering
This is the part most people miss.
In Merge/CSV mode, LightBurn uses a percent sign plus a number to pull a column from the current row of your CSV.
%0 pulls column 0, which is the first column
%1 pulls column 1, which is the second column
%2 pulls column 2, which is the third column
LightBurn also counts rows starting at zero.
Current 0 means the first row in the CSV
Current 1 means the second row
Current 2 means the third row
Why this matters for headers
If your first row is headers like Name and Date, then row 0 is not usable engraving text. In that case, you typically set Start and Current to 1 so you skip the header.
Step 4: Build your design in LightBurn and import a logo if you want
Set up all the parts that stay the same.
Import your logo or artwork
Place it where you want
Set your layers and settings
The variable part will be only the text. Variable Text is just for text objects, your logo does not need to change.
Step 5: Create the text object and switch it to Merge/CSV mode
Use the Text tool in LightBurn and click in your workspace.
Type something temporary like NAME so you can see it.
Put it where you want it to engrave.
With that text selected, set the Variable Text mode to Merge/CSV.
Step 6: Type the replacement code inside the LightBurn text box
Now click into your text and replace the temporary text with your code.
Names only
If your CSV has Name in the first column, type:%0
Name plus date from the CSV
If your CSV has Name in column 0 and Date in column 1, type:%0 %1
Normal words plus a merged field
If you want words plus the merged value, type:
Name: %0
Step 7: Load the CSV in the Variable Text panel
In the Variable Text panel:
Click Browse
Select your CSV file
Once it is loaded, LightBurn knows what data it can pull from.
Step 8: Scroll through your CSV entries and actually see what will engrave
This is the other part that confuses people. When you click Next or Previous, you might not see anything change on your main workspace. That is normal.
Use Test
In the Variable Text panel, press and hold Test.
While you hold it, LightBurn shows you what the variable text will evaluate to for the current row. This is the quickest way to check spelling and see what row you are about to engrave.
Use Preview when you want to be 100 percent sure
Preview is the “trust but verify” step, and I use it constantly. The Preview window shows what LightBurn will actually send to the laser.
How to open Preview:
Press Alt + P on Windows or Option + P on Mac
Or Window → Preview
LightBurn even recommends previewing every project because it is easy to lose track of layers and settings.
How I preview Variable Text jobs:
Set Current to the row I want
Hold Test and confirm the text looks right
Open Preview and make sure the layout is correct
Run the job
Step 9: What each control in the Variable Text panel does
These controls matter most for Merge/CSV batching.
Current
Current is the row index you are about to use. It starts at 0 for the first row, 1 for the second, etc.
Start and End
Start is where you want to begin your batch. End is where you want to stop.
If you have headers in row 0, use Start = 1 and Current = 1 so you do not engrave the header.
Next and Previous
Next moves forward in the CSV. Previous moves backward.
Advance By
Advance By controls how far Next and Previous jump. If you are engraving one item at a time, keep Advance By at 1.
Auto-Advance
Auto-Advance moves Current forward automatically after each output. It is handy if you are very organized and you do not want to click Next every time.
If you know you are prone to getting distracted, it is totally fine to leave Auto-Advance off and manually click Next. You will always know exactly where you are.
Reset
Reset sets Current back to Start.
This is the panic button when you realize you were on the wrong row or you want to restart the batch cleanly.
Bake
Bake converts the variable codes into actual normal text using the current row.
After Bake, it is no longer variable. It will not update. Bake is useful if you want to lock a single name in place, but it is not something I use during a normal batch run.
Step 10: Turn on Shape Properties so you can use Max Width and avoid long-name problems
When you are doing names, one person always has a long name. This is where Shape Properties saves you.
Turn on Shape Properties
Click Window in the top menu bar
Click Shape Properties so it has a check mark
When you select your text object, the Shape Properties panel will show text-specific options like Max Width, Squeeze, and Ignore Empty Vars.
Step 11: Shape Properties options you will actually care about
Locked
Locked prevents you from accidentally moving or editing that object. I lock my logo and any alignment guides so nothing shifts mid-job.
Max Width
Max Width is the one that makes Variable Text feel safe.
Max Width tells LightBurn to shrink the text if it gets too long for the width you set. Set it to 0 for no limit.
How I use it:
I measure the maximum space I have for a name
I set Max Width to that value
Short names stay normal size
Long names automatically scale down so they do not run off the engraving area
Squeeze
Squeeze controls how LightBurn scales the text when it hits Max Width.
If Squeeze is enabled, LightBurn squishes horizontally only and keeps the text height the same.
If Squeeze is disabled, LightBurn scales both directions so it shrinks proportionally.
My rule of thumb:
Keep Squeeze off if you care about the font looking “normal”
Turn Squeeze on only if you must keep the same text height across every name
Ignore Empty Vars
Ignore Empty Vars is only relevant if some rows might have blank fields.
LightBurn describes it as removing newlines before empty variable fields when aligning text.
Example:You engrave two lines, name on line 1 and title on line 2.If a row has no title, the title line becomes blank.Ignore Empty Vars can remove the extra blank line so the engraving does not look like it has a weird gap.
Your approach is valid:
If your CSV should always be fully filled out, leave this off so blanks are obvious and you catch mistakes.
If blanks are expected, turn it on to keep formatting clean.
Cut Order Priority
Cut Order Priority only matters if your Cut Planner uses Order by Priority.
LightBurn says lower values cut first, starting with 0 as the first priority, and you must enable Order by Priority in Optimization Settings for it to take effect.
Plain example:
Set your logo engraving to priority 0 and your cut outline to priority 1.
If Order by Priority is active, LightBurn will do the priority 0 objects first, then priority 1.
If you never set Order by Priority in Cut Planner, this setting will not change anything.
Power Scale
Power Scale rescales the power used for that one shape by a percentage, between the layer’s Min Power and Max Power.
If you do not use Min Power, or Min and Max are the same, Power Scale is usually not worth touching.
Most engraving workflows do not need it, and it is fine to ignore.
Step 13: My actual batching loop once everything is set
This is how I run it day-to-day.
Load the CSV
Set Start and Current to 1 if I have a header row
Set End to the last row I want to use
Select my variable text object and confirm it uses %0 or whatever column I need
Hold Test and confirm the current name
Open Preview and verify layout and run order
Run the job
Click Next to move to the next name
Repeat
If I ever get lost, I hit Reset, confirm Start, then move forward from there.
Step 14: Save notes inside your LightBurn file so future you is happy
After I get a Variable Text job working, I save the file as a reusable template and I leave myself notes inside the workspace off to the side.
Things I write down:
Which CSV columns I used, like %0 is Name and %1 is Date
Whether Start should be 1 because row 0 is headers
The Max Width value I used for long names
Any setup reminders that would be easy to forget later
This turns Variable Text from “cool feature” into a repeatable shop process.
Quick troubleshooting
It is engraving the header word instead of the first name
Your Current is probably set to 0. Set Start and Current to 1 so you skip the header row.
The text does not look like it is changing
That is normal. Hold Test to see what will output for the current row, then use Preview to verify the full job.
A long name runs off the edge
Turn on Shape Properties and set Max Width so LightBurn scales the text down when it exceeds your limit.


Comments