1 / 6
Controller & Headset Wall Mount - 4 Size Presets, Parametric J-Hook (concept) — image 1
1 / 6

Controller & Headset Wall Mount - 4 Size Presets, Parametric J-Hook (concept)

Order a print of this model

We calculate the final price from your selected file. You review and accept it before payment.

Saved on this device.

Wall mount with two J-hook prongs and a cable gap for controllers and a headset, 4 sizes. Not test-printed.

Rating
0 / 5
Likes
0
Downloads
2
Makes
0
Views
5
Reviews
0

Updated at source:

Model information

Category
Video Games
License
Creative Commons — Attribution

Wall mount for a game controller or headset, in 4 size presets: Compact (Switch Pro class), Standard (Xbox class), Wide (PS5 class) and Headset. A flat plate with two keyhole-style hanging slots that open at the top edge, and two J-hook prongs. The gap between the prongs is a cable notch, so a charging cable can hang straight down.

READ FIRST - HONEST LIMITS

- Not test-printed and not load-tested. This is a concept with a full recipe.

- The four presets are design starting points, not verified fits. Controller and headset sizes vary by model and revision. Measure your own grip or headband before printing.

- The plate and the hook prongs are separate closed shells that overlap. They are not boolean-fused, so let your slicer merge them (run the slicer repair step if it complains).

- What it can carry depends on your wall, screws and anchors, not on this file. Do not hang anything you cannot afford to drop until you have checked the print.

- Print in PETG or another tough material, not brittle PLA. Plate back face down, 0.2 mm layers, 4+ perimeters.

- The elbow of each hook is faceted, not a true arc. The Playground exports a triangulated mesh.

SIZES (mm)

Compact: plate 70 x 95, prong gap 26, arm depth 36, lip 20, prong width 12, arm thickness 6

Standard: plate 76 x 100, prong gap 32, arm depth 40, lip 22, prong width 14, arm thickness 6

Wide: plate 84 x 105, prong gap 36, arm depth 44, lip 24, prong width 14, arm thickness 6

Headset: plate 100 x 130, prong gap 44, arm depth 70, lip 20, prong width 22, arm thickness 8

Plate: 3 mm back layer with 5 mm slots, 2 mm front layer with 10 mm slots (stepped slot for the screw head), slot depth 24 mm.

HOW IT WAS MADE

Built in the TrueGeometry Playground with native commands only (/set_var, /parametric box, /bind, /sm_params, /sm_part, /rotate, /move). No booleans: the plate is boxes laid around open slots, each hook prong is one closed extrusion of a J profile with a rear gusset. AI-assisted design and writing.

Full article with images and FAQ: https://blog.truegeometry.com/0_0_0_0/blogs/post-d7ba5f23.html

HOW TO CUSTOMISE

Paste the recipe below into the Playground Script panel and press Run. Change the _W, _H, _X variables to resize a plate, or the numbers in a /sm_part line to resize a hook. The STL attached is the 4-preset layout; cut out the preset you want in your slicer.

FULL PLAYGROUND COMMAND RECIPE

// TrueGeometry controller + headset wall mount, 4 size presets. Units mm, Y up, wall plane z=0, hooks point +Z.

// Plate: 2 stepped layers of overlapping closed boxes (no booleans). Hooks: /sm_part J profile (one closed extrusion per prong).

// To resize a plate edit its _W/_H/_SL variables; to resize a hook edit the numbers in its /sm_part line (see size table).

/set_var T1 3

/set_var T2 2

/set_var SLOTW 5

/set_var HEADW 10

/set_var SLOTL 24

// ---- SP: Compact (Switch Pro class) ----

/set_var SP_W 70

/set_var SP_H 95

/set_var SP_X -165

/set_var SP_SX 19.6

/parametric box 1 1 1

/tag_last SPBackBase

/setprop @SPBackBase color #f97316

/bind @SPBackBase scale.x SP_W

/bind @SPBackBase scale.y SP_H-SLOTL

