Skip to content

Setting Up Assets on iJewel Platform ​

Before deploying your Wedding Band Builder, you need to configure all the building blocks on the iJewel platform. This page covers each asset type and how to prepare it.

When these assets are ready, Create a Project shows the complete creation flow, the generated folder structure, exact Sync rules, version migration, and which configuration fields Sync preserves.

2D Profiles ​

Profiles are 2D cross section curves that define the shape of the wedding band. The builder extrudes these curves along a circular torus path to generate the 3D ring geometry in real time.

The platform includes several built-in profiles:

ProfileDescription
D-ShapeClassic rounded exterior, flat interior
FlatFlat exterior and interior
ComfortRounded on both exterior and interior
Knife EdgePointed peak on the exterior
BeveledAngled flat facets on the exterior
ConcaveInward-curving exterior surface
RoundFully circular cross section

Custom profiles can be uploaded as .3dm (Rhino) files containing a single closed 2D curve. The curve defines the cross section shape, which the builder then extrudes and scales based on the user's width and thickness settings.

Custom profile upload needs the Silver plan or above. The profiles in the table above are the built-in library, available on every plan. See Create a Project for the upload steps.

WARNING

The 2D profile curve must be drawn in accurate millimeter dimensions. The engine uses the curve's actual size as the base measurement for width and thickness. If your profile is drawn at the wrong scale, all dimensions, weight calculations, and pricing will be incorrect.

Material Library ​

The material library models the real combinations your catalog offers instead of assuming a complete metal-by-finish grid:

text
base material → variant/quality → finish PMAT

Examples include Yellow Gold → 14k/18k/22k → Polished/Brush/Hammered, Carbon → pattern 1/pattern 2 → a single default PMAT, and Wood → species → a single default PMAT.

The standard Drive folder layout is:

text
materials/<base>/<variant>/<finish>.pmat

Each .pmat is a self-contained PBR material that controls color, reflectivity, roughness, maps, and embedded textures. Variant folder names are the qualities shown in the UI, so carat/karat choices belong between the base colour and surface finish axes rather than being encoded in the finish name.

Material roles ​

materials/<base>/material.json classifies a material:

json
{
  "name": "Yellow Gold",
  "kind": "metal",
  "usage": ["band", "inlay", "overlay", "sleeve"],
  "defaultVariant": "18k",
  "defaultFinish": "polished"
}
RoleWhere it appears
bandMain ring colour/body picker
inlayInlay material picker
overlayOverlay material picker
sleeveInside/bore sleeve picker

Omitting material.json does not prevent Sync, but the fallback exposes the material to every role. Always add metadata for role-specific materials.

The reference Viewer material library uses these classifications:

MaterialUsage
Yellow, White, and Rose Goldband, inlay, overlay, sleeve
Carbonband
Marble and Woodinlay, overlay
Ceramic and Turquoisesleeve

These roles explain why the main color picker can contain only the three gold colors and Carbon while the Outside and Inside pickers expose other materials.

Surface finishes ​

Surface finishes control the texture and appearance of the ring's exterior. Common finishes include:

FinishDescription
PolishedMirror-smooth reflective surface
HammeredHand-hammered texture with organic dimples
BrushFine directional brushing lines
IceCrystalline frost-like texture
NatureOrganic bark like texture
SandFine granular matte texture
LinearStraight-line brushing pattern

The PMAT filename is the finish ID. For example, materials/yellow/18k/hammered.pmat offers Hammered only for Yellow Gold 18k. The finishes/hammered/ Drive folder supplies its picker icon; it does not hold the PMAT.

Use default.pmat when a variant has no finish axis. Prefix a PMAT with _ when the renderer needs it structurally but it must stay out of the picker; _polished.pmat is the common polished-interior fallback. If an explicit polished.pmat also exists, it takes precedence.

Sources versus published assets ​

materials/_sources/ is optional authoring storage and is ignored by Drive Sync. It is not required on Packs/CDN and is never referenced by the runtime manifest. Publish only the current PMATs inside visible base/variant folders, plus their icons and metadata.

PMAT files are runtime assets, not JavaScript dependencies. Mini Viewer and Mini Editor builds contain URL strings, not the PMAT bytes. The browser loads the selected PMAT from iJewel Drive, Packs, or your CDN when required.

Reference repository material scripts

The Viewer development fixture has two maintainer scripts with different jobs:

  • materials/_sources/build-tree.py derives the reference runtime tree from authored PMAT sources. It creates gold karats, finish variants, role metadata, and hidden polished-interior files. It replaces generated gold PMAT files, so do not run it against a manually curated customer tree.
  • build-materials.mjs scans the completed runtime tree, validates PMAT texture references, derives swatches and catalogs, then rewrites the material blocks in the development wedding-band-project.json.

Drive users do not run either script. Drive Sync performs catalog publication from the uploaded folder tree. Neither script runs as part of a Mini Viewer or Mini Editor bundle build.

The reference gold catalog preserves brush and linear as separate saved finish IDs. It does not rename either one to satin. Ceramic can define its own independent satin.pmat finish.

Ring Catalog ​

