No description
  • OpenSCAD 58.3%
  • Shell 34.4%
  • Python 7.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-05 13:48:55 +02:00
.agent-shell/transcripts Initial commit 2026-08-05 13:48:55 +02:00
.agents/skills/openscad Initial commit 2026-08-05 13:48:55 +02:00
previews Initial commit 2026-08-05 13:48:55 +02:00
stl Initial commit 2026-08-05 13:48:55 +02:00
AGENTS.md Initial commit 2026-08-05 13:48:55 +02:00
cyberdick.scad Initial commit 2026-08-05 13:48:55 +02:00
README.md Initial commit 2026-08-05 13:48:55 +02:00
render_stl_previews.py Initial commit 2026-08-05 13:48:55 +02:00
skills-lock.json Initial commit 2026-08-05 13:48:55 +02:00

CYBERDICK

A cyberdeck-style 3D-printed clamshell case for the Chuwi MiniBook X N150 (244 x 166.4 x 14 mm). The case is in two independent pieces that wrap the screen lid and the keyboard base separately; the laptop's own factory hinge connects them. The bottom half also stores a flat auxiliary powerbank in a cavity closed by a removable underside hatch so you can hot-swap the powerbank without opening the case.


Parts

File Description
cyberdick.scad The parametric OpenSCAD source. Edit this to customise.
stl/top.stl Screen-lid wrap half.
stl/bottom.stl Keyboard-base wrap half with powerbank cavity.
stl/hatch.stl Removable bottom hatch (powerbank door).
previews/ Multi-angle preview PNGs of the assembled model and each part.

All three STL parts are already exported and ready to send to a printing service. You only need to re-export them if you change a parameter.


How to preview the model on your machine

You can open, view, and customise the model without any printing hardware.

1. Install OpenSCAD (free)

  • Windows / macOS: Download from https://www.openscad.org/downloads.html and install.
  • Linux: Use your package manager, e.g. sudo apt install openscad or sudo dnf install openscad. A version with GUI is required for previewing.

2. Open the model

  1. Launch OpenSCAD.
  2. File > Open File... and select cyberdick.scad.
  3. The source code appears on the left. The 3D viewport is initially empty.

3. Render and view

  1. Press F5 (Preview) for a quick rough render. This is fast and good enough to see the overall shape. You can orbit/pan/zoom with the mouse.
  2. Press F6 (Render) for a full high-quality CGAL render. Slower, but needed if you want to export an STL or see exact geometry.
  3. Use the viewport toolbar (or View menu) to switch to Top/Front/Right/etc. orthographic views.

4. Customise parameters (optional)

  1. Open Window > Customizer (a panel appears on the right).
  2. All parameters are grouped and editable. Sliders and dropdowns are generated from the // [min:step:max] comment annotations.
  3. Change a value, press F5 to preview, and iterate.
  4. See the Parameters section below for what each one does.

5. View the pre-rendered PNG previews

If you just want to look at the model without opening OpenSCAD, open any PNG in the previews/ directory. Each subdirectory contains 7 views (iso, front, back, left, right, top, bottom) of one part:

previews/
  cyberdick_full_*.png   # all three parts side-by-side
  top/cy_top_*.png        # screen-lid wrap only
  bottom/cy_bot_*.png     # keyboard-base + powerbank half only
  hatch/cy_hatch_*.png    # removable hatch only

How to export STLs (after customising)

If you changed parameters, re-export each part individually so you get three clean STL files (one per part):

Option A: from the OpenSCAD GUI

  1. In the Customizer or source, set render_top = true, render_bottom = false, render_hatch = false.
  2. Press F6 (full render).
  3. File > Export > Export as STL... and save as top.stl.
  4. Repeat for bottom (render_bottom = true, others false) and hatch.

Option B: from the command line

openscad -D render_top=true  -D render_bottom=false -D render_hatch=false \
         -o stl/top.stl cyberdick.scad

openscad -D render_top=false -D render_bottom=true -D render_hatch=false \
         -o stl/bottom.stl cyberdick.scad

openscad -D render_top=false -D render_bottom=false -D render_hatch=true \
         -o stl/hatch.stl cyberdick.scad

Each STL is automatically made manifold (watertight) by OpenSCAD.


Printing recommendations (for a commercial printing service)

This project is designed to print without supports on an FDM printer. If your printing service asks for orientation advice, give them the following. If you are unsure, send them the three STL files and ask them to orient for minimal supports on PLA/PETG; the parts are simple enough that most services will handle it without intervention.

Material

Material Recommended? Notes
PETG Best Tough, slightly flexy (good for snap-fit hatch), heat-resistant.
PLA Good Easiest to print; stiffer (hatch friction-fit may need hatch_clear increase).
ABS/ASA OK Stronger but warps; only if the service is experienced.
Resin Not recommended Too brittle for the snap-fit hatch.

