A multi-color 3D-printable charm of the sonics team logo — built as a keychain, a bag charm, and a Croc/Jibbitz charm. Designed for a Bambu Lab H2D + AMS (multi-color), but it prints fine in a single color too.
The logo is rebuilt from the uniform: red blackletter text + white outline + black background, in an Old-English (Fraktur) font.
| I want a… | Folder | Notes |
|---|---|---|
| Keychain | models/keychain/ |
5 mm hole for a key ring / split ring |
| Bag charm | models/bagcharm/ |
8 mm hole for a lobster clasp |
| Croc charm | models/croc/ |
Snap-in rivet on the back (⚠ experimental — see below) |
Each folder contains the same set of files:
| File | What it is |
|---|---|
*_plate.stl |
The black background plate (+ loop / rivet) |
*_outline.stl |
The white outline around the letters |
*_text.stl |
The red "sonics" lettering |
*_combined.stl |
All three fused into one — print this for a single-color charm |
*.step |
Editable CAD file (for me, or any CAD program, to tweak later) |
The charm is ~56 mm wide and the word is 50 mm wide.
This is the magic of your printer. You'll load the three colored pieces as one object and tell Bambu Studio which filament each piece uses.
- Load filament into the AMS: black, white, and red (red = true cheer red; "Bambu Red" or similar is perfect).
- Open Bambu Studio and select your H2D as the printer.
- File → Import → Import 3MF/STL… and select all three files from a
folder at once:
keychain_plate.stl,keychain_outline.stl,keychain_text.stl. - Bambu Studio will ask "Load these files as a single object?" → click Yes. They're modeled at the same coordinates, so they snap together perfectly into one charm.
- In the right-hand Objects list, expand the object to see the 3 parts.
Right-click each part → Change filament (or click the little color dot)
and set:
…_plate→ Black…_outline→ White…_text→ Red
- Slice, preview (scrub the layer slider to watch the colors appear), then Print.
Single color instead? Just import the one
*_combined.stlfile and print normally — no AMS needed.
| Setting | Value | Why |
|---|---|---|
| Material | PLA | Easiest, looks great, perfect for charms |
| Layer height | 0.12–0.16 mm | Crisp small lettering |
| Walls / wall loops | 3 | Strong thin features |
| Infill | 15–20% | It's tiny; this is plenty |
| Supports | Off (keychain & bag charm) | They're flat — no supports needed |
| Plate | Smooth PEI if you have it | Glossy back face |
| Orientation | Flat, as loaded | Already oriented correctly |
A charm this size prints in roughly 20–40 minutes and uses only a few grams of filament.
Printable Croc/Jibbitz rivets are genuinely finicky — the exact fit depends on your specific Crocs. This one is a solid first attempt and may need a test-fit and a tweak:
- It's already flipped rivet-up / face-down, so it prints without supports. The smooth lettered front ends up against the build plate.
- Current rivet sizes (in
src/generate_sonics_charm.py,CROC = {...}): neck Ø10 mm, neck height 3 mm, back flange Ø13 mm. - If it won't snap in: the neck is too big — tell me and I'll shrink
neck_d. If it pops out: the back flange is too small — I'll growback_d. PLA is stiff; PETG or a TPU rivet snaps in more forgivingly. - Easiest alternative: print the keychain charm (no loop hole version on request) and glue on a cheap stick-on Croc-charm back or a pin back.
Tell me your result and I'll dial it in.
Everything is generated by src/generate_sonics_charm.py. Just tell me what
you want and I'll regenerate — e.g.:
- "Make it bigger / smaller" (
TEXT_WIDTH) - "Thicker / thinner white outline" (
OUT_MARGIN) - "Bigger black border" (
PLATE_MARGIN) - "Make the letters pop out more" (
TEXT_RAISE) - "Different blackletter font" — I also have PirataOne and GermaniaOne in
fonts/ - "Add a year / name / second line"
To regenerate yourself (if you ever want to):
pip install cadquery shapely matplotlib trimesh pillow scipy
python3 src/generate_sonics_charm.py # charms + (run svg script for Cricut)
python3 src/generate_bow.py --name Eden # cheer bow (traced from assets/)A multi-color cheer bow that clips to a backpack — white loops, red text, black trim, with a red center knot and a fully-printed snap clip on top. Layout: gym name on the left loop, team + athlete name on the right.
The bow shape is traced from a real bow image (assets/cheer_bow_source.png)
by src/trace_bow.py, so it actually looks like a cheer bow. To use a different
bow, drop in a new black-on-white silhouette and re-run.
- Files:
models/bow_<name>/(same structure as the charms:_plate= black,_outline= white,_text= red, plus_combined.stland.step). - Size: ~90 mm wide. Multi-color print exactly like the charms.
python3 src/generate_bow.py --name Eden
python3 src/generate_bow.py --name Harper
python3 src/generate_bow.py --name Aubrey --team XOXO --gym SonicsEach run creates a new models/bow_<name>/ folder and a preview. Just send me
the roster and I'll batch out all 12 at once.
It's a fully-printed carabiner-style clip — experimental, so expect to
test-print it and maybe tweak. Print in PLA or (better) PETG for a springier
gate. If the gate is too stiff or too loose, tell me and I'll adjust
CLIP_GATE_W / clearances. Print flat (as oriented) so the gate flexes along
the layer lines.
- Font: UnifrakturCook by Peter Wiegel / GFOS, licensed under the
SIL Open Font License 1.1 (free for personal & commercial use). See
fonts/LICENSE.md. - Logo wordmark belongs to the sonics team — this is a fan/personal-use charm.

