This came up twice recently on r/AskElectronics — once as “what defines 0° orientation?” and once as “why do two TVS diodes from the same series show different pin 1?” — and my long answer to the second one got eaten by AutoModerator for containing a link to a banned domain. So here’s the durable version. Living copy with deeper links lives at z2amiller.github.io/pedalfx/docs/jlc-rotations.html.
Disclaimer: I’m a hobbyist who went unreasonably far down this rabbit hole, not a JLC employee. Trust but verify.
A pick-and-place file has X, Y, rotation, side. That’s it — no pad geometry, no pin numbers, no polarity. “Rotation 90” only means something if both parties agree what the part looks like at rotation 0. Your KiCad footprint has an origin and a pin-1 location that some library contributor chose. JLC’s machine has the part on a reel, in whatever orientation the manufacturer taped it. The correction between the two is a property of the pair (this footprint, this reel), and there is no channel in the CPL to communicate it. So every tool that “fixes” rotations — including JLC’s own preview and the community regex tables — is really encoding a guess about both sides.
There are standards; the problem is they cover different halves.
On the EDA side, IPC-7351 defines a “zero orientation” for footprints — pin 1 upper-left, pins counted counter-clockwise — and IEC 61188-7 defines its own, which doesn’t fully agree with IPC’s, because of course it doesn’t. KiCad’s library conventions mostly follow IPC. Mostly. Footprints from Ultra Librarian, SnapEDA, or the manufacturer follow whatever they follow.
On the reel side, EIA-481 says how parts sit in tape: rectangular bodies long-axis-perpendicular to the feed if they fit the tape width, parallel if they don’t; pin 1 / A1 in a defined quadrant. Because tape comes in 8/12/16/24 mm, this creates discrete thresholds — which is why the “empirical” corrections cluster in families: SOICs and TSSOPs are always ~90° off, small chip parts are 0°, polarized caps flip from 0° to 180° right around the 8→12 mm tape boundary. And EIA-481 explicitly notes SOT-23 has no distinguishable pin-1 mark, so it’s a per-manufacturer free-for-all. (Ask anyone who’s had a SOT-23 come back 90° off. Or three tables on my disk that say SOT-23 needs -90, 180, and 180-but-different-for-that-reel.)
Even if both standards were followed perfectly, you’d still need to know which conventions your specific footprint and your specific reel follow. Nothing in your CPL says.
LCSC (the parts distributor), JLCPCB (the fab), and EasyEDA (the EDA tool) are the same company. Most in-stock LCSC parts — not all; roughly a third have nothing, see the numbers below — have an EasyEDA symbol, footprint and (usually) 3D model, made by the same library team. The EasyEDA Footprint Naming Rule Reference — an 84-page PDF jointly written by LCSC’s engineering department and the EasyEDA team — describes how those footprints are named, and the names encode orientation.
I can’t prove it, but I’m about as sure as I can be that the DFM preview you see after uploading is rendering the EasyEDA footprint/3D model for each LCSC number, and that the pin-1 dot it shows you is EasyEDA’s pin 1. Why would they build a second library? Everything I’ve checked lines up with this, including the TVS-diode mystery below.
You don’t need any tool for this. Take an LCSC number and open:
https://easyeda.com/api/products/C5453/components
Pretty-print the JSON (Firefox does it natively; Chrome with any JSON viewer). Look at:
packageDetail.title — the footprint name, e.g.
SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL. Read it as: 8-pin SOIC, body 4.9 × 3.9 mm,
1.27 mm pitch, 6.0 mm lead span, and pin 1 Bottom-Left. The orientation
tokens are -TL/-TR/-BL/-BR (pin-1 corner) or -L/-R/-T/-B (single-axis) for
ICs, and -FD/-RD/-BI (forward / reverse / bidirectional) for two-pin
polarized parts.packageDetail.uuid — the footprint’s ID. Hundreds of thousands of parts
share a few tens of thousands of these; parts sharing a footprint UUID need
the same correction (see the numbers section).dataStr.shape — the schematic symbol, as EasyEDA’s tilde-delimited SVG-ish
drawing commands. Entries starting P~show~0~<pin number>… are pins, and
sometimes buried in each is a label text like ~A~ or ~K~ telling you
which pin number the library thinks is anode vs cathode. Sadly it’s not
reliable: plenty of diode symbols have no A/K text at all, and you have to
read the graphics — which pin the triangle points at in the symbol, or the
+/- marks (in different colours) drawn on the footprint in
packageDetail.dataStr. Text annotations are a hint, not the answer.The LCSC part-detail page (search the part number on their site) renders that same symbol and footprint as SVGs, so the easiest way to “read the graphics” is to just look at it there.
Two caveats. First, only standardized package families carry the orientation tokens; connectors, relays, modules and the like tend to use the MPN as the “suffix” and tell you nothing. Second, JLC’s line uses this data; you still have to know where pin 1 is on your footprint to compute the correction. There’s no escaping that.
From the second Reddit thread. Two Vishay SMF-package TVS diodes, D1 = VTVS17ASMF (C1978115) and D2 = VTVS12ASMF (C1856655), both placed at -90° in KiCad, both with pin 1 = anode on the KiCad footprint. JLC’s preview marked pin 1 on the cathode of D1 and the anode of D2. Same manufacturer, same series, same datasheet, which says pin 1 is the anode. What?
Pull the API for both:
| LCSC | MPN | EasyEDA footprint | pin 1 is |
|---|---|---|---|
| C1978115 | VTVS17ASMF-M3-08 | SMF_L2.8-W1.8-LS3.7-RD |
K |
| C1856655 | VTVS12ASMF-M3-08 | SMF_L2.8-W1.8-LS3.7-FD-1 |
A |
(For the 12V part the symbol has literal A/K pin labels; for the 17V part it
doesn’t, and you have to see that the diode symbol points at pin 1 — the
SVG-graphics problem from the previous section.) Different EasyEDA library
entries. The 17V one is drawn as “reverse direction” with pin 1 = cathode; the
12V one is “forward direction” with pin 1 = anode. Both are electrically
self-consistent — RD + K-is-pin-1 places the cathode on the same physical side
as FD + A-is-pin-1. So after your -90° both diodes come out with the anode where
you wanted it, and the board works. But the pink pin-1 dot lands on opposite
ends, because that dot is EasyEDA’s/tape’s pin 1, not yours.
This is what I mean by “correct on accident.” The board is right, but only
because two errors cancelled: the library’s pin numbering is flipped and its
footprint direction is flipped. If you had “fixed” your KiCad footprint to match
the preview’s pin-1 dot, you’d have built a backwards board. And for extra fun:
C1981006 is the same VTVS12ASMF on a different reel size (-M-18 vs -M-08),
and it’s in the library as -RD with pin 1 = K. Same physical part, opposite
metadata.
There’s a general lesson here for KiCad users specifically: KiCad’s diode and
LED footprints put pin 1 on the cathode; EasyEDA’s -FD is defined with the
anode on the left. So for diodes, “forward direction” tends to mean 180°
relative to KiCad, while for polarized caps (both conventions put + on pin 1) it
means 0°. When you see a diode that “needs 180°,” ask whether it’s a rotation
difference or a pin-numbering difference. They look identical in the preview and
are not identical when you change footprints.