skill
kicad10-to-altium
Public Unreviewedby barrett-land
Import KiCad 10 symbols into Altium Designer correctly. Altium 26 supports KiCad through 9 only, so a raw KiCad 10 import silently loses property visibility and every hidden field lands visible. Downgrades v10 to v9 first, then imports headlessly, links the footprint, and repairs visibility.
← Commit history
README.md+11−3@@ -54,9 +54,17 @@ accumulates near-duplicate table entries. own font mode — so they keep the imported face even after every parameter is fixed. They are also **black** in Altium, not navy. `altium_set_text_style` handles both. -**The body is a third colour.** KiCad draws passives maroon (`#840000`, arriving as `132`); Altium-draws them pure blue (`16711680`). A normalised import therefore touches three colours: parameter-text navy, pins black, body blue. Fix two of the three and the part still looks imported.+**The body is two more colours.** KiCad draws passives maroon (`#840000`, arriving as `132`);+Altium draws passives blue (`16711680`) and IC outlines black. The *fill* (`AreaColor`) is separate+again and can arrive maroon with `IsSolid=T`, a solid block behind a correct outline; Altium's fill+is `11599871`, pale yellow.++A normalised import therefore touches **four** colours: parameter text navy `8388608`, pins black+`0`, body outline blue or black by part type, body fill `11599871`. Fix three of four and the part+still looks imported. Outline choice is automatic, keyed on pin count: 2 or fewer is a passive.++Note when verifying: **Altium omits `Color=` when the value is 0**, so a graphic record with no+colour key is black, not unset. ## Footprints import too
SKILL.md+48−2@@ -44,6 +44,29 @@ Also measured: **KiCad 9 cannot open a KiCad 10 library at all** (`Unable to loa there is no "just re-save it in KiCad 9" escape hatch for a v10-only third-party library. That is why this converter exists. +## Verified across part types++Run end to end on four real parts from the wiki, spanning passive to 48-pin MCU:++| Part | Source | Pins | Outline chosen | Notes |+|---|---|---|---|---|+| `CR0402-FX-1002GLF` | KiCad 8 | 2 | **blue** (passive) | clean |+| `AMS1117-3.3` | KiCad 8 | 3 | **black** (IC) | arrived with a maroon *fill* |+| `MCP251863T-E/9PX` | KiCad 6* | 29 | **black** (IC) | *see below |+| `STM32F103C8Tx` | KiCad 10 | 48 | **black** (IC) | derived symbol; stacked VSS |++After normalisation all four had **zero** off-spec text objects — every parameter, designator and+comment at `FontID=1` / `8388608`.++⚠️ **A file's declared version can be a lie.** `mcp251863t-e-9px.kicad_sym` (generator `adom-plcb`)+declares `20211014` — KiCad 6 — but carries v10-era tokens (`show_name`, `do_not_autoplace`,+`in_pos_files`, plus 6 relocatable `hide`s). **KiCad 9 refuses to open it**, and running the+converter repairs it as a side effect. So do not trust the version stamp: if a supposedly-old file+will not load, convert it anyway and see.++Running the converter on genuine KiCad 6/8 input is safe — it warns about the version, rewrites+nothing it should not, and the output still loads in KiCad 9.+ ## Step 1 — downgrade, if the source is KiCad 10 ```bash@@ -223,8 +246,31 @@ part versus an imported one in the same library: ellipse, arc, line, rounded rectangle, bezier, elliptical arc, pie). Pass `bodycolor=-1` to leave graphics alone when the colours are deliberate — an LED triangle, a polarity mark. -So a fully normalised import touches **three** colours: parameter text navy `8388608`, pins black-`0`, body blue `16711680`. Getting one or two of them right still leaves the part looking imported.+**Outline colour depends on the part type.** Altium's passives are blue; an IC outline reads better+black. `bodycolor` defaults to `auto`, which picks per component using **pin count** — 2 pins or+fewer is a passive (resistor, capacitor, inductor, diode) and gets blue; anything wider is an IC and+gets black. Pass an explicit integer to override, or `-1` to skip.++**The fill is a fourth colour, and the easiest to miss.** `AreaColor` is separate from `Color`. An+imported body can arrive with `AreaColor=132` (KiCad maroon) and `IsSolid=T`, rendering a solid+maroon block behind a correctly-coloured outline. Altium's fill is `11599871` = RGB(255,255,176),+pale yellow. `bodyfill` defaults to it; `-1` leaves it alone.++So a fully normalised import touches **four** colours:++| What | Value | |+|---|---|---|+| Parameter text | `8388608` | navy RGB(0,0,128) |+| Pins (line, name, number) | `0` | black |+| Body outline — passive | `16711680` | blue RGB(0,0,255) |+| Body outline — IC | `0` | black |+| Body fill | `11599871` | pale yellow RGB(255,255,176) |++Get three of the four right and the part still looks imported.++🔴 **When verifying, know that Altium OMITS `Color=` when the value is 0.** A graphic record with no+`Color` key is black, not "unset". Reading the binary and concluding "the colour was not applied" is+a false negative — check for the *absence* of the key, not a zero value. ⚠️ `fontid=1` is right because Altium seeds a new library's font table with its default face at index 1 — it is **not** guaranteed in a library assembled from elsewhere. Confirm before trusting
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "kicad10-to-altium",- "version": "1.3.0",+ "version": "1.4.0", "type": "skill", "description": "Import KiCad 10 symbols into Altium Designer correctly. Altium 26 supports KiCad through 9 only, so a raw KiCad 10 import silently loses property visibility and every hidden field lands visible. Downgrades v10 to v9 first, then imports headlessly, links the footprint, and repairs visibility.", "tags": [
page.json+1−1@@ -1,6 +1,6 @@ { "slug": "kicad10-to-altium",- "version": "1.3.0",+ "version": "1.4.0", "type": "skill", "description": "Import KiCad 10 symbols into Altium Designer correctly. Altium 26 supports KiCad through 9 only, so a raw KiCad 10 import silently loses property visibility and every hidden field lands visible. Downgrades v10 to v9 first, then imports headlessly, links the footprint, and repairs visibility.", "tags": [