/bind @SPBackBase scale.z T1

/bind @SPBackBase position.x SP_X

/bind @SPBackBase position.y -SLOTL/2

/bind @SPBackBase position.z T1/2

/parametric box 1 1 1

/tag_last SPBackLeft

/setprop @SPBackLeft color #f97316

/bind @SPBackLeft scale.x (SP_W/2-SP_SX-SLOTW/2)

/bind @SPBackLeft scale.y SLOTL

/bind @SPBackLeft scale.z T1

/bind @SPBackLeft position.x SP_X-(SP_W/2+SP_SX+SLOTW/2)/2

/bind @SPBackLeft position.y SP_H/2-SLOTL/2

/bind @SPBackLeft position.z T1/2

/parametric box 1 1 1

/tag_last SPBackRight

/setprop @SPBackRight color #f97316

/bind @SPBackRight scale.x (SP_W/2-SP_SX-SLOTW/2)

/bind @SPBackRight scale.y SLOTL

/bind @SPBackRight scale.z T1

/bind @SPBackRight position.x SP_X+(SP_W/2+SP_SX+SLOTW/2)/2

/bind @SPBackRight position.y SP_H/2-SLOTL/2

/bind @SPBackRight position.z T1/2

/parametric box 1 1 1

/tag_last SPBackMid

/setprop @SPBackMid color #f97316

/bind @SPBackMid scale.x (2*SP_SX-SLOTW)

/bind @SPBackMid scale.y SLOTL

/bind @SPBackMid scale.z T1

/bind @SPBackMid position.x SP_X

/bind @SPBackMid position.y SP_H/2-SLOTL/2

/bind @SPBackMid position.z T1/2

/parametric box 1 1 1

/tag_last SPFrontBase

/setprop @SPFrontBase color #f97316

/bind @SPFrontBase scale.x SP_W

/bind @SPFrontBase scale.y SP_H-SLOTL

/bind @SPFrontBase scale.z T2

/bind @SPFrontBase position.x SP_X

/bind @SPFrontBase position.y -SLOTL/2

/bind @SPFrontBase position.z T1+T2/2

/parametric box 1 1 1

/tag_last SPFrontLeft

/setprop @SPFrontLeft color #f97316

/bind @SPFrontLeft scale.x (SP_W/2-SP_SX-HEADW/2)

/bind @SPFrontLeft scale.y SLOTL

/bind @SPFrontLeft scale.z T2

/bind @SPFrontLeft position.x SP_X-(SP_W/2+SP_SX+HEADW/2)/2

/bind @SPFrontLeft position.y SP_H/2-SLOTL/2

/bind @SPFrontLeft position.z T1+T2/2

/parametric box 1 1 1

/tag_last SPFrontRight

/setprop @SPFrontRight color #f97316

/bind @SPFrontRight scale.x (SP_W/2-SP_SX-HEADW/2)

/bind @SPFrontRight scale.y SLOTL

/bind @SPFrontRight scale.z T2

/bind @SPFrontRight position.x SP_X+(SP_W/2+SP_SX+HEADW/2)/2

/bind @SPFrontRight position.y SP_H/2-SLOTL/2

/bind @SPFrontRight position.z T1+T2/2

/parametric box 1 1 1

/tag_last SPFrontMid

/setprop @SPFrontMid color #f97316

/bind @SPFrontMid scale.x (2*SP_SX-HEADW)

/bind @SPFrontMid scale.y SLOTL

/bind @SPFrontMid scale.z T2

/bind @SPFrontMid position.x SP_X

/bind @SPFrontMid position.y SP_H/2-SLOTL/2

/bind @SPFrontMid position.z T1+T2/2

/sm_params 12 1 0.44

/sm_part -2 -14 14 0 26 0 27.74 0.15 31.0 1.34 33.66 3.57 35.4 6.58 36.0 10.0 36 18 33.0 20 30 18 30.0 10.0 29.46 8.0 28.0 6.54 26.0 6.0 -2 6