Slicing settings (guidelines)

  • Layer height: 0.2 mm (good balance of speed and detail).
  • Infill: 20-30% gyroid. The walls are structural; infill mostly fills the floor/ceiling.
  • Perimeters (walls): 3 minimum (the shell is the strength).
  • Top/bottom solid layers: 4 (so port windows and hatch rebate have clean surfaces).
  • Supports: Not required for any of the three parts if oriented as below. If your printer's bridging is poor, enable supports only for the hatch lip overhang (lip_thick is 1.5 mm, so most printers bridge this cleanly).

Print orientation (important)

Part Orientation Why
top.stl Flat on its back-of-screen face (+Z down) The cavity opens upward; no overhangs.
bottom.stl Flat on its bottom face (hatch side down) The two internal cavities (powerbank + keyboard) open upward; no supports needed.
hatch.stl Flat on its lip face (lip down) Already exported flipped so the lip is on the bottom; prints as a flat slab with a small lip step.

Print size check

Make sure the service's build volume can fit the longest dimension:

Part X x Y x Z (mm) when oriented for printing
top ~250 x 170 x 8
bottom ~250 x 170 x 46.4
hatch ~158 x 79 x 2.5

All three fit any printer with a 250 mm x 210 mm bed (a very common size). If your service's bed is smaller than 250 mm, reduce laptop_w (impossible without redesigning for a different laptop) or ask for a printer with a larger bed.

Estimated material volume and weight

The shell is a true thin-walled (2.5 mm walls) hollow design with internal ribs bracing the powerbank chamber. Internal air pockets keep the weight down while preserving the chunky cyberdeck exterior.

Part Volume PLA weight PETG weight
top.stl 106 cm³ 131 g 135 g
bottom.stl 335 cm³ 415 g 425 g
hatch.stl 30 cm³ 37 g 37 g
TOTAL 470 cm³ 583 g 597 g

Cost at German 3D-printing services (local fallback)

Material volumes above are model material only. The German services below publish flat per-gram rates (researched July 2026). These are your local fallback if global marketplaces come back higher — they ship fast but cost more.

Service PLA rate PETG rate All-PLA cost All-PETG cost
3DZelle Dortmund (3dzelle.de) — free shipping > 99 € ab 0.25 €/g ab 0.35 €/g ~146 € ~209 €
LAMREN 3D (lr3d.de) — same rate any material 0.28 €/g 0.28 €/g ~163 € ~167 €
3D-Print Design (3d-printdesign.de) varies varies quote online quote online

For cheaper global and Chinese options (often €60-110 € shipped, lead time 3-30 days), see the "Getting it printed" section below.


Getting it printed — global service comparison & quote checklist

~130 € is the floor at German per-gram rates, but several global and Chinese services can land below that. All services below were researched in July 2026 and return quotes via STL upload (none publish a flat per-gram rate). Ranked by expected total cost for all three parts in PETG (~597 g).

# Service Origin Expected total (incl. shipping+EU VAT) Shipping time PETG? Notes
1 Craftcloud3D (craftcloud3d.com/upload) EU (Munich, All3DP GmbH) ~80-150 € 3-7 days Yes Aggregates ~10 print partners across Europe (incl. cheaper Eastern-EU). Quote includes shipping + customs. No minimum order. Start here.
2 Hubs / Protolabs Network (hubs.com/manufacture) EU (Protolabs Europe B.V.) ~80-150 € from 2 business days Yes Quote includes shipping + customs. 500×500×500 mm FDM build volume. Backup if Craftcloud3D is pricier.
3 PCBWay (pcbway.com) China ~60-110 € (after VAT + handling) 3-7 days DHL or 15-30 days ePacket Yes $5 new-customer coupon. EU VAT collected on delivery by carrier (~19% + €12 handling fee). Slowest option is the only one likely to beat €80.
4 3DZelle Dortmund (DE) Germany ~209 € (fixed, 0.35 €/g PETG) 2-4 days Yes Cheapest local German option with published rate. Fallback if marketplaces come back higher than expected.
5 LAMREN 3D (DE) Germany ~167 € (fixed, 0.28 €/g, any material) 3-5 days Yes One flat rate for any material. Cheaper PETG than 3DZelle.
6 3D-Print Design (DE) Germany quote-only 3-7 days Yes Online calculator.

