# For AI assistants: The brief for the AI that styles your project.

What an AI needs to write a complete configuration (.occc) for your model: the list of its names, one print scale that sets every text, hatch and symbol, line weights in ranks, one hatch per material, a precise style for the views, and a graphic standard read from an image.

Source: https://occlusia.app/en/docs/ai-configuration

## Before you start

An AI assistant can write your project's whole configuration: every object's lines, hatch and symbol, the layers, the views' markers and PDF pages, the notes and the spot elevations. This page is its brief. Give it the brief and your model's list of names, and it writes a file you import as it is.

1. **Download your names** — Click **…** at the right end of the MODEL BROWSER title, then **Download as Markdown**: every group and subgroup, view, note and spot elevation of the model, under the names the configuration must use.
2. **Give it the brief** — The address of this page, or, for an AI that cannot open web pages, the brief below: this page and The .occc format in one Markdown file. Attach the JSON Schema too if it takes files.
3. **Say what you want** — The scale the drawings will be printed at, and the standard to follow: your office's rules in words, an image of a drawing in your graphic standard, or the reference on this page. To build on your current settings, attach them as well: **Export** › **Configuration (.occc)**.
4. **Import the file** — **Import** › **Configuration (.occc)** replaces the project's whole configuration. A file that breaks a rule changes nothing, and the dialog lists each problem with its code: give the list back to the AI. ⌘Z (Ctrl+Z) takes back an import.

