[{"data":1,"prerenderedAt":2622},["ShallowReactive",2],{"$f-tAJGCPz9HG340SHFeHKShCwdloRdr8VPh8MwjJ8vdY":3},{"newThing":4,"project":5,"cycle":9,"sections":23,"threads":2556,"otherDocs":2557,"documents":2559,"images":2562,"archiveItems":2618,"links":2619},"MagicaVoxel .obj actor models — palette-aware import and lighting studies",{"id":6,"label":7,"liveBase":8},"qmap","Qmap",null,{"id":10,"num":11,"dir":12,"name":13,"title":13,"focus":14,"status":15,"statusNote":8,"created":16,"completed":8,"mode":8,"report":8,"recordless":17,"thumbnail":18,"imageCount":19,"artifactCount":20,"lastActivity":21,"hasPickup":17,"hasInitialPrompt":22},"c23",23,"c23.custom-obj-models","custom-obj-models","Validate import, normalization, and rendering of custom `.obj` actor models in qmap","active","2026-04-17",false,"\u002Fcycles\u002Fqmap\u002Fc23-cowboy.png",13,1,"2026-08-15",true,[24,84,129,226,363,396,451,901,1267,1364,1479,1757,1921,2044,2111,2182,2487],{"key":25,"title":26,"empty":17,"ast":27},"why","Why",{"type":28,"children":29},"root",[30,38,52,57],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35],{"type":36,"value":37},"text","The current actor meshes are intentionally simple geometric stand-ins. They have been good enough for layout, grouping, and flow experiments, but they do not answer the next visual question: how well does qmap hold up when actors are represented by real 3D assets with irregular silhouettes, custom proportions, and more demanding lighting?",{"type":31,"tag":32,"props":39,"children":40},{},[41,43,50],{"type":36,"value":42},"This cycle exists to prove the full path from a hand-authored ",{"type":31,"tag":44,"props":45,"children":47},"code",{"className":46},[],[48],{"type":36,"value":49},".obj",{"type":36,"value":51}," file to an in-scene qmap actor. It should also answer a second design question: what combination of material treatment and lighting makes custom models feel readable in qmap's isometric scene without losing the crisp, diagrammatic quality of the map.",{"type":31,"tag":32,"props":53,"children":54},{},[55],{"type":36,"value":56},"This is adjacent to:",{"type":31,"tag":58,"props":59,"children":60},"ul",{},[61,73],{"type":31,"tag":62,"props":63,"children":64},"li",{},[65,71],{"type":31,"tag":44,"props":66,"children":68},{"className":67},[],[69],{"type":36,"value":70},"c2.entity-meshes",{"type":36,"value":72},", which established the current primitive-mesh vocabulary",{"type":31,"tag":62,"props":74,"children":75},{},[76,82],{"type":31,"tag":44,"props":77,"children":79},{"className":78},[],[80],{"type":36,"value":81},"c14.actor-expansion",{"type":36,"value":83},", which expanded actor types but still used procedural geometry",{"key":85,"title":86,"empty":17,"ast":87},"objective","Objective",{"type":28,"children":88},[89,94],{"type":31,"tag":32,"props":90,"children":91},{},[92],{"type":36,"value":93},"One runnable experiment that:",{"type":31,"tag":58,"props":95,"children":96},{},[97,109,114,119,124],{"type":31,"tag":62,"props":98,"children":99},{},[100,102,107],{"type":36,"value":101},"Loads at least one custom ",{"type":31,"tag":44,"props":103,"children":105},{"className":104},[],[106],{"type":36,"value":49},{"type":36,"value":108}," file into the scene as an actor mesh",{"type":31,"tag":62,"props":110,"children":111},{},[112],{"type":36,"value":113},"Supports a round-trip asset workflow where the supplied test model can be swapped and reloaded without changing scene logic",{"type":31,"tag":62,"props":115,"children":116},{},[117],{"type":36,"value":118},"Compares a small set of lighting presets in the same scene",{"type":31,"tag":62,"props":120,"children":121},{},[122],{"type":36,"value":123},"Compares at least three color\u002Fmaterial strategies for imported models",{"type":31,"tag":62,"props":125,"children":126},{},[127],{"type":36,"value":128},"Identifies the minimum reusable abstraction needed to bring custom-model actors into mainline qmap without destabilizing existing primitive actors",{"key":130,"title":131,"empty":17,"ast":132},"scope","Scope",{"type":28,"children":133},[134],{"type":31,"tag":58,"props":135,"children":136},{},[137,148,159,185,196,215],{"type":31,"tag":62,"props":138,"children":139},{},[140,146],{"type":31,"tag":44,"props":141,"children":143},{"className":142},[],[144],{"type":36,"value":145},"dev\u002Fexperiments\u002Fc23.custom-obj-models\u002FExperimentsApp.vue",{"type":36,"value":147}," — dedicated model-import and look-dev experiment",{"type":31,"tag":62,"props":149,"children":150},{},[151,157],{"type":31,"tag":44,"props":152,"children":154},{"className":153},[],[155],{"type":36,"value":156},"dev\u002Fexperiments\u002Fc23.custom-obj-models\u002Fshared\u002F",{"type":36,"value":158}," — asset manifest, fixture actors, lighting\u002Fmaterial presets, and helpers",{"type":31,"tag":62,"props":160,"children":161},{},[162,168,170,175,177,183],{"type":31,"tag":44,"props":163,"children":165},{"className":164},[],[166],{"type":36,"value":167},"dev\u002Fexperiments\u002Fc23.custom-obj-models\u002Fassets\u002F",{"type":36,"value":169}," — local test ",{"type":31,"tag":44,"props":171,"children":173},{"className":172},[],[174],{"type":36,"value":49},{"type":36,"value":176}," files and optional companion ",{"type":31,"tag":44,"props":178,"children":180},{"className":179},[],[181],{"type":36,"value":182},".mtl",{"type":36,"value":184}," files or textures",{"type":31,"tag":62,"props":186,"children":187},{},[188,194],{"type":31,"tag":44,"props":189,"children":191},{"className":190},[],[192],{"type":36,"value":193},"inbox\u002Fvox-exports-2\u002F",{"type":36,"value":195}," — source MagicaVoxel export set provided for import validation",{"type":31,"tag":62,"props":197,"children":198},{},[199,205,207,213],{"type":31,"tag":44,"props":200,"children":202},{"className":201},[],[203],{"type":36,"value":204},"src\u002Fentities\u002F",{"type":36,"value":206}," — only if the experiment proves a reusable ",{"type":31,"tag":44,"props":208,"children":210},{"className":209},[],[211],{"type":36,"value":212},"CustomModelMesh",{"type":36,"value":214}," or equivalent factory seam is warranted",{"type":31,"tag":62,"props":216,"children":217},{},[218,224],{"type":31,"tag":44,"props":219,"children":221},{"className":220},[],[222],{"type":36,"value":223},"cycles\u002Fc23.custom-obj-models\u002F",{"type":36,"value":225}," — cycle metadata",{"key":227,"title":228,"empty":17,"ast":229},"key-changes","Deliverables",{"type":28,"children":230},[231,309,314],{"type":31,"tag":58,"props":232,"children":233},{},[234,254,280],{"type":31,"tag":62,"props":235,"children":236},{},[237,243],{"type":31,"tag":238,"props":239,"children":240},"strong",{},[241],{"type":36,"value":242},"Runnable experiment",{"type":31,"tag":58,"props":244,"children":245},{},[246],{"type":31,"tag":62,"props":247,"children":248},{},[249],{"type":31,"tag":44,"props":250,"children":252},{"className":251},[],[253],{"type":36,"value":145},{"type":31,"tag":62,"props":255,"children":256},{},[257,262],{"type":31,"tag":238,"props":258,"children":259},{},[260],{"type":36,"value":261},"Asset manifest + fixtures",{"type":31,"tag":58,"props":263,"children":264},{},[265,270,275],{"type":31,"tag":62,"props":266,"children":267},{},[268],{"type":36,"value":269},"One or more actors configured to load the supplied test model",{"type":31,"tag":62,"props":271,"children":272},{},[273],{"type":36,"value":274},"Lighting preset definitions",{"type":31,"tag":62,"props":276,"children":277},{},[278],{"type":36,"value":279},"Material\u002Fcolor strategy definitions",{"type":31,"tag":62,"props":281,"children":282},{},[283,288],{"type":31,"tag":238,"props":284,"children":285},{},[286],{"type":36,"value":287},"Cycle metadata",{"type":31,"tag":58,"props":289,"children":290},{},[291,300],{"type":31,"tag":62,"props":292,"children":293},{},[294],{"type":31,"tag":44,"props":295,"children":297},{"className":296},[],[298],{"type":36,"value":299},"cycles\u002Fc23.custom-obj-models\u002FCYCLE.md",{"type":31,"tag":62,"props":301,"children":302},{},[303],{"type":31,"tag":44,"props":304,"children":306},{"className":305},[],[307],{"type":36,"value":308},"cycles\u002Fc23.custom-obj-models\u002Finitial-prompt.md",{"type":31,"tag":32,"props":310,"children":311},{},[312],{"type":36,"value":313},"Optional if the experiment proves it out:",{"type":31,"tag":58,"props":315,"children":316},{},[317,339],{"type":31,"tag":62,"props":318,"children":319},{},[320,325],{"type":31,"tag":238,"props":321,"children":322},{},[323],{"type":36,"value":324},"Reusable model mesh abstraction",{"type":31,"tag":58,"props":326,"children":327},{},[328],{"type":31,"tag":62,"props":329,"children":330},{},[331,333],{"type":36,"value":332},"Example: ",{"type":31,"tag":44,"props":334,"children":336},{"className":335},[],[337],{"type":36,"value":338},"src\u002Fentities\u002FCustomModelMesh.js",{"type":31,"tag":62,"props":340,"children":341},{},[342,347],{"type":31,"tag":238,"props":343,"children":344},{},[345],{"type":36,"value":346},"Configurable lighting seam",{"type":31,"tag":58,"props":348,"children":349},{},[350],{"type":31,"tag":62,"props":351,"children":352},{},[353,355,361],{"type":36,"value":354},"Example: experiment-only wrapper first, then a narrow ",{"type":31,"tag":44,"props":356,"children":358},{"className":357},[],[359],{"type":36,"value":360},"QMap",{"type":36,"value":362}," prop if it earns promotion",{"key":364,"title":365,"empty":17,"ast":366},"extra","Non-Goals",{"type":28,"children":367},[368],{"type":31,"tag":58,"props":369,"children":370},{},[371,376,381,386,391],{"type":31,"tag":62,"props":372,"children":373},{},[374],{"type":36,"value":375},"Full asset-pipeline generalization for every 3D format",{"type":31,"tag":62,"props":377,"children":378},{},[379],{"type":36,"value":380},"Skeletal animation, rigging, or animated model playback",{"type":31,"tag":62,"props":382,"children":383},{},[384],{"type":36,"value":385},"Production-ready asset compression or optimization tooling",{"type":31,"tag":62,"props":387,"children":388},{},[389],{"type":36,"value":390},"Replacing all existing actor types with imported models during this cycle",{"type":31,"tag":62,"props":392,"children":393},{},[394],{"type":36,"value":395},"Final art direction for the entire product",{"key":364,"title":397,"empty":17,"ast":398},"Asset Contract To Validate",{"type":28,"children":399},[400,405,418,423,446],{"type":31,"tag":32,"props":401,"children":402},{},[403],{"type":36,"value":404},"The experiment should validate a small, explicit contract for imported models. An actor should be able to declare something close to:",{"type":31,"tag":406,"props":407,"children":413},"pre",{"className":408,"code":409,"language":410,"meta":411,"style":412},"language-js","{\n  id: 'actor-1',\n  type: 'app',\n  label: 'Custom App',\n  model: {\n    kind: 'obj',\n    src: '\u002Fdev\u002Fexperiments\u002Fc23.custom-obj-models\u002Fassets\u002Ftest-model.obj',\n    mtl: null,\n    scale: 1,\n    recenter: true,\n    normalizeSize: true,\n    rotation: [0, 0, 0],\n    offset: [0, 0, 0],\n    materialMode: 'override',\n  },\n}\n","js","","undefined",[414],{"type":31,"tag":44,"props":415,"children":416},{"__ignoreMap":411},[417],{"type":36,"value":409},{"type":31,"tag":32,"props":419,"children":420},{},[421],{"type":36,"value":422},"The exact shape can change, but this cycle should settle the important decisions:",{"type":31,"tag":58,"props":424,"children":425},{},[426,431,436,441],{"type":31,"tag":62,"props":427,"children":428},{},[429],{"type":36,"value":430},"where the model descriptor lives",{"type":31,"tag":62,"props":432,"children":433},{},[434],{"type":36,"value":435},"how scale\u002Forigin normalization works",{"type":31,"tag":62,"props":437,"children":438},{},[439],{"type":36,"value":440},"when source materials are respected vs overridden",{"type":31,"tag":62,"props":442,"children":443},{},[444],{"type":36,"value":445},"how imported meshes inherit qmap state colors and opacity changes",{"type":31,"tag":447,"props":448,"children":449},"style",{},[450],{"type":36,"value":411},{"key":364,"title":452,"empty":17,"ast":453},"Provided Asset Set",{"type":28,"children":454},[455,460,471,476,733,738,804,809,853,858],{"type":31,"tag":32,"props":456,"children":457},{},[458],{"type":36,"value":459},"Primary source assets for this cycle now live in:",{"type":31,"tag":58,"props":461,"children":462},{},[463],{"type":31,"tag":62,"props":464,"children":465},{},[466],{"type":31,"tag":44,"props":467,"children":469},{"className":468},[],[470],{"type":36,"value":193},{"type":31,"tag":32,"props":472,"children":473},{},[474],{"type":36,"value":475},"Current inventory:",{"type":31,"tag":58,"props":477,"children":478},{},[479,502,523,544,565,586,607,628,649,670,691,712],{"type":31,"tag":62,"props":480,"children":481},{},[482,488,490,495,496],{"type":31,"tag":44,"props":483,"children":485},{"className":484},[],[486],{"type":36,"value":487},"Abstract Monsters.obj",{"type":36,"value":489}," + ",{"type":31,"tag":44,"props":491,"children":493},{"className":492},[],[494],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":497,"children":499},{"className":498},[],[500],{"type":36,"value":501},".png",{"type":31,"tag":62,"props":503,"children":504},{},[505,511,512,517,518],{"type":31,"tag":44,"props":506,"children":508},{"className":507},[],[509],{"type":36,"value":510},"Bob Wire (Cowboy).obj",{"type":36,"value":489},{"type":31,"tag":44,"props":513,"children":515},{"className":514},[],[516],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":519,"children":521},{"className":520},[],[522],{"type":36,"value":501},{"type":31,"tag":62,"props":524,"children":525},{},[526,532,533,538,539],{"type":31,"tag":44,"props":527,"children":529},{"className":528},[],[530],{"type":36,"value":531},"Bob Wire (Sheriff).obj",{"type":36,"value":489},{"type":31,"tag":44,"props":534,"children":536},{"className":535},[],[537],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":540,"children":542},{"className":541},[],[543],{"type":36,"value":501},{"type":31,"tag":62,"props":545,"children":546},{},[547,553,554,559,560],{"type":31,"tag":44,"props":548,"children":550},{"className":549},[],[551],{"type":36,"value":552},"Eye Monsters.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":555,"children":557},{"className":556},[],[558],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":561,"children":563},{"className":562},[],[564],{"type":36,"value":501},{"type":31,"tag":62,"props":566,"children":567},{},[568,574,575,580,581],{"type":31,"tag":44,"props":569,"children":571},{"className":570},[],[572],{"type":36,"value":573},"Helpers.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":576,"children":578},{"className":577},[],[579],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":582,"children":584},{"className":583},[],[585],{"type":36,"value":501},{"type":31,"tag":62,"props":587,"children":588},{},[589,595,596,601,602],{"type":31,"tag":44,"props":590,"children":592},{"className":591},[],[593],{"type":36,"value":594},"Intern.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":597,"children":599},{"className":598},[],[600],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":603,"children":605},{"className":604},[],[606],{"type":36,"value":501},{"type":31,"tag":62,"props":608,"children":609},{},[610,616,617,622,623],{"type":31,"tag":44,"props":611,"children":613},{"className":612},[],[614],{"type":36,"value":615},"Manager.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":618,"children":620},{"className":619},[],[621],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":624,"children":626},{"className":625},[],[627],{"type":36,"value":501},{"type":31,"tag":62,"props":629,"children":630},{},[631,637,638,643,644],{"type":31,"tag":44,"props":632,"children":634},{"className":633},[],[635],{"type":36,"value":636},"Monsters.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":639,"children":641},{"className":640},[],[642],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":645,"children":647},{"className":646},[],[648],{"type":36,"value":501},{"type":31,"tag":62,"props":650,"children":651},{},[652,658,659,664,665],{"type":31,"tag":44,"props":653,"children":655},{"className":654},[],[656],{"type":36,"value":657},"Mouse&Pointer.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":660,"children":662},{"className":661},[],[663],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":666,"children":668},{"className":667},[],[669],{"type":36,"value":501},{"type":31,"tag":62,"props":671,"children":672},{},[673,679,680,685,686],{"type":31,"tag":44,"props":674,"children":676},{"className":675},[],[677],{"type":36,"value":678},"Puzzle.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":681,"children":683},{"className":682},[],[684],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":687,"children":689},{"className":688},[],[690],{"type":36,"value":501},{"type":31,"tag":62,"props":692,"children":693},{},[694,700,701,706,707],{"type":31,"tag":44,"props":695,"children":697},{"className":696},[],[698],{"type":36,"value":699},"Receptionist.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":702,"children":704},{"className":703},[],[705],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":708,"children":710},{"className":709},[],[711],{"type":36,"value":501},{"type":31,"tag":62,"props":713,"children":714},{},[715,721,722,727,728],{"type":31,"tag":44,"props":716,"children":718},{"className":717},[],[719],{"type":36,"value":720},"Robot.obj",{"type":36,"value":489},{"type":31,"tag":44,"props":723,"children":725},{"className":724},[],[726],{"type":36,"value":182},{"type":36,"value":489},{"type":31,"tag":44,"props":729,"children":731},{"className":730},[],[732],{"type":36,"value":501},{"type":31,"tag":32,"props":734,"children":735},{},[736],{"type":36,"value":737},"Deferred variant exports now present in the same folder but intentionally excluded from the\nstable 12-asset manifest for this pass:",{"type":31,"tag":58,"props":739,"children":740},{},[741,750,759,768,777,786,795],{"type":31,"tag":62,"props":742,"children":743},{},[744],{"type":31,"tag":44,"props":745,"children":747},{"className":746},[],[748],{"type":36,"value":749},"Intern Type1\u002F2\u002F3",{"type":31,"tag":62,"props":751,"children":752},{},[753],{"type":31,"tag":44,"props":754,"children":756},{"className":755},[],[757],{"type":36,"value":758},"Receptionist Hair\u002FBald",{"type":31,"tag":62,"props":760,"children":761},{},[762],{"type":31,"tag":44,"props":763,"children":765},{"className":764},[],[766],{"type":36,"value":767},"Mouse",{"type":31,"tag":62,"props":769,"children":770},{},[771],{"type":31,"tag":44,"props":772,"children":774},{"className":773},[],[775],{"type":36,"value":776},"Pointer",{"type":31,"tag":62,"props":778,"children":779},{},[780],{"type":31,"tag":44,"props":781,"children":783},{"className":782},[],[784],{"type":36,"value":785},"Abs Mon Green\u002FPurple\u002FWhite",{"type":31,"tag":62,"props":787,"children":788},{},[789],{"type":31,"tag":44,"props":790,"children":792},{"className":791},[],[793],{"type":36,"value":794},"Eye Mon Green\u002FPurple\u002FRed",{"type":31,"tag":62,"props":796,"children":797},{},[798],{"type":31,"tag":44,"props":799,"children":801},{"className":800},[],[802],{"type":36,"value":803},"Monster Green\u002FPurple\u002FRed",{"type":31,"tag":32,"props":805,"children":806},{},[807],{"type":36,"value":808},"Observed characteristics of this export set:",{"type":31,"tag":58,"props":810,"children":811},{},[812,817,830,843,848],{"type":31,"tag":62,"props":813,"children":814},{},[815],{"type":36,"value":816},"Exporter: MagicaVoxel",{"type":31,"tag":62,"props":818,"children":819},{},[820,822,828],{"type":36,"value":821},"Material shape: one ",{"type":31,"tag":44,"props":823,"children":825},{"className":824},[],[826],{"type":36,"value":827},"palette",{"type":36,"value":829}," material per model",{"type":31,"tag":62,"props":831,"children":832},{},[833,835,841],{"type":36,"value":834},"Texture shape: one ",{"type":31,"tag":44,"props":836,"children":838},{"className":837},[],[839],{"type":36,"value":840},"256x1",{"type":36,"value":842}," RGBA palette PNG per model",{"type":31,"tag":62,"props":844,"children":845},{},[846],{"type":36,"value":847},"Geometry character: low-poly voxel surfaces with very few UV rows and only six normal directions",{"type":31,"tag":62,"props":849,"children":850},{},[851],{"type":36,"value":852},"Filename character: several assets include spaces and parentheses, so path handling must be tested directly rather than normalized away",{"type":31,"tag":32,"props":854,"children":855},{},[856],{"type":36,"value":857},"Initial rendering implications:",{"type":31,"tag":58,"props":859,"children":860},{},[861,866,878,883],{"type":31,"tag":62,"props":862,"children":863},{},[864],{"type":36,"value":865},"preserve palette crispness with nearest-neighbor texture filtering",{"type":31,"tag":62,"props":867,"children":868},{},[869,871,876],{"type":36,"value":870},"treat ",{"type":31,"tag":44,"props":872,"children":874},{"className":873},[],[875],{"type":36,"value":182},{"type":36,"value":877}," + palette texture loading as part of the baseline path, not a stretch goal",{"type":31,"tag":62,"props":879,"children":880},{},[881],{"type":36,"value":882},"normalize scale and origin per asset because sizes vary significantly across the set",{"type":31,"tag":62,"props":884,"children":885},{},[886,888,893,895],{"type":36,"value":887},"verify whether imported assets sit on the ground plane consistently; at least one asset (",{"type":31,"tag":44,"props":889,"children":891},{"className":890},[],[892],{"type":36,"value":720},{"type":36,"value":894},") appears slightly elevated above ",{"type":31,"tag":44,"props":896,"children":898},{"className":897},[],[899],{"type":36,"value":900},"y = 0",{"key":364,"title":902,"empty":17,"ast":903},"Asset-Specific Rendering Plan",{"type":28,"children":904},[905,910,917,922,941,946,969,974,1007,1013,1018,1037,1042,1065,1069,1087,1093,1098,1117,1122,1140,1144,1157,1163,1168,1195,1200,1227,1232,1245,1249],{"type":31,"tag":32,"props":906,"children":907},{},[908],{"type":36,"value":909},"This cycle should not treat the provided files as generic placeholders. Use the set intentionally, in passes that answer different questions.",{"type":31,"tag":911,"props":912,"children":914},"h3",{"id":913},"pass-1-baseline-import-pair",[915],{"type":36,"value":916},"Pass 1: Baseline Import Pair",{"type":31,"tag":32,"props":918,"children":919},{},[920],{"type":36,"value":921},"Start with two simpler human-scale assets:",{"type":31,"tag":58,"props":923,"children":924},{},[925,933],{"type":31,"tag":62,"props":926,"children":927},{},[928],{"type":31,"tag":44,"props":929,"children":931},{"className":930},[],[932],{"type":36,"value":615},{"type":31,"tag":62,"props":934,"children":935},{},[936],{"type":31,"tag":44,"props":937,"children":939},{"className":938},[],[940],{"type":36,"value":531},{"type":31,"tag":32,"props":942,"children":943},{},[944],{"type":36,"value":945},"Why these first:",{"type":31,"tag":58,"props":947,"children":948},{},[949,954,959,964],{"type":31,"tag":62,"props":950,"children":951},{},[952],{"type":36,"value":953},"compact geometry",{"type":31,"tag":62,"props":955,"children":956},{},[957],{"type":36,"value":958},"lower face counts",{"type":31,"tag":62,"props":960,"children":961},{},[962],{"type":36,"value":963},"easy to visually inspect for orientation, palette sampling, and label placement",{"type":31,"tag":62,"props":965,"children":966},{},[967],{"type":36,"value":968},"good first test for whether the imported-model wrapper feels comparable to existing actor scale",{"type":31,"tag":32,"props":970,"children":971},{},[972],{"type":36,"value":973},"Goal of this pass:",{"type":31,"tag":58,"props":975,"children":976},{},[977,997,1002],{"type":31,"tag":62,"props":978,"children":979},{},[980,982,988,989,995],{"type":36,"value":981},"prove ",{"type":31,"tag":44,"props":983,"children":985},{"className":984},[],[986],{"type":36,"value":987},"OBJLoader",{"type":36,"value":489},{"type":31,"tag":44,"props":990,"children":992},{"className":991},[],[993],{"type":36,"value":994},"MTLLoader",{"type":36,"value":996}," + palette PNG loading",{"type":31,"tag":62,"props":998,"children":999},{},[1000],{"type":36,"value":1001},"confirm upright orientation and ground contact",{"type":31,"tag":62,"props":1003,"children":1004},{},[1005],{"type":36,"value":1006},"verify nearest-filter palette rendering",{"type":31,"tag":911,"props":1008,"children":1010},{"id":1009},"pass-2-hero-character-pair",[1011],{"type":36,"value":1012},"Pass 2: Hero Character Pair",{"type":31,"tag":32,"props":1014,"children":1015},{},[1016],{"type":36,"value":1017},"Promote to more detailed representative assets:",{"type":31,"tag":58,"props":1019,"children":1020},{},[1021,1029],{"type":31,"tag":62,"props":1022,"children":1023},{},[1024],{"type":31,"tag":44,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":36,"value":699},{"type":31,"tag":62,"props":1030,"children":1031},{},[1032],{"type":31,"tag":44,"props":1033,"children":1035},{"className":1034},[],[1036],{"type":36,"value":720},{"type":31,"tag":32,"props":1038,"children":1039},{},[1040],{"type":36,"value":1041},"Why these next:",{"type":31,"tag":58,"props":1043,"children":1044},{},[1045,1050,1055,1060],{"type":31,"tag":62,"props":1046,"children":1047},{},[1048],{"type":36,"value":1049},"more visually distinctive silhouettes",{"type":31,"tag":62,"props":1051,"children":1052},{},[1053],{"type":36,"value":1054},"higher geometric complexity",{"type":31,"tag":62,"props":1056,"children":1057},{},[1058],{"type":36,"value":1059},"likely good candidates for presentation-grade screenshots",{"type":31,"tag":62,"props":1061,"children":1062},{},[1063],{"type":36,"value":1064},"strong test for lighting, especially readable front\u002Fside planes and shadow noise",{"type":31,"tag":32,"props":1066,"children":1067},{},[1068],{"type":36,"value":973},{"type":31,"tag":58,"props":1070,"children":1071},{},[1072,1077,1082],{"type":31,"tag":62,"props":1073,"children":1074},{},[1075],{"type":36,"value":1076},"tune normalization and scale rules on larger assets",{"type":31,"tag":62,"props":1078,"children":1079},{},[1080],{"type":36,"value":1081},"compare source-material vs override-material strategies",{"type":31,"tag":62,"props":1083,"children":1084},{},[1085],{"type":36,"value":1086},"validate whether the current label offset logic still works on taller meshes",{"type":31,"tag":911,"props":1088,"children":1090},{"id":1089},"pass-3-stylized-non-humanoid-pair",[1091],{"type":36,"value":1092},"Pass 3: Stylized \u002F Non-Humanoid Pair",{"type":31,"tag":32,"props":1094,"children":1095},{},[1096],{"type":36,"value":1097},"Use expressive shape tests:",{"type":31,"tag":58,"props":1099,"children":1100},{},[1101,1109],{"type":31,"tag":62,"props":1102,"children":1103},{},[1104],{"type":31,"tag":44,"props":1105,"children":1107},{"className":1106},[],[1108],{"type":36,"value":678},{"type":31,"tag":62,"props":1110,"children":1111},{},[1112],{"type":31,"tag":44,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":36,"value":657},{"type":31,"tag":32,"props":1118,"children":1119},{},[1120],{"type":36,"value":1121},"Why these matter:",{"type":31,"tag":58,"props":1123,"children":1124},{},[1125,1130,1135],{"type":31,"tag":62,"props":1126,"children":1127},{},[1128],{"type":36,"value":1129},"less character-like silhouettes",{"type":31,"tag":62,"props":1131,"children":1132},{},[1133],{"type":36,"value":1134},"likely useful for non-human actor types such as tools, devices, or abstract system objects",{"type":31,"tag":62,"props":1136,"children":1137},{},[1138],{"type":36,"value":1139},"good test of whether qmap can support custom-model actors beyond a single visual family",{"type":31,"tag":32,"props":1141,"children":1142},{},[1143],{"type":36,"value":973},{"type":31,"tag":58,"props":1145,"children":1146},{},[1147,1152],{"type":31,"tag":62,"props":1148,"children":1149},{},[1150],{"type":36,"value":1151},"verify that custom models still read as qmap actors when the silhouette is unusual",{"type":31,"tag":62,"props":1153,"children":1154},{},[1155],{"type":36,"value":1156},"test whether outline\u002Fedge support becomes necessary for flatter or more horizontal forms",{"type":31,"tag":911,"props":1158,"children":1160},{"id":1159},"pass-4-stress-texture-cohesion-set",[1161],{"type":36,"value":1162},"Pass 4: Stress \u002F Texture Cohesion Set",{"type":31,"tag":32,"props":1164,"children":1165},{},[1166],{"type":36,"value":1167},"Use the monster family as a batch:",{"type":31,"tag":58,"props":1169,"children":1170},{},[1171,1179,1187],{"type":31,"tag":62,"props":1172,"children":1173},{},[1174],{"type":31,"tag":44,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":36,"value":487},{"type":31,"tag":62,"props":1180,"children":1181},{},[1182],{"type":31,"tag":44,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":36,"value":552},{"type":31,"tag":62,"props":1188,"children":1189},{},[1190],{"type":31,"tag":44,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":36,"value":636},{"type":31,"tag":32,"props":1196,"children":1197},{},[1198],{"type":36,"value":1199},"Optional additions if useful:",{"type":31,"tag":58,"props":1201,"children":1202},{},[1203,1211,1219],{"type":31,"tag":62,"props":1204,"children":1205},{},[1206],{"type":31,"tag":44,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":36,"value":573},{"type":31,"tag":62,"props":1212,"children":1213},{},[1214],{"type":31,"tag":44,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":36,"value":594},{"type":31,"tag":62,"props":1220,"children":1221},{},[1222],{"type":31,"tag":44,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":36,"value":510},{"type":31,"tag":32,"props":1228,"children":1229},{},[1230],{"type":36,"value":1231},"Why these last:",{"type":31,"tag":58,"props":1233,"children":1234},{},[1235,1240],{"type":31,"tag":62,"props":1236,"children":1237},{},[1238],{"type":36,"value":1239},"they provide several related assets with different massing and palette usage",{"type":31,"tag":62,"props":1241,"children":1242},{},[1243],{"type":36,"value":1244},"they are well suited for multi-actor scenes where we compare coherence across several imported meshes at once",{"type":31,"tag":32,"props":1246,"children":1247},{},[1248],{"type":36,"value":973},{"type":31,"tag":58,"props":1250,"children":1251},{},[1252,1257,1262],{"type":31,"tag":62,"props":1253,"children":1254},{},[1255],{"type":36,"value":1256},"test scene readability when multiple custom assets coexist",{"type":31,"tag":62,"props":1258,"children":1259},{},[1260],{"type":36,"value":1261},"compare whether source palettes create too much scene noise",{"type":31,"tag":62,"props":1263,"children":1264},{},[1265],{"type":36,"value":1266},"evaluate grouped scenes rather than one-off hero placement",{"key":364,"title":1268,"empty":17,"ast":1269},"Asset Normalization Rules To Prove",{"type":28,"children":1270},[1271,1276],{"type":31,"tag":32,"props":1272,"children":1273},{},[1274],{"type":36,"value":1275},"The provided assets suggest a concrete normalization checklist:",{"type":31,"tag":1277,"props":1278,"children":1279},"ol",{},[1280,1299,1304,1317,1330,1359],{"type":31,"tag":62,"props":1281,"children":1282},{},[1283,1285,1290,1292,1297],{"type":36,"value":1284},"Load ",{"type":31,"tag":44,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":36,"value":182},{"type":36,"value":1291}," before ",{"type":31,"tag":44,"props":1293,"children":1295},{"className":1294},[],[1296],{"type":36,"value":49},{"type":36,"value":1298}," so palette textures resolve cleanly.",{"type":31,"tag":62,"props":1300,"children":1301},{},[1302],{"type":36,"value":1303},"Apply nearest filtering to palette textures to preserve voxel sharpness.",{"type":31,"tag":62,"props":1305,"children":1306},{},[1307,1309,1315],{"type":36,"value":1308},"Compute bounding box per asset and recenter in ",{"type":31,"tag":44,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":36,"value":1314},"x\u002Fz",{"type":36,"value":1316},".",{"type":31,"tag":62,"props":1318,"children":1319},{},[1320,1322,1328],{"type":36,"value":1321},"Drop the asset to the stage by aligning min ",{"type":31,"tag":44,"props":1323,"children":1325},{"className":1324},[],[1326],{"type":36,"value":1327},"y",{"type":36,"value":1329}," to ground level.",{"type":31,"tag":62,"props":1331,"children":1332},{},[1333,1335,1341,1343,1349,1351,1357],{"type":36,"value":1334},"Normalize by target height or max dimension so ",{"type":31,"tag":44,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":36,"value":1340},"Manager",{"type":36,"value":1342},", ",{"type":31,"tag":44,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":36,"value":1348},"Robot",{"type":36,"value":1350},", and ",{"type":31,"tag":44,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":36,"value":1356},"Intern",{"type":36,"value":1358}," can share the same actor slot without manual scene edits.",{"type":31,"tag":62,"props":1360,"children":1361},{},[1362],{"type":36,"value":1363},"Preserve an actor-level override for rotation, because exporter axes may still differ on future drops.",{"key":364,"title":1365,"empty":17,"ast":1366},"Experiment Structure For These Assets",{"type":28,"children":1367},[1368,1373,1411,1416,1429,1434],{"type":31,"tag":32,"props":1369,"children":1370},{},[1371],{"type":36,"value":1372},"The experiment should include three small controls specific to the provided asset set:",{"type":31,"tag":58,"props":1374,"children":1375},{},[1376,1381,1406],{"type":31,"tag":62,"props":1377,"children":1378},{},[1379],{"type":36,"value":1380},"asset picker: switch among the twelve supplied exports",{"type":31,"tag":62,"props":1382,"children":1383},{},[1384,1386,1392,1393,1399,1400],{"type":36,"value":1385},"render mode: ",{"type":31,"tag":44,"props":1387,"children":1389},{"className":1388},[],[1390],{"type":36,"value":1391},"source",{"type":36,"value":1342},{"type":31,"tag":44,"props":1394,"children":1396},{"className":1395},[],[1397],{"type":36,"value":1398},"override",{"type":36,"value":1342},{"type":31,"tag":44,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":36,"value":1405},"hybrid tint",{"type":31,"tag":62,"props":1407,"children":1408},{},[1409],{"type":36,"value":1410},"lighting preset: baseline, studio, dramatic, flat-readable",{"type":31,"tag":32,"props":1412,"children":1413},{},[1414],{"type":36,"value":1415},"Optional but useful:",{"type":31,"tag":58,"props":1417,"children":1418},{},[1419,1424],{"type":31,"tag":62,"props":1420,"children":1421},{},[1422],{"type":36,"value":1423},"compare mode: primitive placeholder vs imported asset",{"type":31,"tag":62,"props":1425,"children":1426},{},[1427],{"type":36,"value":1428},"multi-asset scene toggle: one hero actor vs several imported actors together",{"type":31,"tag":32,"props":1430,"children":1431},{},[1432],{"type":36,"value":1433},"The asset manifest for this experiment should store, per file:",{"type":31,"tag":58,"props":1435,"children":1436},{},[1437,1459,1464,1469,1474],{"type":31,"tag":62,"props":1438,"children":1439},{},[1440,1442,1447,1448,1453,1454],{"type":36,"value":1441},"source paths for ",{"type":31,"tag":44,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":36,"value":49},{"type":36,"value":1342},{"type":31,"tag":44,"props":1449,"children":1451},{"className":1450},[],[1452],{"type":36,"value":182},{"type":36,"value":1350},{"type":31,"tag":44,"props":1455,"children":1457},{"className":1456},[],[1458],{"type":36,"value":501},{"type":31,"tag":62,"props":1460,"children":1461},{},[1462],{"type":36,"value":1463},"display label",{"type":31,"tag":62,"props":1465,"children":1466},{},[1467],{"type":36,"value":1468},"intended actor type for qmap",{"type":31,"tag":62,"props":1470,"children":1471},{},[1472],{"type":36,"value":1473},"any per-asset rotation\u002Foffset overrides discovered during setup",{"type":31,"tag":62,"props":1475,"children":1476},{},[1477],{"type":36,"value":1478},"notes on whether the asset is a baseline, hero, or stress-test candidate",{"key":364,"title":1480,"empty":17,"ast":1481},"Runtime Session Follow-on",{"type":28,"children":1482},[1483,1488,1493,1511,1516,1522,1540,1545,1553,1559,1582,1587,1605,1611,1647,1652,1665,1671,1710,1715,1721,1734,1739],{"type":31,"tag":32,"props":1484,"children":1485},{},[1486],{"type":36,"value":1487},"The next c23 branch should duplicate the c22 runtime-session experiment and use it as the first integration sandbox for imported models inside a real qmap topology.",{"type":31,"tag":32,"props":1489,"children":1490},{},[1491],{"type":36,"value":1492},"Goal:",{"type":31,"tag":58,"props":1494,"children":1495},{},[1496,1501,1506],{"type":31,"tag":62,"props":1497,"children":1498},{},[1499],{"type":36,"value":1500},"keep c22's successful runtime-session controls and fixtures intact",{"type":31,"tag":62,"props":1502,"children":1503},{},[1504],{"type":36,"value":1505},"create a second c23 page dedicated to runtime-session model substitution",{"type":31,"tag":62,"props":1507,"children":1508},{},[1509],{"type":36,"value":1510},"replace primitive runtime actors incrementally rather than all at once",{"type":31,"tag":32,"props":1512,"children":1513},{},[1514],{"type":36,"value":1515},"Recommended implementation path:",{"type":31,"tag":911,"props":1517,"children":1519},{"id":1518},"phase-a-baseline-duplicate",[1520],{"type":36,"value":1521},"Phase A: Baseline Duplicate",{"type":31,"tag":58,"props":1523,"children":1524},{},[1525,1530,1535],{"type":31,"tag":62,"props":1526,"children":1527},{},[1528],{"type":36,"value":1529},"duplicate the c22 runtime-session experiment into a second c23 page",{"type":31,"tag":62,"props":1531,"children":1532},{},[1533],{"type":36,"value":1534},"keep all current session fixtures, grouping controls, and configurator wiring",{"type":31,"tag":62,"props":1536,"children":1537},{},[1538],{"type":36,"value":1539},"add a visible model-substitution plan panel to the page",{"type":31,"tag":32,"props":1541,"children":1542},{},[1543],{"type":36,"value":1544},"Primary output:",{"type":31,"tag":58,"props":1546,"children":1547},{},[1548],{"type":31,"tag":62,"props":1549,"children":1550},{},[1551],{"type":36,"value":1552},"a stable before\u002Fafter lab where runtime-session behavior can be compared without disturbing c22",{"type":31,"tag":911,"props":1554,"children":1556},{"id":1555},"phase-b-root-process-substitution",[1557],{"type":36,"value":1558},"Phase B: Root Process Substitution",{"type":31,"tag":58,"props":1560,"children":1561},{},[1562,1567,1572],{"type":31,"tag":62,"props":1563,"children":1564},{},[1565],{"type":36,"value":1566},"add model-backed actor support at the actor level",{"type":31,"tag":62,"props":1568,"children":1569},{},[1570],{"type":36,"value":1571},"replace only the root process first",{"type":31,"tag":62,"props":1573,"children":1574},{},[1575,1577],{"type":36,"value":1576},"initial candidate: ",{"type":31,"tag":44,"props":1578,"children":1580},{"className":1579},[],[1581],{"type":36,"value":615},{"type":31,"tag":32,"props":1583,"children":1584},{},[1585],{"type":36,"value":1586},"Why first:",{"type":31,"tag":58,"props":1588,"children":1589},{},[1590,1595,1600],{"type":31,"tag":62,"props":1591,"children":1592},{},[1593],{"type":36,"value":1594},"one actor only",{"type":31,"tag":62,"props":1596,"children":1597},{},[1598],{"type":36,"value":1599},"easiest to visually validate scale, orientation, and selection behavior",{"type":31,"tag":62,"props":1601,"children":1602},{},[1603],{"type":36,"value":1604},"already matches the conservative runtime\u002Finventory integration that is currently shipping",{"type":31,"tag":911,"props":1606,"children":1608},{"id":1607},"phase-c-child-process-substitution",[1609],{"type":36,"value":1610},"Phase C: Child Process Substitution",{"type":31,"tag":58,"props":1612,"children":1613},{},[1614,1619],{"type":31,"tag":62,"props":1615,"children":1616},{},[1617],{"type":36,"value":1618},"replace child processes selectively, not every runtime actor at once",{"type":31,"tag":62,"props":1620,"children":1621},{},[1622,1624],{"type":36,"value":1623},"initial candidates:\n",{"type":31,"tag":58,"props":1625,"children":1626},{},[1627,1637],{"type":31,"tag":62,"props":1628,"children":1629},{},[1630,1635],{"type":31,"tag":44,"props":1631,"children":1633},{"className":1632},[],[1634],{"type":36,"value":678},{"type":36,"value":1636}," for app-like subprocesses",{"type":31,"tag":62,"props":1638,"children":1639},{},[1640,1645],{"type":31,"tag":44,"props":1641,"children":1643},{"className":1642},[],[1644],{"type":36,"value":573},{"type":36,"value":1646}," for lighter utility\u002Fprocess roles",{"type":31,"tag":32,"props":1648,"children":1649},{},[1650],{"type":36,"value":1651},"Questions to answer:",{"type":31,"tag":58,"props":1653,"children":1654},{},[1655,1660],{"type":31,"tag":62,"props":1656,"children":1657},{},[1658],{"type":36,"value":1659},"do imported subprocess models remain legible when grouped densely?",{"type":31,"tag":62,"props":1661,"children":1662},{},[1663],{"type":36,"value":1664},"do labels still anchor clearly when several model-backed actors occupy one rug?",{"type":31,"tag":911,"props":1666,"children":1668},{"id":1667},"phase-d-external-host-substitution",[1669],{"type":36,"value":1670},"Phase D: External Host Substitution",{"type":31,"tag":58,"props":1672,"children":1673},{},[1674,1679],{"type":31,"tag":62,"props":1675,"children":1676},{},[1677],{"type":36,"value":1678},"test a small host family using the monster assets",{"type":31,"tag":62,"props":1680,"children":1681},{},[1682,1683],{"type":36,"value":1623},{"type":31,"tag":58,"props":1684,"children":1685},{},[1686,1694,1702],{"type":31,"tag":62,"props":1687,"children":1688},{},[1689],{"type":31,"tag":44,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":36,"value":636},{"type":31,"tag":62,"props":1695,"children":1696},{},[1697],{"type":31,"tag":44,"props":1698,"children":1700},{"className":1699},[],[1701],{"type":36,"value":552},{"type":31,"tag":62,"props":1703,"children":1704},{},[1705],{"type":31,"tag":44,"props":1706,"children":1708},{"className":1707},[],[1709],{"type":36,"value":487},{"type":31,"tag":32,"props":1711,"children":1712},{},[1713],{"type":36,"value":1714},"This is intentionally stylized and may or may not survive promotion. The point is to stress silhouette diversity in the runtime-session map, not to lock final semantics.",{"type":31,"tag":911,"props":1716,"children":1718},{"id":1717},"phase-e-file-actor-decision",[1719],{"type":36,"value":1720},"Phase E: File Actor Decision",{"type":31,"tag":58,"props":1722,"children":1723},{},[1724,1729],{"type":31,"tag":62,"props":1725,"children":1726},{},[1727],{"type":36,"value":1728},"keep file actors primitive in the first integration pass",{"type":31,"tag":62,"props":1730,"children":1731},{},[1732],{"type":36,"value":1733},"revisit file substitution only after root\u002Fprocess\u002Fhost model behavior is proven",{"type":31,"tag":32,"props":1735,"children":1736},{},[1737],{"type":36,"value":1738},"Reason:",{"type":31,"tag":58,"props":1740,"children":1741},{},[1742,1747,1752],{"type":31,"tag":62,"props":1743,"children":1744},{},[1745],{"type":36,"value":1746},"files are the densest actor class in c22 fixtures",{"type":31,"tag":62,"props":1748,"children":1749},{},[1750],{"type":36,"value":1751},"primitive file meshes currently support readability better than arbitrary imported forms",{"type":31,"tag":62,"props":1753,"children":1754},{},[1755],{"type":36,"value":1756},"model-backed files could easily reduce map legibility before we learn anything useful",{"key":364,"title":1758,"empty":17,"ast":1759},"Runtime Session Model Mapping Proposal",{"type":28,"children":1760},[1761,1766,1862,1867,1880,1885,1908],{"type":31,"tag":32,"props":1762,"children":1763},{},[1764],{"type":36,"value":1765},"First-pass mapping:",{"type":31,"tag":58,"props":1767,"children":1768},{},[1769,1787,1804,1814,1849],{"type":31,"tag":62,"props":1770,"children":1771},{},[1772,1774,1780,1782],{"type":36,"value":1773},"Root process (",{"type":31,"tag":44,"props":1775,"children":1777},{"className":1776},[],[1778],{"type":36,"value":1779},"role: root",{"type":36,"value":1781},") → ",{"type":31,"tag":44,"props":1783,"children":1785},{"className":1784},[],[1786],{"type":36,"value":615},{"type":31,"tag":62,"props":1788,"children":1789},{},[1790,1792,1798,1799],{"type":36,"value":1791},"Child process (",{"type":31,"tag":44,"props":1793,"children":1795},{"className":1794},[],[1796],{"type":36,"value":1797},"type: app",{"type":36,"value":1781},{"type":31,"tag":44,"props":1800,"children":1802},{"className":1801},[],[1803],{"type":36,"value":678},{"type":31,"tag":62,"props":1805,"children":1806},{},[1807,1809],{"type":36,"value":1808},"Optional utility subprocess variant → ",{"type":31,"tag":44,"props":1810,"children":1812},{"className":1811},[],[1813],{"type":36,"value":573},{"type":31,"tag":62,"props":1815,"children":1816},{},[1817,1819,1825,1827,1833,1834,1840,1841,1847],{"type":36,"value":1818},"External host (",{"type":31,"tag":44,"props":1820,"children":1822},{"className":1821},[],[1823],{"type":36,"value":1824},"type: external-host",{"type":36,"value":1826},") → monster family (",{"type":31,"tag":44,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":36,"value":1832},"Monsters",{"type":36,"value":1342},{"type":31,"tag":44,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":36,"value":1839},"Eye Monsters",{"type":36,"value":1342},{"type":31,"tag":44,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":36,"value":1846},"Abstract Monsters",{"type":36,"value":1848},")",{"type":31,"tag":62,"props":1850,"children":1851},{},[1852,1854,1860],{"type":36,"value":1853},"File (",{"type":31,"tag":44,"props":1855,"children":1857},{"className":1856},[],[1858],{"type":36,"value":1859},"type: file",{"type":36,"value":1861},") → keep existing primitive file mesh for now",{"type":31,"tag":32,"props":1863,"children":1864},{},[1865],{"type":36,"value":1866},"Follow-on candidate to revisit after the refreshed asset set settles:",{"type":31,"tag":58,"props":1868,"children":1869},{},[1870],{"type":31,"tag":62,"props":1871,"children":1872},{},[1873,1878],{"type":31,"tag":44,"props":1874,"children":1876},{"className":1875},[],[1877],{"type":36,"value":720},{"type":36,"value":1879}," as a more dramatic root-process hero model if it proves readable without destabilizing the rug composition",{"type":31,"tag":32,"props":1881,"children":1882},{},[1883],{"type":36,"value":1884},"Success criteria for this follow-on:",{"type":31,"tag":58,"props":1886,"children":1887},{},[1888,1893,1898,1903],{"type":31,"tag":62,"props":1889,"children":1890},{},[1891],{"type":36,"value":1892},"the duplicated c23 runtime-session page matches c22 behavior before model substitution begins",{"type":31,"tag":62,"props":1894,"children":1895},{},[1896],{"type":36,"value":1897},"root process substitution works without breaking selection or layout",{"type":31,"tag":62,"props":1899,"children":1900},{},[1901],{"type":36,"value":1902},"at least one non-root imported actor type remains readable under entity-type grouping",{"type":31,"tag":62,"props":1904,"children":1905},{},[1906],{"type":36,"value":1907},"the experiment ends with a clear recommendation on which runtime actor classes should stay primitive",{"type":31,"tag":32,"props":1909,"children":1910},{},[1911,1913,1919],{"type":36,"value":1912},"Replay-oriented synthetic live-session work has been split into ",{"type":31,"tag":44,"props":1914,"children":1916},{"className":1915},[],[1917],{"type":36,"value":1918},"c24.synthetic-live-session-replay",{"type":36,"value":1920}," so this cycle can stay focused on imported model loading, look-dev, and conservative runtime-session substitution.",{"key":364,"title":1922,"empty":17,"ast":1923},"Visual Study Areas",{"type":28,"children":1924},[1925,1931,1936,1959,1964,1987,1993,1998,2022,2026],{"type":31,"tag":911,"props":1926,"children":1928},{"id":1927},"lighting",[1929],{"type":36,"value":1930},"Lighting",{"type":31,"tag":32,"props":1932,"children":1933},{},[1934],{"type":36,"value":1935},"Test a small number of intentionally different presets rather than exposing a dozen unrelated knobs. Initial candidates:",{"type":31,"tag":1277,"props":1937,"children":1938},{},[1939,1944,1949,1954],{"type":31,"tag":62,"props":1940,"children":1941},{},[1942],{"type":36,"value":1943},"Current baseline: ambient + directional",{"type":31,"tag":62,"props":1945,"children":1946},{},[1947],{"type":36,"value":1948},"Soft studio: hemisphere + key + fill",{"type":31,"tag":62,"props":1950,"children":1951},{},[1952],{"type":36,"value":1953},"Dramatic diagram: low ambient + strong key + rim",{"type":31,"tag":62,"props":1955,"children":1956},{},[1957],{"type":36,"value":1958},"Flat readable: bright ambient-forward lighting for maximum label\u002Fmodel clarity",{"type":31,"tag":32,"props":1960,"children":1961},{},[1962],{"type":36,"value":1963},"For each preset, judge:",{"type":31,"tag":58,"props":1965,"children":1966},{},[1967,1972,1977,1982],{"type":31,"tag":62,"props":1968,"children":1969},{},[1970],{"type":36,"value":1971},"silhouette legibility",{"type":31,"tag":62,"props":1973,"children":1974},{},[1975],{"type":36,"value":1976},"face readability at qmap's normal camera angle",{"type":31,"tag":62,"props":1978,"children":1979},{},[1980],{"type":36,"value":1981},"compatibility with labels and dataflows",{"type":31,"tag":62,"props":1983,"children":1984},{},[1985],{"type":36,"value":1986},"whether shadows help or just add noise",{"type":31,"tag":911,"props":1988,"children":1990},{"id":1989},"material-color-strategy",[1991],{"type":36,"value":1992},"Material \u002F Color Strategy",{"type":31,"tag":32,"props":1994,"children":1995},{},[1996],{"type":36,"value":1997},"Test at least these approaches:",{"type":31,"tag":1277,"props":1999,"children":2000},{},[2001,2006,2017],{"type":31,"tag":62,"props":2002,"children":2003},{},[2004],{"type":36,"value":2005},"Source material: use model-authored material\u002Fcolor if present",{"type":31,"tag":62,"props":2007,"children":2008},{},[2009,2011],{"type":36,"value":2010},"qmap override: replace with qmap-controlled ",{"type":31,"tag":44,"props":2012,"children":2014},{"className":2013},[],[2015],{"type":36,"value":2016},"MeshStandardMaterial",{"type":31,"tag":62,"props":2018,"children":2019},{},[2020],{"type":36,"value":2021},"Hybrid tint: preserve value\u002Froughness feel but tint to actor\u002Fstate color",{"type":31,"tag":32,"props":2023,"children":2024},{},[2025],{"type":36,"value":1651},{"type":31,"tag":58,"props":2027,"children":2028},{},[2029,2034,2039],{"type":31,"tag":62,"props":2030,"children":2031},{},[2032],{"type":36,"value":2033},"Can imported models still communicate actor type\u002Fstate as clearly as primitives?",{"type":31,"tag":62,"props":2035,"children":2036},{},[2037],{"type":36,"value":2038},"Does one shared material improve diagram coherence?",{"type":31,"tag":62,"props":2040,"children":2041},{},[2042],{"type":36,"value":2043},"Do per-model source colors fight the rest of the map?",{"key":364,"title":2045,"empty":17,"ast":2046},"Key Questions",{"type":28,"children":2047},[2048],{"type":31,"tag":1277,"props":2049,"children":2050},{},[2051,2071,2083,2088,2093,2106],{"type":31,"tag":62,"props":2052,"children":2053},{},[2054,2056,2061,2063,2069],{"type":36,"value":2055},"What is the thinnest integration seam: experiment-local loader, reusable ",{"type":31,"tag":44,"props":2057,"children":2059},{"className":2058},[],[2060],{"type":36,"value":212},{"type":36,"value":2062},", or extension to ",{"type":31,"tag":44,"props":2064,"children":2066},{"className":2065},[],[2067],{"type":36,"value":2068},"createEntity()",{"type":36,"value":2070},"?",{"type":31,"tag":62,"props":2072,"children":2073},{},[2074,2076,2081],{"type":36,"value":2075},"How should ",{"type":31,"tag":44,"props":2077,"children":2079},{"className":2078},[],[2080],{"type":36,"value":49},{"type":36,"value":2082}," models be normalized so different authoring tools do not produce wildly different scale\u002Forigin results?",{"type":31,"tag":62,"props":2084,"children":2085},{},[2086],{"type":36,"value":2087},"Should qmap treat imported meshes as fully authored objects, or as geometry that still receives qmap-owned materials and state styling?",{"type":31,"tag":62,"props":2089,"children":2090},{},[2091],{"type":36,"value":2092},"Which lighting preset preserves readability best from the default isometric camera?",{"type":31,"tag":62,"props":2094,"children":2095},{},[2096,2098,2104],{"type":36,"value":2097},"Does the main ",{"type":31,"tag":44,"props":2099,"children":2101},{"className":2100},[],[2102],{"type":36,"value":2103},"QMap.vue",{"type":36,"value":2105}," lighting setup need to become configurable, or should custom-model lighting live in a specialized wrapper\u002Fexperiment first?",{"type":31,"tag":62,"props":2107,"children":2108},{},[2109],{"type":36,"value":2110},"What round-trip workflow is easiest when the user iterates on the same test model repeatedly?",{"key":364,"title":2112,"empty":17,"ast":2113},"Success Criteria",{"type":28,"children":2114},[2115],{"type":31,"tag":58,"props":2116,"children":2117},{},[2118,2130,2135,2167,2172,2177],{"type":31,"tag":62,"props":2119,"children":2120},{},[2121,2123,2128],{"type":36,"value":2122},"A supplied ",{"type":31,"tag":44,"props":2124,"children":2126},{"className":2125},[],[2127],{"type":36,"value":49},{"type":36,"value":2129}," file loads reliably in a qmap experiment",{"type":31,"tag":62,"props":2131,"children":2132},{},[2133],{"type":36,"value":2134},"The imported model can be swapped for a revised version without changing core experiment code",{"type":31,"tag":62,"props":2136,"children":2137},{},[2138,2140,2146,2147,2152,2153,2159,2160,2166],{"type":36,"value":2139},"At least one material strategy preserves qmap state readability (",{"type":31,"tag":44,"props":2141,"children":2143},{"className":2142},[],[2144],{"type":36,"value":2145},"default",{"type":36,"value":1342},{"type":31,"tag":44,"props":2148,"children":2150},{"className":2149},[],[2151],{"type":36,"value":15},{"type":36,"value":1342},{"type":31,"tag":44,"props":2154,"children":2156},{"className":2155},[],[2157],{"type":36,"value":2158},"ignored",{"type":36,"value":1342},{"type":31,"tag":44,"props":2161,"children":2163},{"className":2162},[],[2164],{"type":36,"value":2165},"highlighted",{"type":36,"value":1848},{"type":31,"tag":62,"props":2168,"children":2169},{},[2170],{"type":36,"value":2171},"At least one lighting preset produces clearly readable silhouettes and surfaces at normal zoom",{"type":31,"tag":62,"props":2173,"children":2174},{},[2175],{"type":36,"value":2176},"The cycle ends with a concrete recommendation for the reusable abstraction, if any",{"type":31,"tag":62,"props":2178,"children":2179},{},[2180],{"type":36,"value":2181},"Existing primitive actors remain untouched unless a narrow, low-risk extension is clearly justified",{"key":364,"title":2183,"empty":17,"ast":2184},"Implementation Plan",{"type":28,"children":2185},[2186,2192,2246,2250,2258,2264,2304,2308,2316,2322,2340,2344,2352,2358,2397,2401,2409,2415,2433,2437,2445,2451,2475,2479],{"type":31,"tag":911,"props":2187,"children":2189},{"id":2188},"phase-1-loader-spike",[2190],{"type":36,"value":2191},"Phase 1: Loader Spike",{"type":31,"tag":58,"props":2193,"children":2194},{},[2195,2213,2224,2236,2241],{"type":31,"tag":62,"props":2196,"children":2197},{},[2198,2200,2205,2206,2211],{"type":36,"value":2199},"Add one experiment-local path for loading ",{"type":31,"tag":44,"props":2201,"children":2203},{"className":2202},[],[2204],{"type":36,"value":49},{"type":36,"value":489},{"type":31,"tag":44,"props":2207,"children":2209},{"className":2208},[],[2210],{"type":36,"value":182},{"type":36,"value":2212}," + palette PNG assets",{"type":31,"tag":62,"props":2214,"children":2215},{},[2216,2217,2222],{"type":36,"value":1284},{"type":31,"tag":44,"props":2218,"children":2220},{"className":2219},[],[2221],{"type":36,"value":615},{"type":36,"value":2223}," into an otherwise minimal scene first",{"type":31,"tag":62,"props":2225,"children":2226},{},[2227,2229,2234],{"type":36,"value":2228},"Add ",{"type":31,"tag":44,"props":2230,"children":2232},{"className":2231},[],[2233],{"type":36,"value":531},{"type":36,"value":2235}," immediately after as a second sanity check",{"type":31,"tag":62,"props":2237,"children":2238},{},[2239],{"type":36,"value":2240},"Normalize its origin, scale, and upright orientation",{"type":31,"tag":62,"props":2242,"children":2243},{},[2244],{"type":36,"value":2245},"Capture the exact metadata needed for reliable reloads",{"type":31,"tag":32,"props":2247,"children":2248},{},[2249],{"type":36,"value":1544},{"type":31,"tag":58,"props":2251,"children":2252},{},[2253],{"type":31,"tag":62,"props":2254,"children":2255},{},[2256],{"type":36,"value":2257},"proof that the MagicaVoxel asset set can be loaded, centered, scaled, and rendered consistently",{"type":31,"tag":911,"props":2259,"children":2261},{"id":2260},"phase-2-actor-integration",[2262],{"type":36,"value":2263},"Phase 2: Actor Integration",{"type":31,"tag":58,"props":2265,"children":2266},{},[2267,2286,2291],{"type":31,"tag":62,"props":2268,"children":2269},{},[2270,2272,2277,2279,2284],{"type":36,"value":2271},"Replace one primitive actor with ",{"type":31,"tag":44,"props":2273,"children":2275},{"className":2274},[],[2276],{"type":36,"value":615},{"type":36,"value":2278}," or ",{"type":31,"tag":44,"props":2280,"children":2282},{"className":2281},[],[2283],{"type":36,"value":699},{"type":36,"value":2285}," inside a normal qmap actor\u002Fdataflow scene",{"type":31,"tag":62,"props":2287,"children":2288},{},[2289],{"type":36,"value":2290},"Preserve existing label placement, selection, and state transitions",{"type":31,"tag":62,"props":2292,"children":2293},{},[2294,2296,2302],{"type":36,"value":2295},"Decide whether imported-model actors should wrap ",{"type":31,"tag":44,"props":2297,"children":2299},{"className":2298},[],[2300],{"type":36,"value":2301},"BaseMesh",{"type":36,"value":2303},", extend it, or sit beside it",{"type":31,"tag":32,"props":2305,"children":2306},{},[2307],{"type":36,"value":1544},{"type":31,"tag":58,"props":2309,"children":2310},{},[2311],{"type":31,"tag":62,"props":2312,"children":2313},{},[2314],{"type":36,"value":2315},"one imported model functioning as a first-class qmap actor",{"type":31,"tag":911,"props":2317,"children":2319},{"id":2318},"phase-3-material-strategy-study",[2320],{"type":36,"value":2321},"Phase 3: Material Strategy Study",{"type":31,"tag":58,"props":2323,"children":2324},{},[2325,2330,2335],{"type":31,"tag":62,"props":2326,"children":2327},{},[2328],{"type":36,"value":2329},"Implement source, override, and hybrid material modes for the palette-textured assets",{"type":31,"tag":62,"props":2331,"children":2332},{},[2333],{"type":36,"value":2334},"Verify state coloring\u002Fopacity transitions still read clearly",{"type":31,"tag":62,"props":2336,"children":2337},{},[2338],{"type":36,"value":2339},"Compare whether edges\u002Foutlines are needed for irregular geometry",{"type":31,"tag":32,"props":2341,"children":2342},{},[2343],{"type":36,"value":1544},{"type":31,"tag":58,"props":2345,"children":2346},{},[2347],{"type":31,"tag":62,"props":2348,"children":2349},{},[2350],{"type":36,"value":2351},"a recommended default material strategy for diagram contexts",{"type":31,"tag":911,"props":2353,"children":2355},{"id":2354},"phase-4-lighting-study",[2356],{"type":36,"value":2357},"Phase 4: Lighting Study",{"type":31,"tag":58,"props":2359,"children":2360},{},[2361,2366,2392],{"type":31,"tag":62,"props":2362,"children":2363},{},[2364],{"type":36,"value":2365},"Implement a small preset switcher in the experiment",{"type":31,"tag":62,"props":2367,"children":2368},{},[2369,2371,2377,2378,2383,2384,2390],{"type":36,"value":2370},"Compare readability across the same scene and camera using ",{"type":31,"tag":44,"props":2372,"children":2374},{"className":2373},[],[2375],{"type":36,"value":2376},"Receptionist",{"type":36,"value":1342},{"type":31,"tag":44,"props":2379,"children":2381},{"className":2380},[],[2382],{"type":36,"value":1348},{"type":36,"value":1342},{"type":31,"tag":44,"props":2385,"children":2387},{"className":2386},[],[2388],{"type":36,"value":2389},"Puzzle",{"type":36,"value":2391},", and one monster asset",{"type":31,"tag":62,"props":2393,"children":2394},{},[2395],{"type":36,"value":2396},"Decide whether shadows, rim light, or hemisphere lighting materially improve the result",{"type":31,"tag":32,"props":2398,"children":2399},{},[2400],{"type":36,"value":1544},{"type":31,"tag":58,"props":2402,"children":2403},{},[2404],{"type":31,"tag":62,"props":2405,"children":2406},{},[2407],{"type":36,"value":2408},"one recommended lighting preset and one acceptable fallback",{"type":31,"tag":911,"props":2410,"children":2412},{"id":2411},"phase-5-round-trip-workflow",[2413],{"type":36,"value":2414},"Phase 5: Round-Trip Workflow",{"type":31,"tag":58,"props":2416,"children":2417},{},[2418,2423,2428],{"type":31,"tag":62,"props":2419,"children":2420},{},[2421],{"type":36,"value":2422},"Make the supplied asset set easy to replace in-place with revised exports from the same toolchain",{"type":31,"tag":62,"props":2424,"children":2425},{},[2426],{"type":36,"value":2427},"Verify reloading behavior during iteration",{"type":31,"tag":62,"props":2429,"children":2430},{},[2431],{"type":36,"value":2432},"Document any naming, axis, palette, or export conventions that make the loop smoother",{"type":31,"tag":32,"props":2434,"children":2435},{},[2436],{"type":36,"value":1544},{"type":31,"tag":58,"props":2438,"children":2439},{},[2440],{"type":31,"tag":62,"props":2441,"children":2442},{},[2443],{"type":36,"value":2444},"a repeatable designer-to-qmap asset workflow",{"type":31,"tag":911,"props":2446,"children":2448},{"id":2447},"phase-6-promotion-decision",[2449],{"type":36,"value":2450},"Phase 6: Promotion Decision",{"type":31,"tag":58,"props":2452,"children":2453},{},[2454,2465,2470],{"type":31,"tag":62,"props":2455,"children":2456},{},[2457,2459],{"type":36,"value":2458},"Decide what, if anything, should move from experiment code into ",{"type":31,"tag":44,"props":2460,"children":2462},{"className":2461},[],[2463],{"type":36,"value":2464},"src\u002F",{"type":31,"tag":62,"props":2466,"children":2467},{},[2468],{"type":36,"value":2469},"Keep promoted API surface narrow",{"type":31,"tag":62,"props":2471,"children":2472},{},[2473],{"type":36,"value":2474},"Park anything that is interesting but not yet stable",{"type":31,"tag":32,"props":2476,"children":2477},{},[2478],{"type":36,"value":1544},{"type":31,"tag":58,"props":2480,"children":2481},{},[2482],{"type":31,"tag":62,"props":2483,"children":2484},{},[2485],{"type":36,"value":2486},"explicit recommendation: experiment-only, narrow promotion, or no promotion yet",{"key":364,"title":2488,"empty":17,"ast":2489},"Notes For Implementation",{"type":28,"children":2490},[2491],{"type":31,"tag":58,"props":2492,"children":2493},{},[2494,2499,2517,2522,2527,2539,2544],{"type":31,"tag":62,"props":2495,"children":2496},{},[2497],{"type":36,"value":2498},"Start with experiment-local code first; promote only after the shape is proven",{"type":31,"tag":62,"props":2500,"children":2501},{},[2502,2504,2509,2510,2515],{"type":36,"value":2503},"Prefer ",{"type":31,"tag":44,"props":2505,"children":2507},{"className":2506},[],[2508],{"type":36,"value":987},{"type":36,"value":489},{"type":31,"tag":44,"props":2511,"children":2513},{"className":2512},[],[2514],{"type":36,"value":994},{"type":36,"value":2516}," from Three's examples before inventing a custom parser",{"type":31,"tag":62,"props":2518,"children":2519},{},[2520],{"type":36,"value":2521},"Keep a primitive fallback path for comparison",{"type":31,"tag":62,"props":2523,"children":2524},{},[2525],{"type":36,"value":2526},"Default to qmap-owned materials unless source materials clearly outperform them",{"type":31,"tag":62,"props":2528,"children":2529},{},[2530,2532,2537],{"type":36,"value":2531},"For this asset set, treat ",{"type":31,"tag":44,"props":2533,"children":2535},{"className":2534},[],[2536],{"type":36,"value":182},{"type":36,"value":2538}," support as baseline because the palette PNG is part of the authored look",{"type":31,"tag":62,"props":2540,"children":2541},{},[2542],{"type":36,"value":2543},"Expose a small set of lighting presets, not raw light-object editing UI",{"type":31,"tag":62,"props":2545,"children":2546},{},[2547,2549,2554],{"type":36,"value":2548},"Use ",{"type":31,"tag":44,"props":2550,"children":2552},{"className":2551},[],[2553],{"type":36,"value":193},{"type":36,"value":2555}," as the primary validation asset set",[],[2558],"initial-prompt.md",[2560],{"file":2558,"title":2561},"Custom OBJ Models",[2563,2570,2574,2577,2581,2585,2589,2593,2597,2602,2606,2610,2614],{"src":2564,"kind":2565,"order":2566,"caption":2567,"capturedAt":2568,"route":2569},"\u002Fcycles\u002Fqmap\u002Fc23-manager.png","hero",59,"The Manager model, source palette, baseline light","2026-08-15T23:43:05.086Z","\u002Fexperiments\u002Fc23.custom-obj-models\u002F",{"src":2571,"kind":2565,"order":2572,"caption":2573,"capturedAt":2568,"route":2569},"\u002Fcycles\u002Fqmap\u002Fc23-manager-dramatic.png",60,"Manager under dramatic lighting",{"src":18,"kind":2565,"order":2575,"caption":2576,"capturedAt":2568,"route":2569},61,"Bob Wire (Cowboy) — studio light",{"src":2578,"kind":2565,"order":2579,"caption":2580,"capturedAt":2568,"route":2569},"\u002Fcycles\u002Fqmap\u002Fc23-sheriff.png",62,"Bob Wire (Sheriff)",{"src":2582,"kind":2565,"order":2583,"caption":2584,"capturedAt":2568,"route":2569},"\u002Fcycles\u002Fqmap\u002Fc23-monsters.png",63,"The monster set assembled",{"src":2586,"kind":2565,"order":2587,"caption":2588,"capturedAt":2568,"route":2569},"\u002Fcycles\u002Fqmap\u002Fc23-monsters-override.png",64,"Monsters with override material — silhouette study",{"src":2590,"kind":2565,"order":2591,"caption":2592,"capturedAt":2568,"route":2569},"\u002Fcycles\u002Fqmap\u002Fc23-interns.png",65,"Intern types, hybrid tint, flat-readable light",{"src":2594,"kind":2565,"order":2595,"caption":2596,"capturedAt":2568,"route":2569},"\u002Fcycles\u002Fqmap\u002Fc23-eyemon.png",66,"Eye Mon Red — source palette back on",{"src":2598,"kind":2565,"order":2599,"caption":2600,"capturedAt":2568,"route":2601},"\u002Fcycles\u002Fqmap\u002Fc23-lab-mixed.png",67,"Runtime lab: Mixed Runtime with vox actors","\u002Fexperiments\u002Fc23.custom-obj-models\u002Fruntime-session-map.html",{"src":2603,"kind":2565,"order":2604,"caption":2605,"capturedAt":2568,"route":2601},"\u002Fcycles\u002Fqmap\u002Fc23-lab-softlit.png",68,"Soft Lit render mode",{"src":2607,"kind":2565,"order":2608,"caption":2609,"capturedAt":2568,"route":2601},"\u002Fcycles\u002Fqmap\u002Fc23-lab-overdrive.png",69,"Overdrive Runtime, dramatic lighting",{"src":2611,"kind":2565,"order":2612,"caption":2613,"capturedAt":2568,"route":2601},"\u002Fcycles\u002Fqmap\u002Fc23-lab-networkheavy.png",70,"Network Heavy, true color",{"src":2615,"kind":2565,"order":2616,"capturedAt":2617,"route":2569},"\u002Fcycles\u002Fqmap\u002Fc23-custom-obj-models.png",4999,"2026-08-15T16:38:33.063Z",[],[2620,2621],{"route":2569,"href":8},{"route":2601,"href":8},1794599357851]