/tag_last SPProngL

/setprop @SPProngL color #f97316

/rotate @SPProngL 0 -90 0

/move @SPProngL -178.0 -29.5 5

/sm_params 12 1 0.44

/sm_part -2 -14 14 0 26 0 27.74 0.15 31.0 1.34 33.66 3.57 35.4 6.58 36.0 10.0 36 18 33.0 20 30 18 30.0 10.0 29.46 8.0 28.0 6.54 26.0 6.0 -2 6

/tag_last SPProngR

/setprop @SPProngR color #f97316

/rotate @SPProngR 0 -90 0

/move @SPProngR -140.0 -29.5 5

// ---- XB: Standard (Xbox class) ----

/set_var XB_W 76

/set_var XB_H 100

/set_var XB_X -55

/set_var XB_SX 21.3

/parametric box 1 1 1

/tag_last XBBackBase

/setprop @XBBackBase color #14b8a6

/bind @XBBackBase scale.x XB_W

/bind @XBBackBase scale.y XB_H-SLOTL

/bind @XBBackBase scale.z T1

/bind @XBBackBase position.x XB_X

/bind @XBBackBase position.y -SLOTL/2

/bind @XBBackBase position.z T1/2

/parametric box 1 1 1

/tag_last XBBackLeft

/setprop @XBBackLeft color #14b8a6

/bind @XBBackLeft scale.x (XB_W/2-XB_SX-SLOTW/2)

/bind @XBBackLeft scale.y SLOTL

/bind @XBBackLeft scale.z T1

/bind @XBBackLeft position.x XB_X-(XB_W/2+XB_SX+SLOTW/2)/2

/bind @XBBackLeft position.y XB_H/2-SLOTL/2

/bind @XBBackLeft position.z T1/2

/parametric box 1 1 1

/tag_last XBBackRight

/setprop @XBBackRight color #14b8a6

/bind @XBBackRight scale.x (XB_W/2-XB_SX-SLOTW/2)

/bind @XBBackRight scale.y SLOTL

/bind @XBBackRight scale.z T1

/bind @XBBackRight position.x XB_X+(XB_W/2+XB_SX+SLOTW/2)/2

/bind @XBBackRight position.y XB_H/2-SLOTL/2

/bind @XBBackRight position.z T1/2

/parametric box 1 1 1

/tag_last XBBackMid

/setprop @XBBackMid color #14b8a6

/bind @XBBackMid scale.x (2*XB_SX-SLOTW)

/bind @XBBackMid scale.y SLOTL

/bind @XBBackMid scale.z T1

/bind @XBBackMid position.x XB_X

/bind @XBBackMid position.y XB_H/2-SLOTL/2

/bind @XBBackMid position.z T1/2

/parametric box 1 1 1

/tag_last XBFrontBase

/setprop @XBFrontBase color #14b8a6

/bind @XBFrontBase scale.x XB_W

/bind @XBFrontBase scale.y XB_H-SLOTL

/bind @XBFrontBase scale.z T2

/bind @XBFrontBase position.x XB_X

/bind @XBFrontBase position.y -SLOTL/2

/bind @XBFrontBase position.z T1+T2/2

/parametric box 1 1 1

/tag_last XBFrontLeft

/setprop @XBFrontLeft color #14b8a6

/bind @XBFrontLeft scale.x (XB_W/2-XB_SX-HEADW/2)

/bind @XBFrontLeft scale.y SLOTL

/bind @XBFrontLeft scale.z T2

/bind @XBFrontLeft position.x XB_X-(XB_W/2+XB_SX+HEADW/2)/2

/bind @XBFrontLeft position.y XB_H/2-SLOTL/2

/bind @XBFrontLeft position.z T1+T2/2

/parametric box 1 1 1

/tag_last XBFrontRight

/setprop @XBFrontRight color #14b8a6

/bind @XBFrontRight scale.x (XB_W/2-XB_SX-HEADW/2)

