Kerfview

xTool .xcs viewer · nothing uploaded

What's inside an xTool .xcs file.

A tour of xTool's project format for curious makers and developers, worked out from publicly shared project files. xTool hasn't published a specification, so this isn't an official one.

or drop a .xcs or .xs anywhere on the page. LightBurn files open too.

Sample project

peak-coaster.xcs

Job sheet

Plain JSON

A .xcs file is a single JSON document in UTF-8, not an archive. Open one in a text editor and you'll see keys such as canvasId, canvas, device, version and often cover, a base64 PNG of the design used as its preview. A ua string records which program saved it, such as xToolCreativeSpace/2.6.38 or xToolStudio/1.6.8, and extName names the machine, like S1, P2 or F1 Ultra.

Canvases and layers

canvas is a list, because a project can have several canvases. Each has an id, a title (often a translation key such as {panel}1), a displays list of objects and a layerData table keyed by colour, for example "#fe0002": {"name": "{Red}", "order": 1, "visible": true}. Each object names its colour in layerColor.

Objects and their transform

Object types seen in real files include PATH (SVG path data in dPath), RECT, CIRCLE, LINE (with an endPoint), POLYGON (a flat points list), REGULAR_POLYGON, PEN, TEXT, BITMAP and QRCODE. Each carries x, y, width, height, angle in degrees, scale, skew in radians, and offsetX/offsetY. Units are millimetres with Y pointing down. The local drawing maps onto the canvas by the matrix

a = cos(angle + skew.y) × scale.x    b = sin(angle + skew.y) × scale.x
c = −sin(angle − skew.x) × scale.y   d = cos(angle − skew.x) × scale.y
e = offsetX                          f = offsetY

and x, y are where the local box's top-left corner lands. A skew of π mirrors an object. Boxes such as rectangles and pictures have their local size at width / scale.x by height / scale.y. Text keeps one positioned PATH per letter in charJSONs, already placed on the canvas, which is why lettering survives without the font.

Laser settings

Settings live under device.data, a map written as {"dataType": "Map", "value": [[key, value], …]}. It is keyed by canvas id, and each canvas holds another map keyed by object id. Every object records a processingType, such as VECTOR_CUTTING (Cut), VECTOR_ENGRAVING (Score), FILL_VECTOR_ENGRAVING (fill engrave) or BITMAP_ENGRAVING, plus a block for each type with power in percent, speed in mm/s, repeat for passes and, for engraving, density in lines per centimetre. A materialType says whether xTool's own preset or the user's custom values apply.

The .xs format

xTool Studio 1.7 and later save .xs files: a ZIP holding project.json, profiles.json, one JSON file per canvas, displays in chunks, and a device file whose bindings tie objects to setting profiles. Long paths can sit in a separate vectors/ store, referred to by hash. The objects themselves have the same shape as in .xcs.

How we checked it

Kerfview's reader is its own code. On publicly shared projects saved by many versions of xTool's software, the shapes it draws match the proportions of the preview xTool saved in each file. Other open projects that read the format include xcsReader and unofficial-xcs-writer.

Layers and settings

In the order LightBurn runs them. Untick a layer to hide it here and leave it out of exports.

Layers in this project with their cut settings
ShowLayerModeSpeedPowerPassesIntervalShapesPath lengthTime, est.

Grey italic values aren't saved in the file. A .lbrn2 leaves out values that match LightBurn's defaults, so the documented defaults are shown (100 mm/s, 20% power, 0.1 mm interval, one pass). Speeds are stored in mm/s; hover a speed for mm/min. Times assume the head always moves at full speed, so real jobs take longer; see how they're worked out.

Export

Only the layers that are switched on are exported. Files are made in your browser.

Free

SVG

For Inkscape, Illustrator, xTool Creative Space, the Glowforge app and LightBurn itself. Layers become groups in their own colours, at real size in millimetres.

Fill layers as

Unlock

DXF

For CAD, CNC routers, cutting services and older laser software. R12 DXF, one DXF layer per layer, millimetres, true circles. Pictures can't go in a DXF, so they're left out.

Part of the £6 unlock, coming soon.

Unlock · xTool files

LightBurn project

Turns an xTool .xcs or .xs into a .lbrn2 that LightBurn opens directly: one LightBurn layer per xTool layer and setting, with speed, power, passes and line interval filled in, and pictures on Image layers.

Part of the £6 unlock, coming soon.

Free

Pictures

Images embedded in the project, and the preview LightBurn or xTool saved with it, can be saved as PNG files on their own.

See the pictures

Pictures in this file

Shown at their own size. The original file name is what the designer's computer called the picture.

Job sheet

One printed page for whoever runs the laser: the design, every layer's settings, sizes, and the time estimate with its assumptions. Choose Save as PDF in the print window for a file.

Printing the job sheet is part of the £6 unlock, coming soon. The preview is free to look at.

One-time unlock

DXF, LightBurn conversion, batch and job sheets

Viewing, inspecting and SVG export are free and stay free. The unlock adds the things that save a workshop time.

  • DXF export of any project, layer by layer.
  • xTool .xcs and .xs files saved as LightBurn .lbrn2 projects, settings included.
  • Batch conversion: drop many .lbrn2 or .xcs files, or a ZIP of them, and get one ZIP back with SVG and DXF for each (and .lbrn2 for xTool files), plus a CSV of every layer's settings.
  • Printable job sheets with settings, sizes and time estimates.
  • One payment, no account, no subscription. Your files still never leave your computer.

£6 once

Coming soon

It isn't on sale yet, so there's nothing to pay today. Everything free on this page works now.

How sure is each number?

Read straight from the file

Layer names, modes, speeds, powers, passes and intervals are exactly what the file says, apart from values shown in grey italics, which the file leaves out and LightBurn fills with its defaults. Shape counts are exact.

Measured from the shapes

Sizes and path lengths are measured from the geometry, with curves followed to within a few thousandths of a millimetre. Text without a saved outline has no exact shape, so it isn't measured, and you'll see a note when that happens.

Estimated, and labelled

Times assume the head always moves at the layer's speed. Lines take length × passes ÷ speed; fills sweep each row from the first edge to the last at the line interval; images scan their whole frame. Acceleration, overscan and travel aren't counted, so real jobs take longer, sometimes a lot longer.