- [The brief, in one file](https://occlusia.app/docs/occc/occlusia-ai-brief.md) — This page and The .occc format in one Markdown file, for an AI that cannot open web pages.
- [JSON Schema](https://occlusia.app/docs/occc/occc.schema.json) — Every key with its type, its default and its rules, in JSON Schema 2020-12.

> **An example of a request** — “Read occlusia.app/docs/ai-configuration and follow it. Write the Occlusia configuration (.occc) for the project listed in the attached file, for plans and sections printed at 1:50, in the graphic standard of the attached image.” — then attach the list and the image.

## To the AI: what you deliver

From here on, this page speaks to you, the AI writing the configuration. You are given the project's list of names — a Markdown file: `# ` and the model's name, then `## Objects`, `## Sections`, `## Annotations` and `## Spot elevations` —, a print scale, a standard to follow (words, an image, or none) and sometimes the project's current configuration. Every key, its default and the rules a file must respect are on The .occc format (occlusia.app/docs/occc-format) and in its JSON Schema.

1. **A charter first.** Before the file, a short table: each family of names, the look it gets — line weight, hatch, scale, colours, symbol, layer — and why. Then your assumptions: the scale, the standard, what an image did not show.
2. **Then the file.** One JSON object in UTF-8, without comments: the whole configuration, ready to import, as a `.occc` file to download when it is long. The four lists first, then the settings that point at them.
3. **Then what you left.** Every name you did not style, and why: a name that says nothing of what it is, a name that stands for two different things.

**The names.**

- Use the names of the list exactly, capitals, spaces and accents included. Never translate, correct or invent one: settings under a name the model does not have are kept, unused.
- How the list reads: a name is the whole line up to what Occlusia adds after it — `(×3)`, the count of objects of that name side by side; after a view's name, its symbol in brackets, then ` — ` and what it is; after a note's or a spot elevation's name, ` — ` and its texts or altitudes — nothing when a note writes its own name. `- Section : Coupe AA (21) — vertical` is the view `Section : Coupe AA`; `- HA = #level cm (×3)`, the note `HA = #level cm`.
- A name the list shows in several places is one entry: the same name is drawn the same everywhere.
- Write an entry under every name you style, groups and the objects inside them alike: in a file, a group's entry styles the group's own faces and never reaches the objects inside it. With hundreds of names, write the file with a script that applies your charter's rules, rather than by hand.
- A group named for its material (`Brick wall`) whose objects have neutral names (`Layer 1`) gives them its material: style them by it. A neutral name found under groups of different materials, or a name that stands for two materials, cannot be styled twice: say so, and suggest renaming one in the model.

**The settings.**

- Write every key of the look you chose, even when it equals its default — every styled object's `cut_line_weight` at least, so that Occlusia shows it as configured.
- Make a pattern preset of each fill — its `id` in lower case, `_` for spaces: `concrete`, `facing_brick` for the cut and `facing_brick_bond` beyond it, `tiles_60` beside `tiles_30` — and point the object's `template` (the cut) or `surface_template` (beyond the cut) at it. Copy the preset's values into the object's own keys too: Occlusia draws the object's copy, and the preset lets the person change a material everywhere at once. A look without a fill needs no preset.
- A colour, line weight or line type meant in the DXF too takes its ByLayer key at `false`; `true` hands it to the layer. The objects' ByLayer keys: `cut_line_weight_bylayer`, `cut_line_type_bylayer`, `cut_line_color_bylayer`, the same three with `surf_` and with `symbol_`, `cut_pattern_color_bylayer` and `surf_pattern_color_bylayer`. A note has `color_bylayer`; a spot elevation `marker_color_bylayer`, `line_color_bylayer`, `value_color_bylayer` and `name_color_bylayer`.
- `symbol` is `none`, `cross` or `insulation`, nothing else; a hatch is an id of the catalog below; a colour is `#RRGGBB`.
- Leave out `author`, `app_version`, `app_build`, `snapshot_plugin_version`, `created_at` and `saved_at`: they are informational, and Occlusia writes them at its next save.

## One scale sets every size

Lines are sized on the printed sheet, everything else in the model. A line weight is a width in millimetres on the paper, and so are a line type's dashes: they stay the same at every scale. Text heights, hatch sizes, symbol sizes and lengths are in centimetres of the model: on the sheet they shrink as the scale gets smaller. Choose them for the scale the person prints at — 1:50 if they do not say.

- `font_size · value_font_size · name_font_size` — The height of a capital on the sheet, in mm, × the scale's denominator ÷ 10. 2.5 mm at 1:50: `12.5`.
- `cut_pattern_scale · surf_pattern_scale` — The pattern's module (see the catalog) × the scale is a length in centimetres of the model; on the sheet, that length × 10 ÷ the denominator, in mm.
- `marker_scale · scale` — A section marker or a spot elevation in `manual` size is built on a unit of 10 cm of the model × its scale: on the sheet, 100 × the scale ÷ the denominator, in mm. A spot elevation's triangle is one unit wide, a section marker's disc four. A 3 mm triangle: `scale` = 3 × the denominator ÷ 100 — 0.6 at 1:20, 1.5 at 1:50, 3 at 1:100. A 10 mm disc: `marker_scale` = 10 × the denominator ÷ 400 — 0.5, 1.25, 2.5.
- `max_width · line_length` — A note's wrapping width and a spot elevation's line: centimetres of the model.

ISO 3098's text heights on the sheet, and the size that writes them at each scale:

- `1:20` — 1.8 mm `3.6` · 2.5 mm `5` · 3.5 mm `7` · 5 mm `10`
- `1:50` — 1.8 mm `9` · 2.5 mm `12.5` · 3.5 mm `17.5` · 5 mm `25`
- `1:100` — 1.8 mm `18` · 2.5 mm `25` · 3.5 mm `35` · 5 mm `50`
- `1:200` — 1.8 mm `36` · 2.5 mm `50` · 3.5 mm `70` · 5 mm `100`

- **Texts in ranks.** 2.5 mm for the notes and the spot elevations' values, 1.8 mm for secondary labels, 3.5 mm for what is read from afar. A spot elevation's value in bold, its label regular.
- **A note's size is a whole number.** Occlusia reads a note's `font_size` rounded down: write the nearest whole number, rounding up — `13`, not `12.5`. A spot elevation's sizes take decimals.
- **Section markers** size their texts against the marker: `marker_number_font_size` and `marker_name_font_size` are factors from 0.5 to 2, 1 by default.
- **Hatch density.** A pattern that draws a thing — bricks, blocks, tiles, boards, aggregate — at the thing's real size. Parallel lines no closer than 0.7 mm on the sheet (ISO 128) and never under 0.5 mm, or the hatch prints as grey; a texture — sand, honeycomb, wood grain — may be finer: it reads as a tone.
- **The PDF page.** Give each view's `pdf` the same scale: `scale_mode` `custom` and `scale_denominator` the scale's denominator, with the sheet's `format` and `orientation` when the person gives them. Without them, ask; if you cannot, leave them out and say that the sheet is to be chosen in Occlusia — the default, A4, rarely holds a building at 1:50.

> **One configuration per scale** — A configuration gives each name one hatch scale and one text size: it suits one print scale. Drawings at 1:20 and at 1:100 need two files: say so, and name each after its scale (`Office 1-50.occc`).

## Line weights in ranks

What is cut is drawn heavier than what is seen beyond, and the structure heavier than what is built on it. Take ISO 128's series, each step ×√2, one rank per role: `cut_line_weight` for the cut, `surf_line_weight` for the edges beyond.

- `stroke-ultra · 1.00 mm` — Rarely: the ground line of an elevation, the heaviest cut at 1:20 and larger.
- `stroke-heavy · 0.70 mm` — The cut structure: concrete, masonry, a wall, slab or column of unknown material, the ground.
- `stroke-bold · 0.50 mm` — The secondary mass: facing brick, thermal-break blocks, glulam, partitions.
- `stroke-medium · 0.35 mm` — What is built in and on: insulation, timber members, joinery, cladding, roofing, screeds, stairs.
- `stroke-thin · 0.25 mm` — Thin layers and fittings: finishes, membranes, sheets, panels, glass, furniture.
- `stroke-hairline · 0.13 mm` — Hatch lines, cut symbols, and the edges seen beyond the cut.

At 1:100 and 1:200, take every cut one rank lighter. A standard that shows other ranks wins; a rank the six weights do not have becomes a line weight of the project's own (`line_weights`, `stroke-custom-…`).

## One material, one hatch

Read each name for its material, in any language, abbreviated or misspelled: `Mur béton 20`, `Concrete wall`, `Betonwand`, `Isolant PIR 120 mm`. The material decides the hatch, and wins over the element: `Escalier en béton` is concrete, not a stair. A name that gives only the element takes the material that element almost always has in the person's practice — a raft, a foundation, a ring beam, a lintel, a floor slab are concrete in Belgium and France — and the charter reports each such reading; when no material is likely, the outline alone, no hatch, at the element's line weight. A number is a size: a thickness, a brick or tile format.

Without a standard of the person's, follow this reference — Belgian and French practice at 1:50: monochrome but for what insulates, in yellow (`#FFED00`), and glass, in pale grey (`#DDE3E8`); each mass — concrete, masonry, stone, glulam, screeds, gravel — on an opaque white background, so that it hides what it overlaps. Its scales are for 1:50: adjust them to the print scale by the rules above.

- **concrete · béton · beton · Beton** — AR-CONC at 0.1 on `#FFFFFF`: 2 cm aggregate. Cut 0.70. Formwork blocks alike.
- **lean concrete · béton maigre · mager beton · Magerbeton** — AR-CONC at 0.2 on `#FFFFFF`. Cut 0.25. Concrete to falls (`béton de pente`) alike.
- **screed · chape · dekvloer · Estrich** — AR-SAND at 0.05 on `#FFFFFF`. Cut 0.35.
- **mortar, render, plaster · mortier, enduit · mortel, pleister · Mörtel, Putz** — AR-SAND at 0.05 on `#FFFFFF`. Cut 0.25.
- **sand · sable · zand · Sand** — AR-SAND at 0.08 on `#FFFFFF`. Cut 0.25.
- **concrete block, silicate · bloc béton, silico-calcaire · betonblok, kalkzandsteen · Betonstein, Kalksandstein** — ANSI31 at 1.6 on `#FFFFFF`: 45° lines every 5.1 cm. Cut 0.70. Masonry of unknown kind alike.
- **clay block, brick · brique, terre cuite · snelbouwsteen, baksteen · Ziegel** — ANSI31 at 1.1 on `#FFFFFF`: every 3.5 cm. Cut 0.70.
- **facing brick · brique de parement · gevelsteen · Verblender** — Cut: ANSI31 at 1.1 on `#FFFFFF`. Beyond the cut: AR-BRSTD at 0.095, transparency 40, the bricks at their size. Cut 0.50.
- **aerated concrete · béton cellulaire · cellenbeton · Porenbeton** — HONEY at 0.5 on `#FFED00`. Cut 0.70.
- **thermal-break block · bloc isolant · isolerende blok · Wärmedämmstein** — ANSI37 at 1.0 on `#FFED00`. Cut 0.50.
- **stone masonry · maçonnerie de pierre · natuursteen · Naturstein** — GRAVEL at 1.5 on `#FFFFFF`. Cut 0.70.
- **sill, bluestone · seuil, pierre bleue · dorpel, arduin · Sohlbank, Blaustein** — ANSI36 at 0.8 on `#FFFFFF`. Cut 0.35.
- **rigid insulation: PIR, PUR, XPS, EPS · isolant · isolatie · Dämmung** — ANSI37 at 1.6 on `#FFED00`. Cut 0.35. Sprayed and sarking insulation alike.
- **mineral wool · laine minérale · minerale wol · Mineralwolle** — `hatch_solid` in `#FFED00` and the `insulation` symbol. Cut 0.35.
- **timber: rafter, joist, stud, batten · bois · hout · Holz** — No hatch, the `cross` symbol. Cut 0.35, boards 0.25.
- **glulam, CLT · lamellé-collé · gelamineerd hout · Brettschichtholz** — LINE at 1.25 on `#FFFFFF`: its 4 cm lamellae. Cut 0.50.
- **wood panel: OSB, plywood · panneau · plaat · Holzwerkstoffplatte** — JIS_WOOD at 1. Cut 0.25.
- **timber cladding · bardage bois · houten gevelbekleding · Holzschalung** — Beyond the cut: LINE at 3.8, transparency 50; angle 90 for vertical boards, the default, 0 for horizontal ones. Cut 0.35.
- **parquet · parquet · parket · Parkett** — Beyond the cut: AR-PARQ1 at 0.14, transparency 50. Cut 0.25.
- **façade panel, fibre cement · panneau de façade, fibrociment · gevelpaneel, vezelcement · Fassadenplatte, Faserzement** — No hatch; beyond the cut, the colour the name gives. Cut 0.35.
- **steel · acier · staal · Stahl** — `hatch_solid`: thin sections in black (ISO 128-50). Cut 0.35.
- **metal sheet, flashing, zinc, gutter, downpipe · tôle, bavette, gouttière, descente · plaatwerk, goot, regenpijp · Blech, Rinne, Fallrohr** — `hatch_solid`. Cut 0.25.
- **membrane, vapour barrier, EPDM · membrane, pare-vapeur · folie, dampscherm · Abdichtung, Dampfsperre** — `hatch_solid`. Cut 0.25.
- **plasterboard · plaque de plâtre · gipsplaat · Gipskarton** — No hatch. Cut 0.25.
- **floor tiles · carrelage · tegels · Fliesen** — Beyond the cut: NET at 9.45, transparency 50 — 30 cm tiles, or the format the name gives. Cut 0.25.
- **roof tiles · tuiles · dakpannen · Dachziegel** — Beyond the cut: AR-RROOF at 0.2, transparency 50. Cut 0.35.
- **slates · ardoises · leien · Schiefer** — Beyond the cut: LINE at 5, transparency 50 — 16 cm courses. Cut 0.35.
- **standing seam · joint debout · felsdak · Stehfalz** — Beyond the cut: LINE at 15.75, angle 90, transparency 50 — 50 cm seams. Cut 0.35.
- **green roof substrate · substrat · substraat · Substrat** — EARTH at 1.5, angle 45. Cut 0.35.
- **ground · terrain · grond · Erdreich** — EARTH at 5, angle 45. Cut 0.70.
- **existing ground · terrain naturel · bestaand maaiveld · Urgelände** — Its line alone: the cut `dashed`, `#FF0000`, 0.35; `surf_line_type` `none`; `wireframe` and `exclude_from_shadows` `true`.
- **gravel, hardcore · gravier, empierrement · grind, steenslag · Kies, Schotter** — GRAVEL at 0.5 on `#FFFFFF`. Cut 0.25.
- **glass · verre · glas · Glas** — Beyond the cut: `hatch_solid` in `#DDE3E8`. Cut 0.25.
- **window, door, stair · fenêtre, porte, escalier · raam, deur, trap · Fenster, Tür, Treppe** — No hatch. Cut 0.35.
- **railing, furniture, sanitary, plants, fittings, solar panels · garde-corps, mobilier, quincaillerie, panneaux solaires · leuning, meubilair, beslag, zonnepanelen · Geländer, Möbel, Beschläge, Solarmodule** — No hatch. Cut 0.25.
- **2D lines · 2D · 2D-lijnen · 2D-Linien** — Lines drawn in the model, not volumes: no hatch, cut 0.25 — 0.13 for a name that says fine (`fin`, `thin`).
- **heavy partition · cloison maçonnée · zware binnenwand · Mauerwerkswand** — ANSI31 at 1.6 on `#FFFFFF`. Cut 0.50.
- **light partition · cloison légère · lichte scheidingswand · Leichtbauwand** — No hatch, the `insulation` symbol for its mineral wool. Cut 0.35.
- **wall, slab, column, beam · mur, dalle · muur, vloer · Wand, Decke** — Material unknown: the outline alone. Cut 0.70; a partition or a roof 0.50.
- **to demolish · à démolir · te slopen · Abbruch** — Over its own look: every line `dashed` in `#FF0000` — the cut, the edges beyond, the symbol, its line `solid` — and the cut hatch in `#FF0000`. The objects inside it too.

**Draw order.** Where objects overlap, the higher `draw_order` is drawn above: steel 100, concrete members 90, cast concrete 80, sills 75, masonry 70, timber 60, screeds and lean concrete 40, membranes and sheets 35, finishes, claddings and façade panels 30, unknown materials and substrates 20, insulation 10, gravel 5, the ground 0; aerated and thermal-break blocks and heavy partitions 70 as masonry, sand 40, light partitions 30; joinery, glass, fittings and furniture stay at 0.

**What else a name says.** A colour it names (`noir`, `RAL 7016`, `zinc`, `pierre bleue`) fills the faces seen beyond the cut, never the cut — `surface_hatch` `hatch_solid`, or a pattern's background with its lines in a darker shade of that colour. A size sets a pattern's scale: `Carrelage 60x60`, NET at 18.9. A direction (`horizontal`, `vertical`) sets its angle.

> **Transparency** — A hatch's transparency fades its background too. To keep a colour solid behind lighter lines, keep the transparency at 0 and choose a lighter line colour.

## The hatch catalog

`fill_pattern` and `surface_hatch` take `none`, `hatch_solid` or one of these ids. Each pattern's module is in centimetres of the model at scale 1: the scale that draws a thing at its real size is that size divided by the module — a 20 cm course of concrete blocks with AR-B816 (module 203.2): `0.098`.

Every pattern, its module in centimetres of the model at scale 1, and what it is drawn for.

```json
{
  "hatch_solid": "a flat fill in the pattern's colour",
  "hatch_angle": "angle iron: squares, 6.99",
  "hatch_ansi31": "45° lines, 3.175 apart: masonry, general section",
  "hatch_ansi32": "45° lines in pairs, 9.525 period: steel",
  "hatch_ansi33": "45° lines, solid and dashed, 6.35 period: bronze, brass, copper",
  "hatch_ansi34": "45° lines in fours, 19.05 period: plastic, rubber",
  "hatch_ansi35": "45° lines, solid and dash-dot, 6.35 period: fire brick, refractory",
  "hatch_ansi36": "45° dash-dot lines, 3.175 apart: marble, slate, natural stone",
  "hatch_ansi37": "crossed 45° lines, 3.175 apart: rigid insulation, lead, zinc",
  "hatch_ansi38": "45° lines crossed by dashes, 3.175 apart: aluminium",
  "hatch_ar_b816": "blocks 406.4 × 203.2, running bond",
  "hatch_ar_b816c": "blocks 406.4 × 203.2, running bond, with their joints",
  "hatch_ar_b88": "blocks 203.2 × 203.2, running bond",
  "hatch_ar_brelm": "bricks 203.2 long, English bond, with their joints",
  "hatch_ar_brstd": "bricks 203.2 × 67.73, running bond: brick façades",
  "hatch_ar_conc": "concrete aggregate: 2 cm stones at 0.1",
  "hatch_ar_hbone": "herringbone, 101.6: paving",
  "hatch_ar_parq1": "parquet, 304.8 squares of 50.8 strips",
  "hatch_ar_rroof": "roof tiles in courses, about 25.4",
  "hatch_ar_rshke": "wood shakes, 304.8 courses",
  "hatch_ar_sand": "sand grains: sand, mortar, render, screed",
  "hatch_box": "boxed steel, 25.4",
  "hatch_brass": "lines 3.175 apart, solid and dashed: brass",
  "hatch_brick": "bricks 12.7 × 6.35",
  "hatch_brstone": "brick and stone, 8.38 courses",
  "hatch_clay": "groups of lines, 4.76 period: clay",
  "hatch_cork": "lines and ticks, 3.175: cork",
  "hatch_cross": "small crosses, 6.35",
  "hatch_dash": "dashes, 3.175 apart",
  "hatch_dolmit": "lines and 45° strokes, 6.35: rock layers",
  "hatch_dots": "dots, 1.59 apart",
  "hatch_earth": "crossed groups of short lines, 6.35: earth",
  "hatch_escher": "Escher tiling, 26.4",
  "hatch_flex": "lines and ticks, 6.35: flexible material",
  "hatch_gost_glass": "45° strokes, 6: glass (GOST)",
  "hatch_gost_ground": "45° lines in threes, 10: ground (GOST)",
  "hatch_gost_wood": "grain, 6: wood (GOST)",
  "hatch_grass": "grass tufts, 25.4",
  "hatch_grate": "lines 0.79 apart crossed every 3.175: grating",
  "hatch_gravel": "stones in a 25.4 tile: gravel, stone masonry",
  "hatch_hex": "hexagons, 5.5",
  "hatch_honey": "honeycomb, 2.75: aerated concrete",
  "hatch_hound": "houndstooth, 1.59",
  "hatch_insul": "lines in threes, 9.525 period: insulation",
  "hatch_acad_iso02w100": "lines 5 apart, dashed as ISO line type 02; the same for 03 to 15",
  "hatch_jis_lc_8": "45° lines in pairs, 7.8; also 8a, 20 and 20a",
  "hatch_jis_rc_10": "45° lines in threes, 10: reinforced concrete (JIS); also 15, 18 and 30",
  "hatch_jis_stn_1e": "45° lines and dashes, 1: stone (JIS); also 2.5",
  "hatch_jis_wood": "45° grain, 0.707 apart: wood panels",
  "hatch_line": "lines, 3.175 apart: boards, courses, lamellae",
  "hatch_mudst": "dashes and dots, 6.35: mudstone",
  "hatch_net": "square grid, 3.175: tiles",
  "hatch_net3": "triangular grid, 3.175",
  "hatch_plast": "lines in threes, 6.35: plastic",
  "hatch_plasti": "lines in fours, 6.35: plastic",
  "hatch_sacncr": "45° lines and dots, 2.38: concrete",
  "hatch_square": "dashed square grid, 3.175",
  "hatch_stars": "stars, 5.5",
  "hatch_steel": "45° lines in pairs, 3.175: steel",
  "hatch_swamp": "tufts, 12.7: marsh",
  "hatch_trans": "lines, solid and dashed, 6.35: heat transfer material",
  "hatch_triang": "triangles, 8.25",
  "hatch_zigzag": "steps, 3.175"
}
```

The ids written out above stand for their families: `hatch_acad_iso03w100` to `hatch_acad_iso15w100`, `hatch_jis_lc_8a`, `hatch_jis_lc_20`, `hatch_jis_lc_20a`, `hatch_jis_rc_15`, `hatch_jis_rc_18`, `hatch_jis_rc_30` and `hatch_jis_stn_2.5` exist too.

## The style of the views

`sections_settings` takes one entry per name of `## Sections`. The list says what each view is — `plan, cut at 1.20 m`, `ceiling view`, or `vertical` for a section or an elevation, which its name tells apart. A vertical view whose name says façade or elevation — `Façade`, `Élévation`, `Gevel`, `Ansicht`, `Elevation`, or their initials, `FAR`, `FD` — is an elevation; any other, a section. Write the same marker style under every view, so that all are marked alike, then each view's own choices. In the reference: `default`, black, the cut line `dash-dot` in black, heads at both ends, the symbol and the name written; a plan's marker hidden, its cut line would cross every section.

- `marker_style` — `default`, a disc with the view's symbol and name; `closed_arrow` or `open_arrow`, arrows at the ends of the cut line.
- `section_line_type · section_line_color` — The cut line drawn across the other views: `dash-dot` in ISO 128.
- `marker_endpoints · marker_show_number · marker_show_name` — Heads at `both` ends, the `start`, the `end` or `none`; the symbol and the name written or not.
- `marker_size_mode · marker_scale` — `manual`, at a scale proportional to the print scale: every marker one size on every sheet.
- `marker_number_font_family · marker_name_font_family` — A family of the font list (see Notes and spot elevations).
- `marker_color · marker_number_color · marker_name_color` — Blue (`#0000FF`) by default: write black, or the standard's colour.
- `hidden` — `true` for a view whose marker must not appear in the others.
- `object_visibility` — By object name, `false` hides it in this view: the ground and the foundations in a plan, the furniture in a section. Name every object to hide, those inside a group included.
- `shadow` — In elevations: `enabled` `true`, `azimuth` 135 or 225, `altitude` 40 to 45, `interiors` `false`. In plans and sections, usually off.
- `pdf` — `format`, `orientation`, `scale_mode` `custom` and `scale_denominator` at the print scale; `margins_mm` 10.

## Notes and spot elevations

`annotations_settings` takes one entry per name of `## Annotations`, `spot_elevations_settings` one per name of `## Spot elevations`. Give every note one style and every spot elevation another, unless the standard sets some apart. In the reference: Arial; notes 2.5 mm regular, the drawing cleared behind them; spot elevations a `triangle` of 3 mm, the texts on the `right`, the value 2.5 mm bold, the label 1.8 mm regular, no line.

- `font_family` — A family of the font list: Arial, Helvetica, Times New Roman, Courier New, Verdana, Tahoma, Inter, Roboto, Open Sans, Lato, Montserrat, Poppins, Source Sans 3, Carlito, Lora, Merriweather, Playfair Display, Source Serif 4, JetBrains Mono, Source Code Pro, osifont (ISO 3098 lettering), Architects Daughter and Caveat (handwritten). Another name is not drawn as written.
- `font_size · font_style` — A whole number, from the scale (see above); `regular`, `bold`, `italic` or `bold-italic`.
- `background` — `drawing` clears the drawing behind the text, for a note laid over hatches; `solid`, a box of `background_color`.
- `multiline · max_width` — Long notes wrap at a width in centimetres of the model: 6 cm on a 1:50 sheet is `300`.
- `marker_style · marker_side` — `triangle`, `triangle_half`, `triangle_open` or `target`; the texts on the `right` or the `left`.
- `size_mode · scale` — `manual`, at a scale proportional to the print scale.
- `value_font_size · name_font_size` — From the scale (see above), decimals allowed; the value `bold`, the name `regular`.
- `value_display` — `relative`, the height in the model (+2.90); `absolute` adds `spot_elevation_datum`.
- `spot_elevation_datum` — Only from the person: the altitude of the model's origin, in metres (`offset_m`), and its reference (`label`): `TAW` in Belgium, `NGF` in France, `NAP` in the Netherlands, `NHN` in Germany.

## Layers

Layers organise the DXF. Use the standard's layer names when it gives them; otherwise choose one of two schemes, and put each object's cut lines, edges beyond, hatches and symbol on them (`cut_layer_id`, `surf_layer_id`, `hatch_layer_id`, `cut_symbol_layer_id`).

- **By pen**, the way an office plots through a colour table: a layer per cut line weight (`Cut 0.70`, `Cut 0.50`…), one for the edges beyond the cut, one for the hatches and the symbols. Each layer's `line_weight` is its pen, in hundredths of a millimetre (`70`), and its colour the one a pen table maps to it: 1.00 `#FF0000`, 0.70 `#00FF00`, 0.50 `#0000FF`, 0.35 `#00FFFF`, 0.25 `#FF00FF`, 0.13 `#808080`.
- **By element**, after ISO 13567 or the AIA's names: `A-WALL`, `A-FLOR`, `A-INSL`, `A-GLAZ`, `A-HATCH`, `A-ANNO`, as in the demo model's configuration.
- Notes, spot elevations and markers on one layer of their own, apart from the objects: 0.25 by pen, the hatches and symbols' layer 0.13. Never a layer `0`, nor the id `layer_0`: the default layer is Occlusia's.

## A graphic standard from an image

When the person attaches an image of a drawing in their standard — a section, a detail, a plan, a legend —, reproduce its look, not its content: how each material is drawn, how heavy each line is, how the texts and marks are set. Read it in this order:

1. **Find its scale** — A size you know — a brick course of 6.5 cm and its joint, a 2.10 m door, a 2.6 to 3 m storey — gives the image's centimetres of the model; the scale written on it, or a scale bar, gives the scale it was printed at. With no scale written, take it as drawn at the scale the person prints at, and say so.
2. **Sort the lines into ranks** — Group the thicknesses you see from the heaviest to the finest, and give each group a rank of the series by their ratios: a pixel says nothing of a millimetre. The heaviest cut is the structure. When fewer than three groups can be told apart, keep the reference's ranks.
3. **Name every material** — For each hatch, its family — 45° lines, crossed lines, dots, stones, aggregate, bricks, solid, none —, its angle and its density: count the lines across a thickness you know, and turn the spacing into a scale with the catalog's modules. A pattern the catalog does not have takes the nearest family: circles HONEY or DOTS, a basket weave AR-PARQ1, wavy batting the `insulation` symbol.
4. **Pick the colours** — Fills, backgrounds and lines as `#RRGGBB`: near-black is `#000000`, near-white `#FFFFFF`, a scan's greys rounded to a few. A standard has a short palette. The image's colours replace the reference's white backgrounds.
5. **Read the texts and the marks** — The kind of lettering — sans serif, serif, technical, handwritten — gives the nearest family of the list; its height against the scale, the size; a box behind a note, `background`. The section markers' shape gives `marker_style`, the spot elevations' symbol their `marker_style` and `marker_side`.
6. **Write the charter, then the file** — For each material and each mark, what the image shows and the setting you chose; what the image does not show comes from the reference above, and the charter says so. Then apply it to the names of the list: an element the image draws in a material — the inner window board in bluestone — takes it even when its name does not say it.

> **What an image cannot say** — An image shows a look, not values: say how sure you are of each reading. A pattern too small to read, a colour shifted by a scan, a material the image does not show: ask for another image — a section and a plan show most materials — rather than guess.

## Before you hand it over

- [ ] The file is valid JSON: one object, no comments, no trailing commas.
- [ ] Every key under `objects_settings`, `sections_settings`, `annotations_settings` and `spot_elevations_settings` is a name of the list, written exactly.
- [ ] Every name of the list is styled, or reported with its reason.
- [ ] Every `…_layer_id`, `template` and line style points at an entry of the lists; ids are unique, and so are layer and line type names, ignoring case; no layer `0`.
- [ ] Every `symbol` is `none`, `cross` or `insulation`; every hatch is an id of the catalog; every colour is `#RRGGBB`.
- [ ] Text sizes, hatch scales, marker scales and the views' `pdf` follow one print scale; a note's size is a whole number.
- [ ] One material has one look, under every name that says it.

Occlusia checks the file as it is imported and refuses it whole if it breaks a rule, with a code from OC001 to OC508 (The .occc format, Errors). When the person gives you the codes back, correct exactly what each one says, and give the whole file again.

---

# The .occc format: The configuration file, key by key.

A configuration (.occc) is a JSON file: a project's layers, presets and line styles, and every setting it gives the objects, views, notes and spot elevations of a model. Its structure, each key and its default, the rules a file must respect and the errors that refuse one — to read a configuration, or to write one by hand, with a script or with an AI.

Source: https://occlusia.app/en/docs/occc-format

## What a configuration holds

A configuration holds a project's settings without its model: one JSON object, in UTF-8. **Export** › **Configuration (.occc)** writes it and **Import** › **Configuration (.occc)** reads it back; a project (`.occp`) carries the same object beside its model, and your default configuration is one too.

The same file works wherever Occlusia runs: in Occlusia Studio with **Import** › **Configuration (.occc)**, through the REST API with the `config.set` command, over MCP with the `config_set` tool. `config.validate` checks a file without applying it.

- Settings are stored by **name**: an object's settings sit under its name, as the model browser shows it, and apply to every object of that name in every view. Views, notes and spot elevations are stored by name too.
- A configuration states what differs from the defaults: a key left out takes the default given for it below.
- Layers, pattern presets and the project's own line weights and line types are defined once, in lists, and the settings point at them by their `id`.

- [The demo model's configuration](https://occlusia.app/docs/occc/demo-facade.occc) — The file every drawing of this documentation was made with, as Occlusia exported it.
- [JSON Schema](https://occlusia.app/docs/occc/occc.schema.json) — Every key with its type, its default and its rules, in JSON Schema 2020-12: for an editor that checks the file as you type, or for an AI.

## The structure

The file is one object. Occlusia writes its keys in this order, every list and every group of settings included, even when empty:

```json
{
  "author": "Occlusia",
  "app_version": "0.1.0",
  "app_build": "gbc7dba5",
  "snapshot_plugin_version": "0.1.0+gbc7dba5",
  "created_at": "2026-10-23 08:00:00",
  "saved_at": "2026-10-23 16:54:49",
  "project_layers": [ … ],
  "hatch_presets": [ … ],
  "line_weights": [ … ],
  "line_types": [ … ],
  "objects_settings": { "Facing brick": { … }, … },
  "sections_settings": { "Section A-A": { … }, … },
  "annotations_settings": { "Wall build-up": { … }, … },
  "spot_elevations_settings": { "Ground floor": { … }, … },
  "spot_elevation_datum": { "offset_m": 152.35, "label": "TAW" }
}
```

- `author · app_version · app_build` — Who wrote the file: `Occlusia`, its version and its build. Informational: never read.
- `snapshot_plugin_version` — What captured the model the settings were made on. Informational.
- `created_at · saved_at` — When the document was created and when this file was written, `YYYY-MM-DD HH:MM:SS` in local time. Informational.
- `project_layers` — The project's DXF layers: a list. See Layers.
- `hatch_presets` — The pattern presets: a list. See Pattern presets.
- `line_weights · line_types` — The project's own line weights and line types, beside the standard ones: two lists. See Line weights and line types.
- `objects_settings` — The objects' settings, by object name. See Objects.
- `sections_settings` — The views' settings, by view name. See Views.
- `annotations_settings` — The notes' settings, by note name. See Notes.
- `spot_elevations_settings` — The spot elevations' settings, by name. See Spot elevations.
- `spot_elevation_datum` — The altitude of the model's origin in the project's reference: `offset_m`, in metres, and `label`, written after an absolute value (`NGF`, `TAW`). 0 and empty by default.

## What a file must respect

A configuration is a file Occlusia writes. One written or edited elsewhere — by hand, by a script, by an AI — is checked when it is opened, and refused whole if it breaks a rule: nothing is half applied, the current settings stay, and the dialog lists every problem with its code (see Errors).

- **Ids are strict.** Every entry of the four lists needs an `id`, unique in its list. Layer and line type names must be unique too, ignoring case: a DXF knows a layer and a line type by its name.
- **The cut symbol is a closed word.** An object's `symbol` is `none`, `cross` or `insulation`; any other word refuses the file.
- **Every other value is free.** A key left out takes its default, `null` counts as left out, a value of the wrong type reads as the default, and a key Occlusia does not know is kept as it is and written back.
- **References fall back.** A setting that points at a layer the file does not define draws on layer `0`; one that points at a missing preset or line style takes the setting's default.
- **Names must match exactly.** Settings reach an object only if their key is its name, as the model browser shows it, capitals and spaces included. Settings for a name the model does not have are kept, unused.

> **Older spellings** — Files written by earlier versions are still read: `levels_settings` for `spot_elevations_settings`, `level_datum` for `spot_elevation_datum`, and a file whose keys are all object names, the objects' settings alone. The next save writes today's spelling.

## Layers

`project_layers` lists the project's own layers. The default layer, `0`, belongs to Occlusia: it is always there, never written, and no entry may claim it, by its id `layer_0` or by the name `0`.

```json
{
  "id": "layer_1761134408",
  "name": "A-WALL",
  "description": "Masonry",
  "color": "#D9483B",
  "line_weight": "50",
  "line_type": "solid",
  "transparency": 0,
  "active": true,
  "frozen": false,
  "locked": false,
  "plot": true
}
```

- `id` — Required. Text, unique in the list: what every `…_layer_id` points at. Occlusia writes `layer_` and a number.
- `name` — Required. The layer's name in the DXF: not blank, without spaces around it, unique ignoring case, never `0`.
- `description` — Free text. Empty by default.
- `color` — `#RRGGBB`. `#FFFFFF` by default.
- `line_weight` — `default`, or a lineweight in hundredths of a millimetre: `25` is 0.25 mm. `default` by default.
- `line_type` — `solid` by default, or another line type (see Line weights and line types).
- `transparency` — 0 to 100 %. 0 by default.
- `active · frozen · locked · plot` — On, frozen, locked, plotted: `true`, `false`, `false` and `true` by default.

## Pattern presets

`hatch_presets` lists the project's presets; `none` and `custom` are Occlusia's own and are never written. An object that uses a preset names it — `template` for its cut fill, `surface_template` for its surface fill — and keeps its own copy of the preset's values.

```json
{
  "id": "concrete",
  "label": "Concrete",
  "fill_pattern": "hatch_ar_conc",
  "color": "#000000",
  "color_bylayer": true,
  "bg": "#BBBBBB",
  "line_weight": "stroke-medium",
  "scale": 0.15,
  "angle": 0,
  "transparency": 0
}
```

- `id` — Required. Text, unique, never `none` or `custom`. Occlusia writes the name in lower case, `_` for spaces: `concrete_block`.
- `label` — The name the lists show.
- `fill_pattern` — `none`, `hatch_solid`, or a pattern: its name in the **Fill Type** list, in lower case after `hatch_`, a hyphen written `_` — ANSI31 is `hatch_ansi31`, AR-CONC is `hatch_ar_conc`.
- `color · color_bylayer` — The colour of the hatch lines or of the solid fill (`#000000`), and whether the DXF takes the layer's colour instead (`true`).
- `bg` — A solid colour behind the hatch, or `none` (the default).
- `line_weight` — The weight of the hatch lines: `stroke-hairline` by default.
- `scale · angle · transparency` — Size factor (1), rotation in degrees, counter-clockwise (0), transparency from 0 to 100 (0).

## Line weights and line types

Wherever a setting takes a line weight or a line type, it names a standard one or one of the project's own. The standard weights are `stroke-hairline` (0.13 mm), `stroke-thin` (0.25), `stroke-medium` (0.35), `stroke-bold` (0.50), `stroke-heavy` (0.70) and `stroke-ultra` (1.00); the standard types are `solid`, `dashed`, `dotted`, `dash-dot` and `long_dash`. An object's lines also take `none`: no line at all.

```json
"line_weights": [
  { "id": "stroke-custom-fine", "name": "Fine", "width": 0.18 }
],
"line_types": [
  { "id": "custom-hidden_edge", "name": "Hidden edge", "pattern": [3.0, -1.5] }
]
```

- `line_weights · id` — `stroke-custom-` followed by letters, digits, `_` or `-`; unique.
- `line_weights · name · width` — The name the lists show, and the width in millimetres, from 0.05 to 2.11 (AutoCAD's range). The DXF writes the nearest AutoCAD lineweight.
- `line_types · id` — `custom-` followed by letters, digits, `_` or `-`; unique.
- `line_types · name` — The line type's name in the DXF: unique ignoring case, without spaces around it, at most 255 bytes, with no character a DXF table refuses (< > / \ " : ; ? * | , = and the quotes), and not a name the DXF or Occlusia keeps: Continuous, ByLayer, ByBlock, a standard type's name, NONE.
- `line_types · pattern` — The dashes, in millimetres on the printed sheet, as AutoCAD writes them: a positive length is a dash, a negative one a gap, 0 a dot, twelve at most. `[3, -1.5]` is a 3 mm dash and a 1.5 mm gap.

## Objects

`objects_settings` holds one entry per object name, a group's included. Each object is drawn with its own entry: the interface writes a change made on a group into the entry of every object inside it, and a file written by hand does the same. Every key is optional. The demo model's `Facing brick`:

```json
"Facing brick": {
  "template": "custom",
  "fill_pattern": "hatch_ansi31",
  "cut_pattern_color": "#000000",
  "cut_pattern_color_bylayer": false,
  "cut_pattern_bg_color": "#f2d4a6",
  "cut_pattern_line_weight": "stroke-hairline",
  "cut_pattern_scale": 1.0,
  "cut_pattern_angle": 0,
  "cut_pattern_transparency": 0,
  "surface_template": "custom",
  "surface_hatch": "hatch_ar_brstd",
  "surf_pattern_color": "#000000",
  "surf_pattern_color_bylayer": false,
  "surf_pattern_bg_color": "#F2D4A6",
  "surf_pattern_line_weight": "stroke-hairline",
  "surf_pattern_scale": 0.11,
  "surf_pattern_angle": 0,
  "surf_pattern_transparency": 0,
  "cut_line_weight": "stroke-bold",
  "cut_layer_id": "layer_1761134408",
  "surf_layer_id": "layer_1761134408",
  "hatch_layer_id": "layer_1761134404"
}
```

**Lines.** The `cut_` keys style the outline where the view cuts the object, the `surf_` keys its edges seen beyond the plane.

- `cut_line_weight · surf_line_weight` — `stroke-thin` and `stroke-hairline` by default.
- `cut_line_type · surf_line_type` — `solid` by default; `none` draws no line.
- `cut_line_type_scale · surf_line_type_scale` — A factor on the type's dash lengths: 1 by default.
- `cut_line_color · surf_line_color` — `#000000` by default.
- `cut_line_transparency · surf_line_transparency` — 0 to 100: 0 by default.
- `…_bylayer` — Beside each colour, weight and type of lines, patterns and symbol: `true`, the default, lets the DXF take the layer's value. The SVG and the PDF always draw the object's.

**Fills.** The `cut_pattern_` keys fill the cut faces, the `surf_pattern_` keys the faces seen beyond the plane.

- `template · surface_template` — The preset of the cut fill and of the surface fill: `none` (the default), `custom` — the values below, bound to no preset — or a preset's `id`.
- `fill_pattern · surface_hatch` — The cut fill and the surface fill: `none` by default, `hatch_solid` or a pattern (see Pattern presets).
- `cut_pattern_color · surf_pattern_color` — The colour of the hatch lines or of the solid fill: `#000000`.
- `cut_pattern_bg_color · surf_pattern_bg_color` — A solid colour behind the hatch, or `none` (the default).
- `cut_pattern_line_weight · surf_pattern_line_weight` — The weight of the hatch lines: `stroke-hairline`.
- `cut_pattern_scale · surf_pattern_scale` — Size factor: 1.
- `cut_pattern_angle · surf_pattern_angle` — Rotation in degrees, counter-clockwise: 0.
- `cut_pattern_transparency · surf_pattern_transparency` — 0 to 100: 0.

**Symbol, layers and rendering.**

- `symbol` — `none` (the default), `cross` or `insulation` — nothing else: another word refuses the file.
- `symbol_line_weight · symbol_line_type · symbol_line_color · symbol_line_transparency` — The symbol's lines: `stroke-hairline`, `solid`, `#000000`, 0.
- `cut_layer_id · surf_layer_id · hatch_layer_id · cut_symbol_layer_id` — The DXF layers of the cut lines, the surface lines, the hatches and the symbol: a layer's `id`, `layer_0` by default.
- `draw_order` — Higher is drawn above: 0 by default.
- `export_block · block_name · block_layer_id` — Exports the object and what it contains as one block (`false`), its name — empty: the object's — and the layer of its insert (`layer_0`).
- `exclude_from_shadows` — No Shadows: casts none, receives none (`false`).
- `wireframe` — Drawn by its lines only (`false`).
- `hidden` — In every view: `true` hidden, `false` shown. Left out, the object is as the model shows it.

## Views

`sections_settings` holds one entry per view name: its marker, drawn in the other views, the visibility choices made in this view, its shadows and its PDF page.

```json
"South elevation": {
  "marker_style": "default",
  "marker_color": "#000000",
  "marker_number_color": "#000000",
  "marker_name_color": "#000000",
  "section_line_color": "#000000",
  "marker_layer_id": "layer_1761134400",
  "shadow": {
    "enabled": true,
    "sun_mode": "manual",
    "azimuth": 225,
    "altitude": 40,
    "interiors": false,
    "pattern": "default",
    "layer_id": "layer_1761134400"
  },
  "spot_elevations": { "Ground level": false, "Ceiling": false }
}
```

- `hidden` — `true` hides the view's marker in every other view.
- `marker_style` — `default` (a disc with the symbol and the name), `closed_arrow` or `open_arrow`.
- `marker_color · marker_number_color · marker_name_color` — The heads, the symbol and the name: `#0000FF` by default.
- `section_line_type · section_line_color` — The cut line: `dash-dot` and `#000000` by default.
- `marker_endpoints` — `both` (the default), `start`, `end` or `none`.
- `marker_show_number · marker_show_name` — Draw the symbol and the name: `true`.
- `marker_size_mode · marker_scale` — `auto` fits the marker to the drawing; `manual` keeps the size `marker_scale` (1).
- `marker_number_font_family · marker_number_font_size` — The symbol's font (`Arial`) and size factor (1). The same keys with `name` style the name.
- `marker_layer_id` — The marker's DXF layer: `layer_0`.
- `object_visibility` — This view's own choices, by object name: `true` shown here, `false` hidden here. They win over the objects' `hidden`.
- `spot_elevations` — The same for spot elevations, by name.
- `shadow` — `enabled` (`false`), `sun_mode` (`manual`), `azimuth` in degrees clockwise from north (135), `altitude` (45), `interiors` (`true`), `pattern` — `default` or a preset's `id` — and `layer_id`.
- `pdf` — `format` from `A4` to `A0` (`A4`), `orientation` `auto`, `portrait` or `landscape` (`auto`), `scale_mode` `fit` or `custom` at 1:`scale_denominator` (`fit`, 50), `margins_mm` (10), and `center`, the model point at the sheet's centre once the drawing has been moved on it.

## Notes

`annotations_settings` holds one entry per note name — the name the model gives the note (`OCCTAG#Name`), not the text it writes.

```json
"Wall build-up": {
  "font_family": "Arial",
  "font_size": 4,
  "font_style": "regular",
  "background": "drawing",
  "layer_id": "layer_1761134400"
}
```

- `hidden` — `true` hides the note in every view.
- `font_family · font_size · font_style` — `Arial`; the height of a capital letter, in centimetres of the model, read as a whole number (12); `regular`, `bold`, `italic` or `bold-italic`.
- `color · color_bylayer · transparency` — `#000000`, `true`, 0.
- `multiline · max_width` — Wrap the text at a width in centimetres of the model: `false`, 0.
- `show_leader` — Draw the leader when the model gives the note one: `true`.
- `background · background_color` — `none` (the default), `solid` — a box of `background_color`, `#FFFFFF` — or `drawing`, the drawing's own background.
- `layer_id` — The note's DXF layer: `layer_0`.

## Spot elevations

`spot_elevations_settings` holds one entry per spot elevation name (`OCCLEVEL#Name`).

```json
"Ground level": {
  "marker_style": "triangle_half",
  "value_font_size": 4.6,
  "name_font_size": 4.2,
  "layer_id": "layer_1761134400",
  "marker_side": "left",
  "size_mode": "manual",
  "scale": 2.0
}
```

- `hidden` — `true` hides it in every view; a view's `spot_elevations` choice wins.
- `marker_style · marker_side` — `triangle` (the default), `triangle_half`, `triangle_open` or `target`; the texts on the `right` (the default) or on the `left`.
- `marker_color · marker_line_weight` — The marker's fill (`#000000`) and the one weight of its lines (`stroke-hairline`).
- `size_mode · scale` — `auto`, or `manual` at `scale`, from 0.05 to 50 (1).
- `show_line · line_type · line_weight · line_color · line_length` — The elevation line: off (`false`), `dashed`, `stroke-hairline`, `#000000`, 20 cm of the model long — 0 draws none.
- `show_value · value_display` — Write the altitude (`true`): `relative`, the model's own height (+2.90), or `absolute`, that height plus `spot_elevation_datum`'s `offset_m`, followed by its `label`.
- `show_name` — Write the label: `true`.
- `value_font_family · value_font_size · value_font_style` — The altitude's text: `Arial`, 12, `bold`.
- `name_font_family · name_font_size · name_font_style` — The label's text: `Arial`, 12, `regular`.
- `value_color · name_color` — `#000000`.
- `marker_color_bylayer · line_color_bylayer · value_color_bylayer · name_color_bylayer` — One ByLayer decision per colour: `true`.
- `layer_id` — The DXF layer: `layer_0`.

## Writing a configuration with an AI

An AI can write a configuration — an office standard, a graphic standard read from an image, another software's styles carried over — once it knows the rules above, the names in your model and the scale you print at. Its brief has a page of its own.

- **For AI assistants** — The brief an AI follows to write a complete configuration: what it is given, one scale for every size, line weights, one hatch per material, the views, a standard read from an image. (https://occlusia.app/en/docs/ai-configuration)

## Errors

A refused file brings up **Cannot import this configuration.** — **Cannot open this project.** for a project, **Your default configuration was not loaded.** for the default one. Its details list each problem: the code, the entry, and why. A code never changes meaning.

- `OC001` — The file is not a configuration: its content is not a JSON object, or not readable JSON.
- `OC100` — `project_layers` is not a list.
- `OC101` — A layer is not an object.
- `OC102` — A layer has no `id`, or a blank one.
- `OC103` — Two layers share an `id`.
- `OC104` — A layer has no `name`, or a blank one.
- `OC105` — Two layers have the same name, ignoring case: in a DXF they would be one layer.
- `OC106` — A layer's name has spaces around it.
- `OC107` — An entry claims the default layer `0`, by the id `layer_0` or by the name `0`. Remove it: the default layer is never written.
- `OC200` — An object's `symbol` is not `none`, `cross` or `insulation`.
- `OC300` — `hatch_presets` is not a list.
- `OC301` — A preset is not an object.
- `OC302` — A preset has no `id`, or a blank one.
- `OC303` — Two presets share an `id`.
- `OC304` — A preset takes the id `none` or `custom`, which belong to Occlusia.
- `OC400` — `line_weights` is not a list.
- `OC401` — A line weight is not an object.
- `OC402` — A line weight's `id` is missing, or is not `stroke-custom-` followed by letters, digits, `_` or `-`.
- `OC403` — Two line weights share an `id`.
- `OC500` — `line_types` is not a list.
- `OC501` — A line type is not an object.
- `OC502` — A line type's `id` is missing, or is not `custom-` followed by letters, digits, `_` or `-`.
- `OC503` — Two line types share an `id`.
- `OC504` — A line type has no `name`, or a blank one.
- `OC505` — Two line types have the same name, ignoring case.
- `OC506` — A line type's name has spaces around it.
- `OC507` — A line type takes a name the DXF or Occlusia keeps: Continuous, ByLayer, ByBlock, a standard type's name, NONE.
- `OC508` — A line type's name holds a character a DXF table refuses, or is longer than 255 bytes.