/bind @XBFrontRight scale.y SLOTL

/bind @XBFrontRight scale.z T2

/bind @XBFrontRight position.x XB_X+(XB_W/2+XB_SX+HEADW/2)/2

/bind @XBFrontRight position.y XB_H/2-SLOTL/2

/bind @XBFrontRight position.z T1+T2/2

/parametric box 1 1 1

/tag_last XBFrontMid

/setprop @XBFrontMid color #14b8a6

/bind @XBFrontMid scale.x (2*XB_SX-HEADW)

/bind @XBFrontMid scale.y SLOTL

/bind @XBFrontMid scale.z T2

/bind @XBFrontMid position.x XB_X

/bind @XBFrontMid position.y XB_H/2-SLOTL/2

/bind @XBFrontMid position.z T1+T2/2

/sm_params 14 1 0.44

/sm_part -2 -14 14 0 30 0 31.74 0.15 35.0 1.34 37.66 3.57 39.4 6.58 40.0 10.0 40 20 37.0 22 34 20 34.0 10.0 33.46 8.0 32.0 6.54 30.0 6.0 -2 6

/tag_last XBProngL

/setprop @XBProngL color #14b8a6

/rotate @XBProngL 0 -90 0

/move @XBProngL -71.0 -32.0 5

/sm_params 14 1 0.44

/sm_part -2 -14 14 0 30 0 31.74 0.15 35.0 1.34 37.66 3.57 39.4 6.58 40.0 10.0 40 20 37.0 22 34 20 34.0 10.0 33.46 8.0 32.0 6.54 30.0 6.0 -2 6

/tag_last XBProngR

/setprop @XBProngR color #14b8a6

/rotate @XBProngR 0 -90 0

/move @XBProngR -25.0 -32.0 5

// ---- PS: Wide (PS5 class) ----

/set_var PS_W 84

/set_var PS_H 105

/set_var PS_X 55

/set_var PS_SX 23.5

/parametric box 1 1 1

/tag_last PSBackBase

/setprop @PSBackBase color #3b82f6

/bind @PSBackBase scale.x PS_W

/bind @PSBackBase scale.y PS_H-SLOTL

/bind @PSBackBase scale.z T1

/bind @PSBackBase position.x PS_X

/bind @PSBackBase position.y -SLOTL/2

/bind @PSBackBase position.z T1/2

/parametric box 1 1 1

/tag_last PSBackLeft

/setprop @PSBackLeft color #3b82f6

/bind @PSBackLeft scale.x (PS_W/2-PS_SX-SLOTW/2)

/bind @PSBackLeft scale.y SLOTL

/bind @PSBackLeft scale.z T1

/bind @PSBackLeft position.x PS_X-(PS_W/2+PS_SX+SLOTW/2)/2

/bind @PSBackLeft position.y PS_H/2-SLOTL/2

/bind @PSBackLeft position.z T1/2

/parametric box 1 1 1

/tag_last PSBackRight

/setprop @PSBackRight color #3b82f6

/bind @PSBackRight scale.x (PS_W/2-PS_SX-SLOTW/2)

/bind @PSBackRight scale.y SLOTL

/bind @PSBackRight scale.z T1

/bind @PSBackRight position.x PS_X+(PS_W/2+PS_SX+SLOTW/2)/2

/bind @PSBackRight position.y PS_H/2-SLOTL/2

/bind @PSBackRight position.z T1/2

/parametric box 1 1 1

/tag_last PSBackMid

/setprop @PSBackMid color #3b82f6

/bind @PSBackMid scale.x (2*PS_SX-SLOTW)

/bind @PSBackMid scale.y SLOTL

/bind @PSBackMid scale.z T1

/bind @PSBackMid position.x PS_X

/bind @PSBackMid position.y PS_H/2-SLOTL/2

/bind @PSBackMid position.z T1/2

/parametric box 1 1 1

/tag_last PSFrontBase

/setprop @PSFrontBase color #3b82f6