Excluded services (researched July 2026, don't waste time on these)

Service Why excluded
JLCPCB / JLC3DP (jlc3dp.com) FDM line has no PETG — only PLA, ABS, ASA, PA12-CF, TPU, ABS-ESD, PEEK. The snap-fit hatch cannot work in these stiff materials. PLA-only would be viable but you wanted PETG.
Shapeways (shapeways.com) Relaunched under Manuevo BV (Netherlands), but $300 minimum order per color on FDM PETG. 3× our budget; disqualified.
Xometry Europe (xometry.eu) Live and Germany-based, but bot-blocks all scraping. Quote-only. Worth a quote if you want a third EU marketplace alongside Craftcloud3D/Hubs.

Import tax note (applies to Chinese and other non-EU shipments)

  • Orders below €150 value: no customs duty, but 19% Einfuhrumsatzsteuer (VAT) is collected on delivery, plus a ~€12 carrier handling fee.
  • Orders above €150: add ~3.7-6.5% customs duty on top of VAT + fee.
  • EU-based services (Craftcloud3D, Hubs, 3DZelle, LAMREN) include VAT in their quoted prices — the number you see is the number you pay. PCBWay and JLC3DP do not include EU VAT; the carrier collects it at the door.
  • Example: a "€60 + €20 shipping" PCBWay quote lands at your door at €80 + €15 VAT + €12 handling = **€107 effective**. Still cheaper than Germany, but budget for the surcharge.
  1. Upload the three STL files separately (each part as its own line-item):

    stl/top.stl       (~135 g PETG)
    stl/bottom.stl    (~425 g PETG)
    stl/hatch.stl     (~37 g PETG)
    
  2. In each configurator choose:

    • Process: FDM (Fused Deposition Modeling)
    • Material: PETG
    • Color: any (no impact on price)
    • Infill: 20% gyroid
    • Layer height: 0.2 mm
    • Perimeters: 3 minimum
    • Print orientation: see "Print orientation" table above
  3. Pay attention to:

    • Is shipping included? (Craftcloud3D and Hubs: yes. PCBWay: added at checkout.)
    • Are VAT/customs included? (Craftcloud3D and Hubs: yes. PCBWay: EU VAT collected on delivery.)
    • Each quote's lead time.
  4. Record the three per-part quotes for comparison. Both marketplaces (Craftcloud3D and Hubs) often surface bids from Eastern-European print partners that don't publish rates anywhere online — that's the cheapest route without you having to find and contact those shops directly.

Why we did the quote comparison this way

Most 3D-printing services don't publish a flat per-gram rate because the real price depends on the specific geometry (bounding box, wall thickness, supports needed, machine hours). The quoted price is the only reliable way to compare. This is why all three recommended options return quotes via STL upload — there is no published "menu price" to paste in here.

If the quotes still come back higher than you want

  • Drop the ribs: set rib_count_x = 0 and rib_count_y = 0 in the OpenSCAD Customizer and re-export. Saves ~50 g (~10-15 €). Walls become slightly "drummier" but self-supporting.
  • Order PLA-only: PLA is usually 30-40% cheaper than PETG. PLA is stiffer (hatch friction-fit may need hatch_clear increased to 0.35). Only viable on services that don't include PETG-FDM in the first place — tracked above in the "Excluded services" table.
  • Print at home if you have access to an FDM printer: a 1 kg spool of PETG is ~20 € and covers all three parts (~600 g). Most of a commercial service's price is labour and machine setup, not filament.

Assembly

  1. Top half: Slide the screen lid into the top wrap from the hinge edge (+Y). The screen-glass face stays exposed on the bottom (-Z).
  2. Bottom half: Slide the keyboard base into the bottom wrap from the hinge edge (+Y). The keyboard/trackpad face stays exposed on the top (+Z). Side port windows should line up with the laptop's ports:
    • Right edge (60 mm window after 10 mm): power LED, USB-C, USB-C, power button, running LED.
    • Left edge (90 mm window after 10 mm): audio jack + heat exhaust.
  3. Powerbank: Turn the laptop over. Pry the hatch out using the finger-pull notch on the front edge. Insert your powerbank (up to 152 x 73 x 32 mm) into the cavity. Route a USB-C cable through the built-in passthrough hole in the divider wall to connect the powerbank to the laptop. Press the hatch back into place; the lip clicks into the rebate and holds it.
  4. Hinge: The two case halves stay separate. Open the laptop's lid, and the two brick-like halves pivot on the laptop's own hinge.

Fit issues after printing

  • Laptop too tight: increase tolerance from 0.3 to 0.4 or 0.5 and re-export.
  • Laptop too loose: decrease tolerance to 0.2.
  • Hatch too tight / won't go in: increase hatch_clear from 0.25 to 0.35.
  • Hatch falls out: decrease hatch_clear to 0.15, or increase lip_overlap to 3.
  • Powerbank too big: increase pb_max_w, pb_max_d, or pb_max_t and re-export.

Parameters

All parameters are in the top section of cyberdick.scad and editable through the OpenSCAD Customizer panel.

Device dimensions

Parameter Default Range Description
laptop_w 244 [200:300] Laptop width (X) in mm
laptop_d 166.4 [150:200] Laptop depth (Y) in mm
screen_t 5 [3:10] Screen lid thickness in mm
base_t 9 [5:15] Keyboard base thickness in mm
hinge_gap 1 [0:3] Air gap between closed lid and base in mm

Powerbank cavity

The cavity fits any powerbank up to the three values below. The defaults match the user's 147.6 x 69 x 30 mm powerbank with ~5 mm slack. To fit a larger powerbank, increase these values and re-export STLs.

Parameter Default Range Description
pb_max_w 152 [100:200] Max powerbank length (X) in mm
pb_max_d 73 [60:120] Max powerbank depth (Y) in mm
pb_max_t 32 [20:45] Max powerbank thickness (Z) in mm

Case shell

Parameter Default Range Description
wall 2.5 [1.5:0.5:5] Outer wall thickness in mm
div_wall 2 [1:0.5:4] Divider wall between base and powerbank
tolerance 0.3 [0.1:0.1:1] Fit clearance around laptop halves
corner_r 3 [0:8] Corner rounding radius

Internal ribs (strength, light-weighting)

The volume around the powerbank chamber is hollow (air pockets), not solid. Internal ribs (vertical struts between the bottom wall and the divider) keep the thin walls rigid. Set to 0 for the cheapest print (drummier shell).

Parameter Default Range Description
rib_thick 2 [1:0.5:4] Rib wall thickness in mm
rib_count_x 1 [0:8] Ribs per side (left and right of chamber)
rib_count_y 1 [0:8] Ribs front+back of chamber

Removable hatch

Parameter Default Range Description
hatch_clear 0.25 [0.1:0.1:0.6] Per-side clearance for hatch
lip_overlap 2.5 [1.5:0.5:5] Lip overlap that retains hatch
lip_thick 1.5 [1:0.25:3] Thickness of the retaining lip
finger_r 7 [4:12] Finger-pull notch radius

Side port windows

Parameter Default Range Description
port_clear 10 [0:30] Clearance from front corner before ports
rport_len 60 [20:150] Right-side port window length (Y) in mm
lport_len 90 [20:150] Left-side port window length (Y) in mm

Power cable passthrough

Parameter Default Range Description
cable_r 4 [2:0.5:8] Cable hole radius in mm
cable_x_off 60 [-80:80] X offset of cable hole from centre

Cyberdeck aesthetic

Parameter Default Range Description
bolt_r 5 [3:8] Decorative bolt recess radius
bolt_depth 2.5 [1:4] Bolt recess depth
bolt_sides 6 [4:1:8] Bolt recess polygon (6 = hex)
vent_count 6 [0:14] Number of vent slats
vent_w 2 [1:0.5:4] Vent slat width
vent_gap 3 [1:0.5:6] Spacing between vent slats
vent_indent 5 [0:15] Inset of vent grid from edges

Render control

Parameter Default Description
render_top true Render the screen-lid wrap half
render_bottom true Render the keyboard-base + powerbank half
render_hatch true Render the removable hatch
explode true Place hatch flipped-and-lowered for print preview

Verification

The model has been programmatically verified before export:

  • All three STLs are watertight (manifold) — confirmed with trimesh for every part. No non-manifold warnings during CGAL export.
  • The keyboard cavity, powerbank cavity, hatch opening, and both side port windows are confirmed hollow at the expected coordinates.
  • The divider wall between powerbank and keyboard cavities is confirmed solid at the expected coordinates.
  • The 2.5 mm outer walls (front, back, left, right, bottom) are all confirmed solid; the internal air pockets around the powerbank chamber are confirmed hollow.
  • Outer dimensions of all three parts match the calculated values to within 0.1 mm.
  • The internal rib layout was tested at 0, 1, 2, 3 ribs per side — all remain watertight regardless of rib count.
  • Total material volume is 470 cm³ (~600 g PETG), a 65 % reduction from the previous solid-block design (1359 cm³, ~1700 g PETG).

Project layout

cyberdick/
├── cyberdick.scad            # parametric source (edit this)
├── render_stl_previews.py    # preview rendering helper (no OpenGL needed)
├── README.md                 # this file
├── stl/
│   ├── top.stl              # screen-lid wrap (ready to print)
│   ├── bottom.stl           # keyboard-base + powerbank half (ready to print)
│   └── hatch.stl            # removable powerbank door (ready to print)
└── previews/
    ├── cyberdick_full_*.png  # all parts side-by-side, 7 angles
    ├── top/                  # top half alone, 7 angles
    ├── bottom/               # bottom half alone, 7 angles
    └── hatch/                # hatch alone, 7 angles