Pre-modelled rings that customers can add to the compilation next to the parametric wedding bands. The catalog lives in the project manifest under ringCatalog, with one list per ring type:

json
"ringCatalog": {
  "engagement": [
    {
      "id": "ring-1",
      "name": "Solitaire I",
      "file": "engagement/ring-1.glb",
      "thumbnail": "engagement/ring-1.png"
    }
  ],
  "memoire": [
    {
      "id": "eternity-1",
      "name": "Eternity I",
      "file": "eternity/eternity-1.glb",
      "thumbnail": "eternity/eternity-1.png",
      "scaleAdjust": 1.12
    }
  ]
}
FieldDescription
idStable identifier, used by the API and for model swapping
nameDisplay name shown in the picker and on selection
fileThe .glb model — absolute URL or relative to assetBaseUrl
thumbnailPreview image for the picker (optional; a generic glyph is shown without it)
scaleAdjustOptional multiplier on the automatic size matching. Use when the model's bounding box overstates the hoop — for example, eternity prongs pointing outward

Preparing the models:

  • Export as .glb with real-world millimeter dimensions. The builder auto-scales each model so its hoop matches the wedding bands, but sane authoring scale keeps the measurement logs meaningful
  • Name the metal material Metal (or any name starting with Metal/Material). Those materials are swapped when the customer picks white, yellow, or rose gold — using the same .pmat files as the wedding bands, so colors always match
  • Leave diamond materials unnamed or gem-named and apply the diamond material before export. Every stone mesh must have it — a stone left on the metal material will be recolored with the metal
  • Merging all stones into one mesh (or instancing one stone) keeps files small and loading fast

Option Catalogs ​

Every option list the UI shows has a built-in default. A manifest key overrides one list. Omit the key and the built-in catalog applies, so a project declares only the lists it wants to rename, reorder, or restrict.

Each entry round-trips through the project JSON, so the Mini Editor can edit any value here and editor.getConfig() persists it.

KeyControlsEntry shape
settingTypesStone-setting types on top of the band{ id, name, iconUrl? }
sideSettingTypesStone settings on the flat side face{ id, name, iconUrl? }
diamondSpansHow far a stone run reaches around the ring{ id, name, iconUrl? }
diamondSpacingsGap rule between stones{ id, name, iconUrl? }
diamondPositionSnapsSnap presets above the fine-position slider{ id, name, value }
eyeOrientationsEye-setting orientations{ id, name, value }
freeStonePresetsCurated free-stone patterns{ id, name, stones, iconUrl? }
edgeTypesEdge treatments applied to both edges{ id, name, iconUrl? }
edgeSidesWhich edges an edge treatment covers{ id, name, iconUrl? }
sideEdgeTypesTreatments for one independent edge{ id, name, iconUrl? }
grooveTypesGroove cross sections{ id, name, type?, angle?, iconUrl? }
grooveFinishesInterior finish of a groove or joint{ id, name, iconUrl? }
grooveDirectionsGroove direction around or across the band{ id, name, iconUrl? }
divisionTypesColor-division orientations{ id, name, partitionCount?, iconUrl? }
relationshipPresetsNamed segment-width ratios, such as 2:1:1{ name, ratios }
ringTypesRing types a compilation accepts{ id, name, iconUrl? }

id is the value the API accepts, and name is the label the UI prints. A grooveTypes entry adds type, which names the engine groove, and angle, which sets the opening angle of a V groove. A divisionTypes entry adds partitionCount to restrict an option to one exact partition count.

json
{
  "grooveTypes": [
    { "id": "v60", "name": "V 60°", "type": "v", "angle": 60 },
    { "id": "u", "name": "U-round", "type": "u" },
    { "id": "convex-u", "name": "Dome", "type": "convex-u" }
  ],
  "relationshipPresets": [
    { "name": "Even", "ratios": [1, 1] },
    { "name": "Wide left", "ratios": [2, 1] }
  ]
}

Read any catalog back at runtime with its matching getAvailable…() method. See the API reference.

Scene Settings ​

Scene settings control the 3D preview environment:

  • Lighting controls the environment map, light intensity, and shadows
  • Camera sets the default viewing angle, zoom level, and orbit constraints
  • Ground configures the ground plane appearance and shadow baking
  • Post-processing handles tone mapping, bloom, and other visual effects

Scene settings are stored as .vjson files and can be configured through the iJewel platform or uploaded directly.

The manifest points at that file with the sceneSettings key, which holds a URL, absolute or relative to assetBaseUrl.

Pricing Configuration ​

Pricing parameters determine how ring prices are calculated based on material weight and diamond specifications:

  • Metal prices set the price per unit for each metal type (supports grams, ounces, and troy ounces)
  • Metal density is the density in g/cm3 for accurate weight calculation (e.g., 15.5 for 18K gold)
  • Diamond pricing sets the price per carat for diamond settings
  • Markup is a multiplier applied to the subtotal

For programmatic pricing control, see the Pricing API.

Continue on iJewel3D

See Create a Project for step-by-step project creation and folder-backed catalog management. For help preparing custom assets, contact contact@ijewel3d.com.