/bind @PSFrontBase scale.x PS_W

/bind @PSFrontBase scale.y PS_H-SLOTL

/bind @PSFrontBase scale.z T2

/bind @PSFrontBase position.x PS_X

/bind @PSFrontBase position.y -SLOTL/2

/bind @PSFrontBase position.z T1+T2/2

/parametric box 1 1 1

/tag_last PSFrontLeft

/setprop @PSFrontLeft color #3b82f6

/bind @PSFrontLeft scale.x (PS_W/2-PS_SX-HEADW/2)

/bind @PSFrontLeft scale.y SLOTL

/bind @PSFrontLeft scale.z T2

/bind @PSFrontLeft position.x PS_X-(PS_W/2+PS_SX+HEADW/2)/2

/bind @PSFrontLeft position.y PS_H/2-SLOTL/2

/bind @PSFrontLeft position.z T1+T2/2

/parametric box 1 1 1

/tag_last PSFrontRight

/setprop @PSFrontRight color #3b82f6

/bind @PSFrontRight scale.x (PS_W/2-PS_SX-HEADW/2)

/bind @PSFrontRight scale.y SLOTL

/bind @PSFrontRight scale.z T2

/bind @PSFrontRight position.x PS_X+(PS_W/2+PS_SX+HEADW/2)/2

/bind @PSFrontRight position.y PS_H/2-SLOTL/2

/bind @PSFrontRight position.z T1+T2/2

/parametric box 1 1 1

/tag_last PSFrontMid

/setprop @PSFrontMid color #3b82f6

/bind @PSFrontMid scale.x (2*PS_SX-HEADW)

/bind @PSFrontMid scale.y SLOTL

/bind @PSFrontMid scale.z T2

/bind @PSFrontMid position.x PS_X

/bind @PSFrontMid position.y PS_H/2-SLOTL/2

/bind @PSFrontMid position.z T1+T2/2

/sm_params 14 1 0.44

/sm_part -2 -14 14 0 34 0 35.74 0.15 39.0 1.34 41.66 3.57 43.4 6.58 44.0 10.0 44 22 41.0 24 38 22 38.0 10.0 37.46 8.0 36.0 6.54 34.0 6.0 -2 6

/tag_last PSProngL

/setprop @PSProngL color #3b82f6

/rotate @PSProngL 0 -90 0

/move @PSProngL 37.0 -34.5 5

/sm_params 14 1 0.44

/sm_part -2 -14 14 0 34 0 35.74 0.15 39.0 1.34 41.66 3.57 43.4 6.58 44.0 10.0 44 22 41.0 24 38 22 38.0 10.0 37.46 8.0 36.0 6.54 34.0 6.0 -2 6

/tag_last PSProngR

/setprop @PSProngR color #3b82f6

/rotate @PSProngR 0 -90 0

/move @PSProngR 87.0 -34.5 5

// ---- HS: Headset hanger ----

/set_var HS_W 100

/set_var HS_H 130

/set_var HS_X 165

/set_var HS_SX 28.0

/parametric box 1 1 1

/tag_last HSBackBase

/setprop @HSBackBase color #a855f7

/bind @HSBackBase scale.x HS_W

/bind @HSBackBase scale.y HS_H-SLOTL

/bind @HSBackBase scale.z T1

/bind @HSBackBase position.x HS_X

/bind @HSBackBase position.y -SLOTL/2

/bind @HSBackBase position.z T1/2

/parametric box 1 1 1

/tag_last HSBackLeft

/setprop @HSBackLeft color #a855f7

/bind @HSBackLeft scale.x (HS_W/2-HS_SX-SLOTW/2)

/bind @HSBackLeft scale.y SLOTL

/bind @HSBackLeft scale.z T1

/bind @HSBackLeft position.x HS_X-(HS_W/2+HS_SX+SLOTW/2)/2

/bind @HSBackLeft position.y HS_H/2-SLOTL/2

/bind @HSBackLeft position.z T1/2

