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:
| Profile | Description |
|---|---|
| D-Shape | Classic rounded exterior, flat interior |
| Flat | Flat exterior and interior |
| Comfort | Rounded on both exterior and interior |
| Knife Edge | Pointed peak on the exterior |
| Beveled | Angled flat facets on the exterior |
| Concave | Inward-curving exterior surface |
| Round | Fully 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:
base material → variant/quality → finish PMATExamples 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:
materials/<base>/<variant>/<finish>.pmatEach .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:
{
"name": "Yellow Gold",
"kind": "metal",
"usage": ["band", "inlay", "overlay", "sleeve"],
"defaultVariant": "18k",
"defaultFinish": "polished"
}| Role | Where it appears |
|---|---|
band | Main ring colour/body picker |
inlay | Inlay material picker |
overlay | Overlay material picker |
sleeve | Inside/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:
| Material | Usage |
|---|---|
| Yellow, White, and Rose Gold | band, inlay, overlay, sleeve |
| Carbon | band |
| Marble and Wood | inlay, overlay |
| Ceramic and Turquoise | sleeve |
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:
| Finish | Description |
|---|---|
| Polished | Mirror-smooth reflective surface |
| Hammered | Hand-hammered texture with organic dimples |
| Brush | Fine directional brushing lines |
| Ice | Crystalline frost-like texture |
| Nature | Organic bark like texture |
| Sand | Fine granular matte texture |
| Linear | Straight-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.pyderives 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.mjsscans the completed runtime tree, validates PMAT texture references, derives swatches and catalogs, then rewrites the material blocks in the developmentwedding-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:
"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
}
]
}| Field | Description |
|---|---|
id | Stable identifier, used by the API and for model swapping |
name | Display name shown in the picker and on selection |
file | The .glb model — absolute URL or relative to assetBaseUrl |
thumbnail | Preview image for the picker (optional; a generic glyph is shown without it) |
scaleAdjust | Optional 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
.glbwith 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 withMetal/Material). Those materials are swapped when the customer picks white, yellow, or rose gold — using the same.pmatfiles 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.
| Key | Controls | Entry shape |
|---|---|---|
settingTypes | Stone-setting types on top of the band | { id, name, iconUrl? } |
sideSettingTypes | Stone settings on the flat side face | { id, name, iconUrl? } |
diamondSpans | How far a stone run reaches around the ring | { id, name, iconUrl? } |
diamondSpacings | Gap rule between stones | { id, name, iconUrl? } |
diamondPositionSnaps | Snap presets above the fine-position slider | { id, name, value } |
eyeOrientations | Eye-setting orientations | { id, name, value } |
freeStonePresets | Curated free-stone patterns | { id, name, stones, iconUrl? } |
edgeTypes | Edge treatments applied to both edges | { id, name, iconUrl? } |
edgeSides | Which edges an edge treatment covers | { id, name, iconUrl? } |
sideEdgeTypes | Treatments for one independent edge | { id, name, iconUrl? } |
grooveTypes | Groove cross sections | { id, name, type?, angle?, iconUrl? } |
grooveFinishes | Interior finish of a groove or joint | { id, name, iconUrl? } |
grooveDirections | Groove direction around or across the band | { id, name, iconUrl? } |
divisionTypes | Color-division orientations | { id, name, partitionCount?, iconUrl? } |
relationshipPresets | Named segment-width ratios, such as 2:1:1 | { name, ratios } |
ringTypes | Ring 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.
{
"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.