Artifact Schema:
For now, this page shows a json stringified version of the schema.js file that is actually being used by the artificial museum sourcecode to verify artifact data integrity. We are working on a nicer version of this page and on adding more info fields.
{"name": {"type": "string","multiple": true,"required": true,"max": 30,"min": 1,"info": "Name of the Artifact"},"slug": {"type": "slug","required": true,"max": 30,"min": 1,"info": "slug / url safe version of the Name."},"version": {"type": "int","required": true,"placeHolder": 1,"info": "The Version of the Artifact, bump this to force reloading of glb/video/audio files."},"published": {"type": "boolean","info": "setting this to false prevents the artifact from showing outside the testing subdomain."},"lat": {"type": "geo","required": true,"info": "Latitude of the artifact on the map."},"lng": {"type": "geo","required": true,"info": "Longitude of the artifact on the map."},"location": {"type": "slug","required": true,"from": {"table": "locations","key": "slug"},"info": "Location of the artifact in the city."},"city": {"type": "string","required": true,"from": {"table": ["cities","planets"],"key": "slug"},"info": "City the artifact is located in."},"artists": {"type": "array","required": true,"from": {"table": "artists","key": "slug"},"info": "Artists that worked on the concept and 3d model"},"curators": {"type": "array","from": {"table": "curators","key": "slug"},"info": "curator of the piece, currently unused."},"team": {"type": "array","from": {"table": "artists","key": "slug"},"info": "Team of artists that are behind the collective that is the artist of this artifact"},"artists3d": {"type": "array","from": {"table": "artists","key": "slug"},"info": "Team of people that worked on the 3d Objects used in this artifact."},"sound": {"type": "array","from": {"table": "artists","key": "slug"},"info": "Team of people that worked on the sound of this artifact."},"performance": {"type": "array","from": {"table": "artists","key": "slug"},"info": "Performers who had captures of their performance taken as input for this artifact."},"sky": {"type": "string","info": "name of the skybox image"},"skySphere": {"type": "array","length": 3,"itemType": "number","info": "size of the skysphere in the fallback mode."},"fonts": {"type": "array","itemType": "string","info": "font files to load for this artifact."},"audio": {"type": "file","accept": ".mp3","info": "a boolean true or undefined. can also be a string with the filename, without extension. the sandbox uses the mp3 extension to force load the local audio file."},"video": {"type": "file","accept": ".mp4","info": "a boolean true or undefined. can also be a string containing the filename, without extension. the sandbox uses the mp4 extension to force load the local video file."},"preview": {"type": "file","accept": ".jpg","width": 800,"height": 600,"info": "can be omitted to load a preview image based on the artifact.slug. can be a string to load a custom filename. extension should be omitted. filename can not contain dots."},"audioElements": {"type": "array","itemType": "object","subItemType": {"audio": {"type": "file","accept": [".mp3",".mp4",".ogg"],"info": "The Audio file to be loaded"},"analyse": {"type": "boolean","info": "adds AudioAnalyzer functionality to this audio stream"},"distance": {"max": {"type": "float","min": 0},"min": {"type": "float","min": 0},"info": "Min and Max Distance of the Spatial Audio of this artifact. Max will be the point the sound starts to be audible, Min is the point where the sound reaches maximum volume."},"target": {"type": "string","info": "Targetname of the object in the gltf file that is used as a position target for the Spatial Audio"},"animations": {"type": "array","itemType": "string","info": "Animations that should be set by the AnalyzeAudio. Weight of the animation will directly correspond to the loudness of the audio being played."},"autoplay": {"type": "boolean","info": "should this audio autoplay on artifact load?"},"playOnSpawnModel": {"type": "boolean","info": "start playing when the model is spawned."},"volume": {"type": "float","min": 0,"max": 1,"info": "the loudness of this audio. does not work on ios."}}},"animationSoundFrames": {"type": "array","item": "object","info": "frames of the audio file can start animations.","subItemType": {"time": {"type": "float","min": 0,"info": "time of the audio the animation should play."},"audio": {"type": "file","accept": [".mp3",".mp4",".ogg"],"info": "name of the audio file that should play"},"action": {"type": "string","info": "the name of the animation that should start playing at this time."}}},"examples": {"type": "array","itemType": "string"},"cam": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"},"maxPolar": {"type": "float","min": 0,"max": 360,"deprecated": true},"minPolar": {"type": "float","min": 0,"max": 360,"deprecated": true}},"lookat": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}},"particleCount": {"type": "int","min": 0,"info": "number of particles to spawn. all of the model will be cloned."},"maxSpawnDistance": {"type": "float","info": "Maximum distance from the camera that particles will spawn at."},"maxSpawnWaitTime": {"type": "float","info": "Minimum distance from the camera that particles will spawn at."},"mirrors": {"type": "array","info": "Array of mirror objects to spawn.","subItemType": {"type": {"type": "float","from": {"table": "MESH_TYPES"}},"position": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}},"rotation": {"x": {"type": "float","min": 0,"max": 359},"y": {"type": "float","min": 0,"max": 359},"z": {"type": "float","min": 0,"max": 359}}}},"description": {"type": "string","multiple": true,"max": 500,"min": 1},"photo": {"type": ["string","object"]},"exhibition": {"type": "string","from": {"table": "exhibitions","key": "slug"}},"frustumCulled": {"type": ["boolean","array"],"itemType": "string"},"lightIntensity": {"type": "float","min": 0.001},"distance": {"type": "int","min": 0},"hideLight": {"type": "boolean"},"hideEnvironment": {"type": "boolean"},"type": {"type": "int","from": {"table": "SCENE_TYPES"}},"directionalLightPosition": {"type": "array","itemType": "number"},"directionalColor": {"type": "color"},"directionalIntensity": {"type": "float"},"ambientColor": {"type": "color"},"ambientIntensity": {"type": "float"},"particles": {"type": "array","itemType": "object","subItemType": {"count": {"type": "int","min": 0,"info": "number of particles to spawn"}}},"circlingLights": {"type": "array","itemType": "object","subItemType": {"color": {"type": "number"},"offset": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}}}},"spatialObjects": {"type": "array","itemType": "object","subItemType": {"action": {"type": "string"},"distance": {"max": {"type": "float"},"min": {"type": "float"}},"audio": {"type": "string"},"target": {"type": "string"}}},"animateObjects": {"type": "array","itemType": "object","subItemType": {"name": {"type": "string"},"animation": {"type": {"type": "string"},"threshold": {"type": "float"}}}},"portal": {"file": {"type": ["int","string","boolean"]},"parent": {"type": "string"},"clip": {"type": "string"},"door": {"type": "string"},"skyIn": {"type": "string"},"skyOut": {"type": "string"},"groundIn": {"type": "string"},"groundOut": {"type": "string"},"placard": {"type": "string"},"placardImage": {"type": ["boolean","string"]},"textureTarget": {"type": "string"},"renderTarget": {"type": "string"},"renderTarget2": {"type": "string"},"triggerAreas": {"type": "string"},"isInsideDoor": {"type": "string"},"isOutsideDoor": {"type": "string"},"isInDoor": {"type": "string"},"showIn": {"type": "string"},"hideIn": {"type": "string"},"ignoreChildren": {"type": "boolean"},"rayCast": {"near": {"type": "number"},"far": {"type": "number"}},"load": {"type": "boolean"},"pos": {"x": {"type": "number"},"y": {"type": "number"},"z": {"type": "number"}}},"ocean": {"name": {"type": "string"}},"clickables": {"type": "array","itemType": ["object","string"],"info": "array of clickable items. uses * as wildcard character at start or end of search string.","subItemType": {"audio": {"type": ["boolean","string"]},"target": {"type": "string"}}},"accessibility": {"type": ["array","string"],"itemType": "string"},"maxTouches": {"type": "int","min": 0,"info": "maximum number of meshes that can be clicked/tapped each click."},"clickableLinks": {"type": "object"},"customMaterials": {"type": "array","itemType": "object","subItemType": {"resolution": {"x": {"type": "float"},"y": {"type": "float"},"info": "the resolution of the shader."},"target": {"type": "string","info": "target mesh name"},"name": {"type": "string","info": "material name"}}},"shadowCam": {"near": {"type": "float","info": "Distance of the near view plane of the shadow cam."},"far": {"type": "float","info": "Distance of the far view plane of the shadow cam."}},"receiveShadow": {"type": "boolean"},"chromaKey": {"type": ["boolean","string","number"]},"chromaKeyDepthTest": {"type": "boolean"},"orbit": {"min": {"type": "float","min": 0},"max": {"type": "float","min": 0}},"triggerVideo": {"type": "boolean"},"triggerVideoPosition": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}},"triggerVideoDistance": {"type": "number"},"triggerAudio": {"type": "boolean"},"glb": {"type": ["boolean","string"]},"positionalAudio": {"type": "boolean"},"positionalAudioDistance": {"type": "float","min": 0},"latk": {"scale": {"type": "array","max": 3,"min": 3},"pos": {"type": "array","max": 3,"min": 3},"layers": {"type": "array"}},"noShadowObjects": {"type": ["array","string"],"itemType": "string"},"receiveNoShadowObjects": {"type": ["array","string"],"itemType": "string"},"castNoShadowObjects": {"type": ["array","string"],"itemType": "string"},"plane": {"width": {"type": "float"},"height": {"type": "float"},"widthSegments": {"type": "float"},"heightSegments": {"type": "float"},"position": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}},"rotation": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}},"displacementScale": {"type": "float"}},"videoBoundAnimation": {"type": "boolean"},"morph": {"startValue": {"type": "float"},"maxFrequency": {"type": "float"},"minFrequency": {"type": "float"},"frequencySpeed": {"type": "float"},"cameraDistanceModifier": {"type": ["float","number"]},"scale": {"type": "float"},"morphName": {"type": "string","min": 3}},"ply": {"materials": {"type": "array","info": "sets the materials of this pointcloud and it's clones. values in the array are 0xffffff hexcolors.","itemType": "number"},"positionOffset": {"type": "float","info": "if a pointcloud gets spawned multiple times, move the clones by this amount * i"},"scaleOffset": {"type": "float","info": "if a pointcloud gets spawned multiple times, scale the clones by this amount * i"},"vertexColors": {"type": "boolean","info": "set to false to disable vertex colors, default is true"},"size": {"type": "float","info": "the size of the points, 1 = 1 meter, 0.01 = 1mm"},"sizeAttenuation": {"type": "boolean","info": "if true, points grow when getting closer to them."},"opacity": {"type": "floatstring","info": "sets the opacity of all points"},"files": {"type": "array","itemType": "string","info": "array of file names to load as ply"},"file": {"type": "string","info": "name of the ply file to load."},"position": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"},"info": "position of the ply file"},"positions": {"type": "array","itemType": "vector3","info": "positions of the ply files"},"rotation": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"},"info": "rotation of the ply file"},"rotations": {"type": "array","itemType": "vector3","info": "rotations of the ply files"},"scale": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"},"info": "scale of the ply file"},"scales": {"type": "array","itemType": "vector3","info": "scales of the ply files"}},"distanceModifier": {"type": "float"},"distanceThreshold": {"type": "float"},"minAlpha": {"type": "float"},"maxAlpha": {"type": "float"},"file": {"type": "string"},"data": {"type": "string"},"positionScaleFactor": {"type": "float"},"pos": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}},"rot": {"x": {"type": "float","max": 359,"min": -359},"y": {"type": "float","max": 359,"min": -359},"z": {"type": "float","max": 359,"min": -359}},"animations": {"loop": {"type": "boolean","default": true},"autoplay": {"type": "boolean","default": true},"clampWhenFinished": {"type": "boolean"},"startOnTouch": {"type": "boolean"},"noLoopAnimations": {"type": "array","itemType": "string"},"pausedAnimations": {"type": "array","itemType": "string"},"timeScale": {"type": ["number","object"]}},"fog": {"color": {"type": "color"},"near": {"type": "number"},"far": {"type": "number"}},"fogexp2": {"color": {"type": "color"},"density": {"type": "number"}},"wireframes": {"type": "array","itemType": "object","subItemType": {"target": {"type": "string"},"transparent": {"type": "boolean"},"opacity": {"type": "number"}}},"clip": {"type": "boolean"},"clipInFallback": {"type": "boolean"},"clipSide": {"type": "string","info": "side of the clipping object to clip with."},"featured": {"type": "boolean","info": "is this a featured artifact?"},"flipVideo": {"type": "boolean","info": "should the video be flipped horizontally?"},"nosort": {"type": "boolean","info": "do not sort objects in z-depth. sometimes helps with multiple layers of transparency"},"shadow": {"type": "boolean","info": "set to false to disable all shadows."},"shadowPlane": {"type": "boolean","info": "shadowplane creates shadows on the floor (in ar mode)."},"showSkybox": {"type": "boolean","info": "shows the skybox in augmented reality mode"},"lookAtCameraObjects": {"type": "array","itemType": ["string","object"],"subItemType": {"name": {"type": "string"},"lookAtSpeed": {"type": "number"}}},"lookAtSpeed": {"type": "float"},"fromLookAtY": {"type": "float"},"lookAtY": {"type": "boolean"},"floatSpawnAtZeroY": {"type": "boolean"},"clones": {"target": {"type": "string"},"action": {"type": "string"},"number": {"type": "number"},"scale": {"type": ["number","object"],"itemType": {"min": {"type": "number"},"max": {"type": "number"}},"info": "the minimum and maximum scale of this clone."},"delay": {"type": ["number","object"],"itemType": {"min": {"type": "number"},"max": {"type": "number"}},"info": "the min and max delay between respawns of this clone"},"rotate": {"type": "boolean","info": "set to false to disable random rotation."},"timeScale": {"type": ["number","object"],"itemType": {"min": {"type": "number"},"max": {"type": "number"}},"info": "animation timeScale of this clone"},"radius": {"type": ["number","object"],"itemType": {"min": {"type": "number"},"max": {"type": "number"}},"info": "the radius the clones can spawn in, in distance from the camera."},"spawnArea": {"type": "string","from": ["circle"],"info": "the form of the spawnarea the clones spawn in"}},"clonesOnMeshes": {"type": "array","itemType": "object","subItemType": {"mesh": {"type": "string"},"parent": {"type": "string"},"number": {"type": "float"},"rotate": {"type": "boolean"},"target": {"type": "string"},"scale": {"min": {"type": "float"},"max": {"type": "float"}},"delay": {"min": {"type": "float"},"max": {"type": "float"}},"respawnDelay": {"min": {"type": "float"},"max": {"type": "float"}}}},"events": {"animation": {"loop": {"type": "array","itemType": "object"},"finished": {"type": "array","itemType": "object"},"times": {"type": "array","itemType": "object"}}},"artificialroom": {"names": {"assets": {"type": "array","itemType": "string"},"clipDoor": {"type": "string"},"gameoverCyborg": {"type": "string"},"gameoverParent": {"type": "string"},"replayCyborg": {"type": "string"},"replayParent": {"type": "string"},"result": {"type": "string"}}},"livedataCategory": {"type": "string","info": "used by livedata objects to load images, osc and other files."},"record3d": {"alpha": {"type": "floatstring","info": "the opacity of this shader","max": 1,"min": 0},"depthHueMultiplier": {"type": "floatstring","info": "factor that multiplies the distance calculated from the depthmap hue value"},"hueRedReducer": {"type": "floatstring"},"depthScale": {"type": "floatstring","info": "scales the z depth of the shader."},"depthThresholdFilter": {"type": "floatstring","info": "removes pixels with a depth value higher than this value."},"filterSize": {"type": "floatstring","info": "changes the number of iterations this shader goes through when eliminating pixels by depth."},"hideModelsOnVideoEnded": {"type": "array","itemType": "string","info": "array of mesh names that should be hidden once the video ended."},"loopVideo": {"type": "boolean","info": "should the video loop"},"maxDepth": {"type": "floatstring","info": "maximum depth of pixels to show"},"minDepth": {"type": "floatstring","info": "minimum depth of pixels to show"},"parentName": {"type": "string","info": "name of the mesh the record3d shader should be parented to"},"permanentAlpha": {"type": "floatstring","info": "alpha value of permanent frames of video or images"},"permanentSeconds": {"type": "array","itemType": "number","info": "which frames of the video should stay visible.","deprecated": true},"images": {"type": "array","itemType": "object","subItemType": {"file": {"type": "string"},"time": {"type": "number"}},"info": "permanent images that should stay on their place"},"pixelDepth": {"type": "floatstring","info": "gets multiplied by the hue to get the final pixel depth."},"ptSize": {"type": "floatstring","info": "size of individual points"},"scale": {"type": "floatstring","min": 0,"info": "scale of the record3d shader"},"useBone": {"type": "boolean","info": "should a parent be used for this shader"},"zOffset": {"type": "string","info": "the zoffset that gets applied to every depth value."},"sizeAttenuation": {"type": "floatstring","min": 0,"info": "factor that multiplies the growth of particles based on their distance to the camera"},"position": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}},"rotation": {"x": {"type": "float"},"y": {"type": "float"},"z": {"type": "float"}}},"analyseAudio": {"type": "boolean","info": "activates analyseAudio functionality"},"audioAnalyserAnimation": {"type": "string","info": "the animation that gets lerped based on audio volume, weight gets set between 0 and 1"},"audioAnalyserAnimations": {"type": "array","itemType": ["string","object"],"info": "array of animations that should listen to audio volume. these animations get lerped between 0 and 1."},"audioAnalyserLights": {"type": "boolean","info": "should the audio volume influence the directionalLight intensity."},"audioAnalyserEmission": {"type": "array","itemType": "object","subItemType": {"target": {"type": "string","info": "name of the mesh to influence"},"color": {"type": "array","itemType": "int","info": "color the emission should lerp to"},"minIntensity": {"type": "number","info": "minimal intensity of the material emission"}},"info": "should the audio volume influence the emission value of a mesh?"},"waves": {"type": "array","itemType": "array","subItemType": "int"},"gui": {"afterSpawnModel": {"title": {"type": "string","info": "title of the gui popup"},"body": {"type": "string","info": "body text of the gui popup"},"button": {"type": "string","info": "button text of the gui popup"}}}}