/parametric box 1 1 1

/tag_last HSBackRight

/setprop @HSBackRight color #a855f7

/bind @HSBackRight scale.x (HS_W/2-HS_SX-SLOTW/2)

/bind @HSBackRight scale.y SLOTL

/bind @HSBackRight scale.z T1

/bind @HSBackRight position.x HS_X+(HS_W/2+HS_SX+SLOTW/2)/2

/bind @HSBackRight position.y HS_H/2-SLOTL/2

/bind @HSBackRight position.z T1/2

/parametric box 1 1 1

/tag_last HSBackMid

/setprop @HSBackMid color #a855f7

/bind @HSBackMid scale.x (2*HS_SX-SLOTW)

/bind @HSBackMid scale.y SLOTL

/bind @HSBackMid scale.z T1

/bind @HSBackMid position.x HS_X

/bind @HSBackMid position.y HS_H/2-SLOTL/2

/bind @HSBackMid position.z T1/2

/parametric box 1 1 1

/tag_last HSFrontBase

/setprop @HSFrontBase color #a855f7

/bind @HSFrontBase scale.x HS_W

/bind @HSFrontBase scale.y HS_H-SLOTL

/bind @HSFrontBase scale.z T2

/bind @HSFrontBase position.x HS_X

/bind @HSFrontBase position.y -SLOTL/2

/bind @HSFrontBase position.z T1+T2/2

/parametric box 1 1 1

/tag_last HSFrontLeft

/setprop @HSFrontLeft color #a855f7

/bind @HSFrontLeft scale.x (HS_W/2-HS_SX-HEADW/2)

/bind @HSFrontLeft scale.y SLOTL

/bind @HSFrontLeft scale.z T2

/bind @HSFrontLeft position.x HS_X-(HS_W/2+HS_SX+HEADW/2)/2

/bind @HSFrontLeft position.y HS_H/2-SLOTL/2

/bind @HSFrontLeft position.z T1+T2/2

/parametric box 1 1 1

/tag_last HSFrontRight

/setprop @HSFrontRight color #a855f7

/bind @HSFrontRight scale.x (HS_W/2-HS_SX-HEADW/2)

/bind @HSFrontRight scale.y SLOTL

/bind @HSFrontRight scale.z T2

/bind @HSFrontRight position.x HS_X+(HS_W/2+HS_SX+HEADW/2)/2

/bind @HSFrontRight position.y HS_H/2-SLOTL/2

/bind @HSFrontRight position.z T1+T2/2

/parametric box 1 1 1

/tag_last HSFrontMid

/setprop @HSFrontMid color #a855f7

/bind @HSFrontMid scale.x (2*HS_SX-HEADW)

/bind @HSFrontMid scale.y SLOTL

/bind @HSFrontMid scale.z T2

/bind @HSFrontMid position.x HS_X

/bind @HSFrontMid position.y HS_H/2-SLOTL/2

/bind @HSFrontMid position.z T1+T2/2

/sm_params 22 1 0.44

/sm_part -2 -14 14 0 54 0 56.78 0.24 62.0 2.14 66.26 5.72 69.04 10.53 70.0 16.0 70 18 66.0 20 62 18 62.0 16.0 60.93 12.0 58.0 9.07 54.0 8.0 -2 8

/tag_last HSProngL

/setprop @HSProngL color #a855f7

/rotate @HSProngL 0 -90 0

/move @HSProngL 143.0 -47.0 5

/sm_params 22 1 0.44

/sm_part -2 -14 14 0 54 0 56.78 0.24 62.0 2.14 66.26 5.72 69.04 10.53 70.0 16.0 70 18 66.0 20 62 18 62.0 16.0 60.93 12.0 58.0 9.07 54.0 8.0 -2 8

/tag_last HSProngR

/setprop @HSProngR color #a855f7

/rotate @HSProngR 0 -90 0

/move @HSProngR 209.0 -47.0 5

Playground

Tags