Skip to content
Photo2Pattern

Free embroidery file converter

Embroidery file converter that reads its own output back

Four stitch formats go in — Tajima DST, Melco EXP, Janome JEF and the PEC block inside a Brother PES — and the same design comes out as a DST or an EXP with every stitch in the order it arrived and every stop in the same place. The file that leaves is then decoded again out of its own bytes, and that readback is printed beside the source figures, so a conversion that went wrong shows up here rather than on a garment. There is no charge and no account, and the thread numbers a PES or JEF carried leave on a stop sheet, because neither target format has a field to put them in.

  • 100% free
  • No signup
  • 4 formats in, 2 out
  • Up to 8 MB
  • Every output decoded back

How to move a design into a format your machine will take

Bring the file, choose the target, sew a scrap — and it is the scrap that people skip and regret.

  1. Bring the file itself, not the name it was saved under

    Designs get renamed on their way through email, marketplaces and USB sticks, so this page checks the contents before it believes the extension. A PES is identified by the eight magic bytes it opens with, and a Tajima file by the LA field at the top of its header; JEF and EXP have no signature to check, so those two are taken on their extension and then sanity-tested — a JEF whose stitch-data pointer falls outside the file is refused rather than read into nonsense. Nothing partial is ever offered for download. Half a design is worse than none, because half a design still loads.

  2. Choose the target, then look hard at the preview

    Two formats can be written and they differ in almost nothing that matters: Tajima puts a 512-byte header in front of three-byte records, Melco writes two-byte records and no header at all. Both hold plain geometry at a tenth of a millimeter, which is why nothing is rounded in between. What deserves your attention is the picture: the four formats do not all count the Y axis in the same direction, so if the preview is a reflection of what your own software shows, tick one of the two mirror boxes and it will match. Recentering is on by default because most machines place a design around the needle's current position rather than from a corner.

  3. Take the thread sheet, then test on scrap

    If the source was a PES or a JEF it named its threads as index numbers into the palette built into the machine, and the file you are about to download has no field those numbers can live in. The CSV button writes them out as a stop-by-stop sheet with a blank column to fill in with what you are actually threading, and it is the only place that information continues to exist. Then read the two columns of the readback table: they are the design as it was sent to the encoder and the design decoded back out of the finished bytes. Matching columns mean the file says what was meant. They do not mean the machine will accept it, so the first run is still on a scrap of the same fabric.

Technical specifications

Formats it readsTajima DST, Melco EXP, Janome JEF and the PEC block of a Brother PES — four readers, each with its own control-byte layout
Formats it writesDST and EXP. PES and JEF are deliberately not written, because both require a thread table and a machine thumbnail that would have to be invented
The intermediateinteger tenths of a millimeter with a Y axis counted upward. All four formats share the unit, so nothing is scaled and nothing is rounded between reading and writing
Sewing orderpreserved stitch for stitch; the nth needle penetration out is the nth in. Stops stay at the same point in the sequence
Thread informationPES and JEF index numbers are read and written to a CSV stop sheet. Neither target format can carry them, and no color is guessed to fill the gap
Transforms offeredmirror left-right, mirror top-bottom, and recenter on the design's bounding box. No scaling, no density change, no stitch smoothing
Check run on every filethe finished bytes are decoded again and the stitch, jump, stop and extent figures are shown beside the source's
Size ceiling8 MB per file, which covers any design a home or single-head machine will run

Frequently asked questions

Why will it not write a .pes or a .jef?

Because writing one means fabricating information the source did not contain, and getting it slightly wrong is invisible. A PES is a wrapper whose stitches live in an embedded PEC block, and that block is not just coordinates: it carries a color-index table pointing into the fixed palette built into Brother machines, plus a one-bit thumbnail the machine draws on its own screen, plus a byte count that has to agree with everything after it. A file with one wrong byte in that region still loads at the panel and still starts sewing. DST and EXP have none of that — they are movement and nothing else, so there is nothing in them to get subtly wrong. The honest thing is to write the two formats that cannot be half-right and say plainly why the other two are missing.

My design lost its colors on the way to DST. Where did they go?

They were never converted, because there is no field on the other side to convert them into. Tajima and Melco record a thread change as a bare pause; the machine stops, somebody rethreads, the machine carries on, and nothing anywhere in the file says what was put in. That is not a limitation of this page — every DST in the world works this way, which is why commercial designs ship with a colorway sheet or a separate .col or .inf file beside them. What this page does about it is write that sheet for you from the indices the source really did carry, so the information leaves the conversion instead of evaporating in it.

Does converting alter the stitches themselves?

No coordinate is recalculated and no stitch is added, removed or reordered. All four formats here measure in tenths of a millimeter, so the numbers pass straight through with no scaling step to round anything, and the sequence out is the sequence in. Two things do change and both are bookkeeping: a movement too long for one record gets split into several records that cover the same distance, and recentering shifts every coordinate by the same amount so the middle of the design sits at the origin. Neither moves the needle anywhere it was not already going, which is what the readback table is there to demonstrate.

