Create custom models and preserve scale
Read this page as Markdown · Exact proportions · Game interfaces · Model gallery
For the full step-by-step process, use the complete Blender and AI workflow. The game-model guide index links detailed instructions for all 13 supported game types. Current physical control measurements are generated from the shipped GLBs in game-model-reference.json; read how to use that reference before applying transforms.
What you can create
Use an AI connected to your local Blender MCP to model signs, furniture, architecture, game bodies and physical buttons. Export static GLB geometry and materials, then connect game artwork through named skin slots. Betworld supplies live screens, cards, input handling and settlement.
Create replacement game bodies and custom physical-button meshes through game skin contract v2. Use v2 placements to move controls and the display, and numeric clips/motions to animate them. Actions, seat identities and result values remain linked to Betworld. Uploaded GLB names/extras still do not bind actions: use the strict manifest and exact per-game socket catalog. Separate decorative props remain supported for scenery.
Custom world props and custom player avatars are separate pipelines. The world prop uploader accepts static scenery, not humanoid rigs. The built-in player previews in the gallery are scale references; uploading one as a world prop does not make it an animated player.
Start from the actual game reference
- Create a world on Betworld and obtain its world credential.
- Install the Blender bridge and connect your AI to local Blender MCP.
- Download the world and assets. The bridge places the native game templates at their correct scale.
- Keep the game entity anchor and all native meshes as a locked reference. Build new artwork in a separate collection.
- Place a player-height reference beside the station, on the same floor. Keep the native screen, controls, card paths and player approaches visible while modeling.
- For a replacement skin, export body/button/surface assets separately and use
game_skin_save. For surrounding scenery, upload separate props. Keep a realkind: "game"entity in either case.
Downloading through the bridge is the preferred workflow because it applies the source-model scale for you. Do not multiply an already downloaded game by the source scale again.
Preserve table height relative to the player
Betworld's units are game units. Do not assume that one raw GLB unit is one real-world meter or change the table to match a real casino's dimensions.
| Measurement | Source-model units | World units |
|---|---|---|
| Canonical bare player body | 1.818600 | 2.852274 |
| Walking eye height | 1.683000 | 2.639600 |
| Blackjack playing plane | 0.877903 | 1.376895 |
| Baccarat playing plane | 0.877904 | 1.376895 |
| Multiplayer Blackjack playing plane | 0.876207 | 1.374234 |
The shared source-to-world scale is 1.5683897801544864. Baccarat's playing plane is 48.2736079% of the canonical body height. Blackjack uses almost the same ratio; Multiplayer Blackjack is 48.1803147%. Preserve those relationships rather than estimating from a screenshot.
The canonical body measurement excludes hair and hats. A clothed player preview can therefore be taller. The physics collision capsule is also a different measurement; do not use it as the visual body height when sizing furniture. The table rim can sit above the playing plane. Raising the cards to the rim would change their intended alignment.
For an authoring reference with canonical body height H, Baccarat's playing plane should be H * 0.48273607884945505. For the actual Betworld game, retain the downloaded dimensions instead of rescaling anything. The world schema requires every game entity to have a supporting floor elevation Y = 0–64 and scale [1, 1, 1].
Source files versus world placement
The native game collection uses source units. Imported directly into Blender, the canonical body reference is Z = 1.818600 and the Baccarat plane is Z = 0.877904. After applying the shared scale once, those become Z = 2.852274 and Z = 1.376895.
Doubler and Crash come from the prop and display collection. They use their layout-specific scales, currently 1.05 and 0.63 respectively. Do not apply the card-table scale to them. The machine-readable proportions distinguish these libraries.
World JSON is Y-up; Blender is Z-up: world [x, y, z] maps to Blender (x, -z, y). Keep the floor, model origin and vertical direction consistent. A negative scale or an unapplied axis conversion can mirror controls or move a decorative panel into the player approach.
Optional Blackjack or Baccarat scenery
Build side trim, a pedestal surround, separate supports or a nearby sign around the native table. Keep the original table top, monitors, card slots and buttons. Place the native template in a locked reference collection so the AI cannot accidentally export or resize it.
For Baccarat, protect the Player, Banker and Tie betting regions, player and banker card slots, deck and stake monitor. For Blackjack, protect Hit, Stand, Double, Split, the dealer/player/split slots and the Bet/Settings monitor. Multiplayer Blackjack has three distinct seat interfaces attached to one table; do not create additional standalone game entities for those seats.
Do not build a new solid table top over the functional one. It can cover the controls even if it looks correct in a still render. Do not bake cards, chip amounts, odds, results or active-button states into the artwork. The client owns those visuals.
Design a custom Video Poker machine
Use the native cabinet as a locked reference. Build a replacement body using the skin workflow, or add separate scenery panels and a marquee. Preserve these areas:
| Region | Required behavior supplied by Betworld |
|---|---|
| Main screen | Paytable, five cards, status and results |
| Five card targets | Hold/unhold the corresponding card index, 0–4 |
| Deal / Draw | Start a hand or replace the unheld cards, depending on state |
| Settings | Open the supported bet settings |
| Paytable | Open the native settings/paytable interface |
The screen is 3.82 × 2.865 world units, centered at [0, 2.80, 0.51] in station-local Y-up coordinates. Use the five card hit regions in betting-interfaces.json and current physical button measurements in game-model-reference.json. The older generated deck in the interface reference is a fallback hidden when the authored native controls are present. Do not use it to locate the current cabinet's buttons. The Video Poker guide explains both coordinate spaces and the five physical Hold controls.
The separate betting-machine reference lists the required working areas for Mines, Keno, Drago Tower, Dice, Limbo, Plinko, Coinflip, Doubler and Crash as well.
Model and export in Blender
Create clean, low-complexity meshes. Prefer a few broad material regions, legible signage and small bevels. Use repeated assets as instances in the world rather than uploading many near-identical copies. Reusing one GLB saves download space, although each placed instance still consumes entity and memory budgets.
Apply the modifiers needed to produce the final static geometry. Export a self-contained GLB with embedded textures. Do not include cameras, lights, skins, animation, external URLs or arbitrary metadata. A local Python script may create the mesh in Blender; that script stays on your machine and is never submitted as world content. Do not upload .blend files as props.
For replacement skins use Upload selected skin mesh and the skin contract. The remainder of this section describes separate scenery props. Select only the new decorative meshes and choose Upload selected prop in the Betworld bridge. The bridge exports, uploads, creates a prop anchor and restores the intended placement scale. Then upload the world draft to save that placement. Changing your local mesh after upload does not update the remote asset; upload the revised artwork and use the new returned asset reference.
Scenery prop normalization and placement
The renderer normalizes an uploaded prop so its longest bounding-box dimension is 1. Its bottom is placed at local Y = 0 and its horizontal bounding-box center is centered on the origin. A source prop whose longest dimension is 2.4 therefore needs a uniform entity scale of [2.4, 2.4, 2.4] to restore that size. The bridge handles this automatically.
Position the prop's bottom-center anchor, not its geometric center. Preserve your intended aspect ratio with uniform scale. Stretching a single dimension can make a cabinet appear to fit while moving its edges across the functional screen.
Uploaded scenery currently uses its oriented bounding box for collision. A single U-shaped surround produces a solid box that can block the player from reaching the table. Export left panel, right panel and other solid pieces separately. Avoid putting an overhead prop's collision box across a required walking route. There is no user-controlled script or collider override to make arbitrary scenery interactive or non-colliding.
Budgets
| Budget | Limit |
|---|---|
| One uploaded prop after conversion | 4,000,000 bytes |
| Owner's custom asset library | 100,000,000 bytes |
| World downloads, including manifest and standard assets | 100,000,000 bytes |
| Placed entities | 1,000,000 |
| Estimated world memory | 500,000,000 bytes |
| One embedded texture | 2048 × 2048 maximum |
| Decoded pixels per prop | 4,194,304 |
Check the returned budget after each asset or layout change. Every limit applies; see limits and performance for download accounting and memory estimates.
Wire your game artwork
- Call
game_skin_contractwith the game's asset ID, such asvideopoker. - Export and upload your body and button meshes with
asset_upload. - Copy the contract's starter manifest, assign a unique skin
idand replace the body hash with your uploaded hash. - Add bindings using the exact
slotnames from the catalog and your uploadedassethashes. - Call
game_skin_savewith the manifest, targetentityIdsand current draftrevision. - Use the returned revision for your next edit, and preview the station before publishing.
The platform fits each mesh into its reference socket, applies v2 placements/clips, and supplies the socket's action. For example, each Video Poker Hold slot controls its assigned card, while Deal/Draw follows the current hand state. Omitted bindings retain their native appearance. See game skin contract for the complete manifest and MCP tools for request and response examples.
Copyable AI brief
Read https://docs.betworld.gg/llms.txt, /custom-models/, /betting-models/, /model-proportions.json and /betting-interfaces.json. Connect to my Betworld world through MCP and download it into Blender. Design an original ivory-and-teal Baccarat surround using separate static props around the native game. Keep the native table, floor height, scale, Player/Banker/Tie areas, card slots and monitor unchanged. Use the canonical body reference and preserve the 0.48273607884945505 playing-plane/body-height ratio. Leave every interaction and player approach clear. For full replacement bodies, switch to the documented game-skin contract and named sockets. Never upload scripts. Export only the decorative pieces, upload them through the bridge, save a draft and report the asset sizes, placement scale and remaining world budgets.
For Video Poker, substitute its live screen, five card hit targets and current native physical-control measurements. Use the skin contract to replace the body and named physical buttons. Use v2 placements to move controls or the complete display. Video Poker supports display clips; its card ranks and Hold identities come from the live hand.