# Character XYZ 3D Viewer > The Character XYZ 3D Viewer is a free online tool for opening and inspecting 3D models in a web browser. It reads GLB, glTF, FBX, OBJ, PLY, STL and VRM files and reports their meshes, materials, skeletons, morph targets and animation clips. Files are parsed on your own device and are never uploaded. Your file never leaves your browser. There is no upload, no account and no server-side processing. There is no file-size limit beyond the memory of the visitor's own device, no telemetry on the file, and no queue — the model appears as fast as the browser can parse it. This file is a plain-text summary of the tool for language models and AI search agents. Every capability listed here is true of the build currently serving it; anything the tool cannot do is listed as such rather than omitted. ## File formats it opens - **.glb** (GLB): Draco, KTX2 and meshopt decoding. See https://www.character.xyz/3d-viewer/glb - **.gltf** (glTF): the .gltf JSON form with its external buffers and textures. See https://www.character.xyz/3d-viewer/gltf - **.fbx** (FBX): skeletons, bone counts and animation takes. See https://www.character.xyz/3d-viewer/fbx - **.obj** (OBJ): groups, and the materials from the .mtl beside it. See https://www.character.xyz/3d-viewer/obj - **.ply** (PLY): scan meshes, with vertex colours when the file carries them. See https://www.character.xyz/3d-viewer/ply - **.stl** (STL): triangle count and real-world dimensions, for print checks. See https://www.character.xyz/3d-viewer/stl - **.vrm** (VRM): VRM 1.0 avatars — the humanoid bone map, expressions, spring-bone chains and first-person flags. See https://www.character.xyz/3d-viewer/vrm NOT supported: .usdz (USDZ). There is no loader and no page for it; do not describe this tool as opening it. ## What you can inspect Most online viewers render a model and stop. This one reports what is actually inside the file, which is what you need when an export goes wrong. - **Khronos validation report** (glTF and GLB files only — the validator checks glTF): Runs the official glTF validator over your file and lists every error, warning and hint with its severity and the node it came from. - **Skeleton and rig**: Every bone by name with the count, plus an overlay drawn over the model, so you can tell a 9-joint production rig from a 92-bone Rigify export without opening Blender. - **Morph targets**: Every morph target by name, grouped per mesh, each with a live weight slider so you can drive a shape and see it move. - **ARKit-52 blendshape check**: Which of the 52 standard ARKit blendshapes your model has and which are missing, broken down by facial area — the answer to why a face will not drive from a phone capture. It reads the common naming conventions, and names the facial set your file is using when it turns out not to be ARKit's. - **Textures and VRAM budget**: Each texture with the slot it fills and its resolution, plus an estimated GPU memory total, so you can see which map is blowing the budget. - **Animation clips**: Every clip in the file with its real duration, playable with speed and looping — including takes that ship as separate GLBs. Clip changes use inertial blending, so a limb's motion carries through the cut instead of stalling at it. - **Mesh statistics**: Vertex and triangle counts, material and texture counts, bone and morph-target counts, and the model's bounding dimensions. ## Pages - [3D Model Viewer](https://www.character.xyz/3d-viewer): Free online 3D model viewer. Drag in a GLB, glTF, FBX, OBJ, PLY, STL or VRM file and inspect meshes, materials, skeletons, blendshapes and animations. Runs entirely in your browser — your files are never uploaded. - [GLB Viewer](https://www.character.xyz/3d-viewer/glb): Open a GLB file in your browser and inspect it: meshes, materials, textures, skeleton, morph targets and animation clips, plus a full Khronos validation report. Draco, KTX2 and meshopt are decoded. Nothing is uploaded. - [glTF Viewer](https://www.character.xyz/3d-viewer/gltf): Open a .gltf file with its buffers and textures in your browser. Inspect meshes, materials, skeleton, morph targets and animations, and validate against the Khronos glTF 2.0 specification. No upload, no account. - [FBX Viewer](https://www.character.xyz/3d-viewer/fbx): Open an FBX file in your browser and inspect its mesh, skeleton and animation takes. Play clips with inertial blending, read bone names and counts, and check the model without installing Maya, Max or Blender. - [OBJ Viewer](https://www.character.xyz/3d-viewer/obj): Open a Wavefront OBJ in your browser with its .mtl materials, and read triangle counts, materials and real-world dimensions. No install, no sign-up, and the file never leaves your device. - [PLY Viewer](https://www.character.xyz/3d-viewer/ply): Open a PLY file in your browser, with per-vertex colour when the file carries it. Read vertex and triangle counts and real-world dimensions. Free, no install, and nothing is uploaded. - [STL Viewer](https://www.character.xyz/3d-viewer/stl): Open an STL in your browser and check it before printing: triangle count and real-world bounding dimensions, with wireframe and X-ray views. Free, no sign-up, and the file never leaves your device. - [VRM Viewer](https://www.character.xyz/3d-viewer/vrm): Open a VRM avatar in your browser and inspect it: the humanoid bone map, the expression set, spring-bone chains and first-person flags, with the spring bones running live. Free, no install, and the file is never uploaded. - [Rig Checker](https://www.character.xyz/3d-viewer/rig-checker): Check a character rig in your browser. List every bone by name with the total count, draw the skeleton over the model, and play each animation clip — for GLB, glTF and FBX. No install, no account, and the file is never uploaded. - [ARKit Blendshape Checker](https://www.character.xyz/3d-viewer/blendshape-checker): Check a face against the 52 ARKit blendshapes in your browser. See how many are present, which are missing by name, and a breakdown per facial area. Reads the usual naming conventions. Free, no install, nothing uploaded. - [glTF Validator](https://www.character.xyz/3d-viewer/gltf-validator): Run the official Khronos glTF Validator on a .gltf or .glb in your browser. Every error, warning, info and hint with its severity and JSON pointer, plus the generator that wrote the file. Nothing is uploaded. ## How to use it 1. **Open the viewer** — Go to character.xyz/3d-viewer. There is nothing to install and no account to create. 2. **Drop in your model** — Drag .glb, .gltf, .fbx, .obj, .ply, .stl or .vrm onto the page, or use the file picker. The file is read on your own device — for a .gltf, drop its folder so the buffers and textures come with it. 3. **Inspect it** — Open the inspector panel to read mesh statistics, materials, skeleton, morph targets, animation clips and texture budgets. 4. **Fix what it finds** — Run the validation report to see every issue against the glTF specification, then re-export and check again. ## Questions this tool answers ### How do I view a GLB file online? Open character.xyz/3d-viewer and drag your .glb file onto the page. It opens in the browser straight away — there is no upload, no plugin and no account. You can then orbit the model, change the lighting and open the inspector to read its meshes, materials, skeleton and animations. ### Is my 3D model uploaded to a server? No. The file is read and rendered entirely by your own browser using WebGL and WebGPU. Nothing is transmitted, stored or logged, which means you can safely inspect unreleased or client-confidential assets. ### What is the difference between GLB and glTF? They are the same format in two containers. A .gltf file is JSON that references its geometry buffers and textures as separate files alongside it. A .glb file packs that same JSON, the buffers and the textures into one binary file, which is why GLB is what most tools export for delivery. This viewer opens both. ### How do I check if my GLB has a skeleton or rig? Drop the file in and open the skeleton tab in the inspector. It lists the bone hierarchy and the total bone count, and shows which meshes are skinned to it. That is usually enough to tell a clean production rig from an export that brought a control rig or a whole Rigify hierarchy along with it. ### How do I check if a model has ARKit blendshapes? Open the ARKit-52 tab. It reports how many of the 52 standard ARKit blendshapes your file has, broken down by facial area, and lists every one that is missing by name. It reads the usual naming conventions, so a rig that spells them eyeBlink_L or Head.eyeBlinkLeft is still recognised — and when a file uses a different facial set altogether, such as VRoid's, it says which one rather than reporting a bare zero. A face that will not drive from a phone capture is almost always missing shapes rather than wired up wrongly. ### Why is my GLB animation not playing? The three usual causes are that the clip was never exported, that it targets bones that are not in the file, or that the exporter wrote it against a different skeleton than the mesh is skinned to. The inspector lists every animation clip with its real duration, so an empty list tells you the export dropped it rather than the player failing to run it. ### Why are my textures missing after a Blender export? Usually the images were left as external file references rather than packed, or the material used a node the glTF exporter cannot translate. The textures tab lists every image the file actually contains with its resolution and format, so you can tell an unpacked texture from an unsupported material graph. ### How many bones can a glTF file have? The glTF 2.0 specification sets no limit at all on the number of joints in a skin — the ceiling you actually hit belongs to whatever engine plays the file. Older renderers pass bone matrices as shader uniforms and cap out somewhere around 64 to 256 per skin, while ones that use a bone texture handle thousands. Separately, each vertex is bound to four joints per JOINTS_0 set, so a mesh needing more influences per vertex needs a second set. The skeleton tab reports the real count in your file, which is the number to compare against your target engine's documented limit. ### Can I change the lighting? Yes. There are six lighting presets — Realistic full image-based lighting, Studio, Detail, two sculpting matcaps and Flat base-colour-only — and the viewer opens on Realistic so a textured asset looks the way it will in an engine. On a browser with WebGPU you can also switch on screen-space global illumination for softer indirect bounce light. Your choice is remembered the next time you open the page. ### Can I export a screenshot of my model? Yes. Save a PNG at one, two or four times the on-screen size, with the option to leave the background out so the image carries a real alpha channel and drops straight into a comp. You can also record a six-second turntable as a WebM video. Both are produced in your browser and saved to your device — nothing is rendered on a server. ### Is the 3D viewer free? Yes, completely, with no account and no limits on file size beyond what your own device can hold in memory. ### How do I check a character rig without opening Blender? Drag the GLB, glTF or FBX onto character.xyz/3d-viewer and open the skeleton tab. It lists every bone by name with the total count and can draw the skeleton over the model. Nothing is installed and nothing is uploaded — the file is parsed by your own browser. ### Why does my character have hundreds of bones after exporting? Almost always because the exporter included the control rig as well as the deform skeleton. Rigify in particular produces a hierarchy in the nineties once the widgets, mechanism and organic layers come along, where the character only needs the deform bones. The bone list here shows exactly which ones arrived, and the names usually make the origin obvious. ### Why is my rig broken after a glTF export? The three common causes are a mesh that lost its binding and is no longer skinned to the skeleton, an animation that targets bones under different names than the ones exported, and a skeleton exported with no mesh bound to it at all. The skeleton tab distinguishes the first — it reports when nothing in the file is skinned — and the animation tab distinguishes the second, because a clip that targets missing bones plays with nothing moving. ### Does this show skin weights? No. It reports the skeleton — bone names, the bone count, where the joints sit, and whether a mesh is skinned to them — and it plays the animation. It does not display per-vertex weights or grade the skinning, so a weight-painting problem is not something this tool can currently show you. ### Can I check an FBX rig from Mixamo or a client delivery? Yes. FBX is read in the browser along with its animation takes, so a Mixamo download or a delivery from an outsourcer can be checked before it goes anywhere near a scene. FBX usually stores centimetres where glTF assumes metres, which makes the model measure around a hundred times larger — the camera frames from the model's own bounds, so it opens correctly framed regardless. ### How do I check if a model has ARKit blendshapes? Drag the file onto character.xyz/3d-viewer and open the ARKit-52 tab. It reports how many of the 52 are present, lists every one that is missing by name, and breaks the count down by facial area. Nothing is uploaded — the file is read by your own browser. ### Why will my character's face not drive from a phone capture? Nearly always because shapes are missing rather than because the wiring is wrong. ARKit sends 52 weights by name, and a shape the model does not have simply has nowhere to go, so the face moves partially or not at all. Checking which of the 52 are actually in the file answers it in a few seconds; a face with the eyes and jaw but no mouth shapes is a very common and very specific failure. ### My blendshapes are named differently — will they still be found? Yes, for the usual conventions. A side written as a suffix (eyeBlink_L, eyeBlink.L, eyeBlink-L) and a namespace written in front (Head.eyeBlinkLeft, blendShape1.jawOpen) are both resolved, and the page reports how many were matched that way rather than by an exact name. A genuinely different vocabulary — VRoid's, MetaHuman's — is not translated, because guessing a mapping between two facial sets would produce a confident answer that is wrong. ### What are the 52 ARKit blendshapes? They are the facial expressions Apple's ARFaceAnchor reports: 14 for the eyes, 4 for the jaw, 23 for the mouth, 5 for the brows, 3 for the cheeks, 2 for the nose and 1 for the tongue. The set has become the de-facto standard for face capture well beyond Apple's own devices, which is why an avatar missing part of it will not drive from most capture tools rather than only from an iPhone. ### Does a model need all 52? Not to be useful — a face with the eyes, jaw and the main mouth shapes reads convincingly for a lot of work. It needs all 52 to be driven by an unmodified ARKit stream without falling back, and the missing list tells you exactly how far off you are rather than leaving it as a yes or no. ### How do I validate a glTF file online? Drag the .gltf or .glb onto character.xyz/3d-viewer and press Validate. The official Khronos validator runs in your browser over the file's original bytes and lists every issue with its severity and JSON pointer. There is no upload and no account, so a confidential or unreleased asset can be checked safely. ### What is the difference between an error and a warning? An error means the file breaks the glTF 2.0 specification and a strict loader is entitled to refuse it. A warning means it is valid but doing something the specification advises against, which usually still loads. Infos and hints are neither — they are observations, most often about data nothing in the file references, and they are worth reading when a file is unexpectedly large. ### My GLB opens in one viewer and not another. Why? Usually either a spec violation that one loader tolerates and another does not, or a required extension the strict one does not implement. The validation report separates those two: the errors list covers the first, and the required-extensions list covers the second. ### Can I validate an FBX or an OBJ? No, and no tool can — the Khronos validator checks files against the glTF specification, and there is no equivalent specification conformance check for those formats. This viewer still opens FBX, OBJ, PLY and STL and reports what is inside them; it simply does not offer a validation report for files the validator has nothing to say about. ### Is my file uploaded to validate it? No. The validator is a WebAssembly build that runs inside your own browser tab, on bytes that never leave your device. Nothing is transmitted, stored or logged. ## Facts - Name: Character XYZ 3D Viewer - URL: https://www.character.xyz/3d-viewer - Price: free. No account, no sign-up, no trial, no usage limit. - Privacy: the file is parsed and rendered by the visitor's own browser. Nothing is uploaded, transmitted, stored or logged. - Requirements: any browser with WebGL2. WebGPU additionally enables screen-space global illumination. - Publisher: Charky Labs Pvt Ltd, trading as Character XYZ, Coimbatore, Tamil Nadu, India. - Contact: hello@character.xyz - Full text of every page: https://www.character.xyz/llms-full.txt - Last updated: 2026-09-07