The result is mirrored compared to my software. Is it broken?

That is the Y axis, and it is a real disagreement between formats rather than a bug in one of them. Tajima, Melco and Janome all count Y upward from the start point; the PEC block inside a PES counts it downward, and this page flips PES on the way in so everything meets in the same orientation. Software that made a different choice will show a design the other way up, and a design that is symmetrical will not reveal which of you is right. The two mirror checkboxes exist for exactly this: tick the vertical one, confirm the preview matches your own software, and the downloaded file follows the preview.

Where on the hoop will the converted design start?

Wherever the needle is when you press start, because neither format stores an absolute position. Every coordinate in a stitch file is relative to the one before it, and the very first one is relative to the needle. That is why recentering matters more than it looks: with it on, the design's bounding box is centered on the origin, so the design comes out centered on wherever you positioned the needle. With it off, the original file's own starting point is preserved, which is what you want when you are converting one part of a multi-file set that has to line up with the others.

Is a converted file the same thing as a digitized one?

No — conversion moves existing stitches between containers, and digitizing invents stitches that did not exist. Nothing on this page decides a stitch direction, a density, an underlay or a pull compensation, because all of those decisions were already made by whoever punched the source and are baked into the coordinates. That also means conversion cannot improve a bad design: a file with a thousand stitches under a millimeter arrives with the same thousand. If you are starting from a picture rather than from stitches, that is a different operation on a different page.

The record count went up after conversion. Did it add stitches?

Almost certainly not, and the readback table separates the two things that could be meant. What grows is the number of jump records, because the two formats have different reach: one Tajima record can move an axis 121 tenths of a millimeter and one Melco byte can move it 127, so a long travel gets carved into a different number of pieces in each, and recentering adds one lead-in jump so the head reaches the design's start with the needle up. The needle count is the row that matters and it is flagged if it moves. There is exactly one innocent reason for it to: a Melco stitch at its full 12.7 mm reach does not fit a single Tajima record, so it becomes two, and that is one extra penetration on a line the needle was already crossing.

About the two families of stitch format, and why one direction is lossy

Stitch formats fall into two groups and almost every conversion problem is a trip between them. On one side sit the geometry-only formats — Tajima’s DST and Melco’s EXP — which hold movement, a needle-down flag and a pause, and refuse to hold anything else. They are the lingua franca of commercial embroidery precisely because they assume nothing: no palette, no hoop, no thumbnail, no brand. On the other side sit the machine formats — Brother’s PES, Janome’s JEF, Husqvarna’s VP3 — which wrap the same movements in a container that also names the threads, remembers the hoop and stores a small picture for the machine’s own screen. Going from the second group to the first drops everything the wrapper added. Going the other way means writing that wrapper from information the source never had.

That asymmetry is why this page reads four formats and writes two, and the reason is about failure modes rather than effort. A file read wrongly announces itself instantly: the stitch count is absurd, or the preview draws a scribble, and nobody hoops fabric for it. A file written wrongly does the opposite — it opens on the machine, shows a sensible outline, and discovers its own mistake in thread at eight hundred stitches a minute. A PEC block in particular is a byte layout with a color-index table and a one-bit bitmap inside it, and a converter that gets one field a byte out produces something that still loads. Writing only the two formats that are pure movement is the version of this tool that cannot quietly ruin a shirt, and the readback panel exists so that even those two are checked rather than trusted.

What conversion cannot do is worth stating because a lot of people arrive expecting it. It will not resize a design — density is fixed at the moment of digitizing, and stretching a stitch file leaves gaps while shrinking it drives the needle into its own holes. It will not add underlay, adjust for pull, or clean up a poorly punched file, since all of those decisions were made before the coordinates were written and are now indistinguishable from the design. If you want to see what is actually in the file before or after the trip, the DST viewer counts the records and checks them against the header; if you have artwork rather than stitches, the digitizer is where that starts, and it is frank about how little of a photograph survives. And if the picture you are holding was always going to be worked by hand, the cross stitch pattern maker answers the same question with a counted chart instead of a machine file.

Product and company names shown here are the trademarks of their respective owners. Photo2Pattern is an independent tool and is not affiliated with, sponsored by or endorsed by any of them.

Where the conversion happens

Your file is opened by JavaScript running in the tab you are reading this in. It is never uploaded, never sent to a server and never stored anywhere — there is no upload step to undo, because there is no upload. Close the tab and nothing of it remains.

The converted file is assembled as a byte array in the tab and handed to your browser as a download. It is not written to a server, not queued, and not retained for a re-download link — reload the page and the only copy is the one already in your downloads folder.