KUNAI-001 · CARD

Kunai360 housing

A case for a camera, written as code.

The printed KUNAI-360 housing, both halves
BOTH HALVES · 182 × 78 MM

This card has a chip in it, and tapping it opened this page. The case it points at holds an Insta360 ONE X, and it is not a model somebody pushed around in CAD — it is generated by a script, and every hole in the camera is a named number in it.

That is the whole idea. "The battery door is on the wrong side" becomes BATT_EDGE = -1 rather than an afternoon of remodelling. The changelog is a list of real complaints from real prints, each one next to the exact constant it moved.

Print it

pip install numpy trimesh scikit-image scipy
python3 generator/kunai_360_onex_v4.py   # both halves
python3 generator/verify.py              # 26 checks, exits 1 on any failure

Or print the STLs directly. Both halves are watertight and brim-free on both faces by construction — first-layer islands under 12 mm² are carved away so nothing minimally-connected is left for the nozzle to sweep.

BOTTOM
182 × 78 × 14 mm · ~265 k faces · watertight
TOP
182 × 78 × 12 mm · ~255 k faces · watertight
VERIFIER
26 geometric checks · 26/26 on the rebuilt voxel volume, not the shipped STLs · the run itself exits 1 (realized-centre audit: top mic −0.600 mm)
LICENCE
MIT on the code · CC BY-NC 4.0 on the form

Read before you print. The cavity is 17.5 mm against an 18.3 mm caliper reading of the camera body. It only seats if your printed pocket runs oversized, which is typical FDM wall bow. If the camera will not drop in, that is why — raise CAV_T toward 18.3. Width had a real 1.6 mm of slop and is the safe axis to tighten. Height is not.

Feature map: where each cutout sits on the body
EVERY CUTOUT IS A NAMED CONSTANT

Where it came from

It began as a request from a family member for a printed kunai. The throwing-knife silhouette is theirs, drawn on paper. Putting a 360 camera inside it was the author's own idea, which is the less generous half of the story and worth saying out loud.

The surface is a Schoen gyroid. An earlier version sampled it at each face's true height, and the back sits where the three-term gyroid collapses into degenerate stripes — which is exactly why it came out looking like a squiggle. It now takes one slice from the front and extrudes it into both faces, so both get the same real maze and the grooves carry no internal overhang.

Ask for something · Wish it better

Printed it and something did not fit? Want it sized for another camera? Write it here and press the button. No account, no email address, no password.

A print complaint is the most useful thing you can send. Every constant in the generator is a number because somebody printed this case and said what was wrong.

What you write goes into a queue that gets worked. It does not land in anyone's inbox.
Or open an issue on GitHub if you would rather.