Select a key, then a state. This illustrates color meaning; it is not connected to Codex and is not a color calibration.
Exact functionality is an electronics + software requirement.The included CAD and KB2040 firmware are a custom prototype. They do not currently deliver native Codex integration. For documented native behavior, use a genuine Creator Micro 2 or Codex Micro with its original firmware. Re-housing that board requires measured donor geometry; the current printable case is not a verified donor fit.
01 / choose the build that meets your requirement
Keep the native electronics for native Codex behavior.
OpenAI explicitly lists Creator Micro 2 as compatible. The model with Bluetooth is the Pro; the Base is wired. A verified OEM PCB-only kit was not found. If matching the original is the priority, start with a complete genuine unit, verify it works, and customize its enclosure only after measuring it. OpenAI compatibility guide ↗ · Manufacturer specifications ↗
Recommended for your requirement
Native electronics + printed exterior
Retain the factory controller, LEDs, touch electrode, switch assembly, firmware, diffuser, and—on Pro—the original battery and charging circuit. That preserves the supported connection to Codex.
What still needs work: measure the donor PCB, mounting holes, connectors, antenna and diffuser; then revise the case. No donor-compatible enclosure is claimed in this package.
Availability: Codex Micro page showed out of stock ($230). Creator Micro 2 page showed “Not available” without a price. Confirm the selected variant at purchase; no order was placed.Prototype / additional development
Custom electronics + supplied CAD
USB-C KB2040, hand-wired switches, planar joystick, rotary encoder, capacitive touch, six key LEDs and eight perimeter LEDs. The files below form a buildable prototype design, subject to physical fit and electrical testing.
Included software: USB function keys, dial scroll, joystick arrows, three touch-selected banks, and individually addressable RGBW lights.
Missing for parity: native detection, automatic task status, task switching, voice behavior, reasoning control, app settings, and Bluetooth.
Custom electronics are not a substitute purchase for the full-function donor route.
Feature acceptance matrix
Requirement
Genuine supported unit
Included custom prototype
Native device setup and remapping
Documented
Not implemented
Six task-linked colors and selected-key pulse
Documented
LED hardware; manual color commands only
Task switching, approve / decline / send
Documented
Generic F13–F24 keys; app bindings still needed
Push-to-talk and recording / processing lights
Documented
Not implemented; no microphone in the keypad
Reasoning and composer dial modes
Documented
Scroll + Enter only
Joystick actions and touch input
Documented
Arrows + three banks
Bluetooth and rechargeable battery
Codex Micro / Creator Micro 2 Pro
Not included in USB design
OEM case proportions, finish and feel
Factory product
Photo reconstruction; deeper hand-wired body
Native behavior source: OpenAI’s current setup documentation. Color and behavior changes in future app releases must be tested on the running app. These are separate from the geometry checks performed here.
02 / materials
Yes—some parts should transmit light.
Buy colorless clear / natural PETG for light transmission. Use opaque white and black where light should be reflected or blocked.
Light transmission
Clear / natural PETG
Print the case and six agent keycaps. Its 0.8 mm perimeter windows let the LED colors escape. Clear plate printing is optional for a more translucent appearance.
Allow roughly 150 g for these parts plus trials. Printed layers usually make clear filament look frosted; the actual result depends on settings and thickness.
Print the structural plate, five individual command caps, wide cap, dial and foot. Ordinary white is appropriate here; it is not a replacement for clear agent caps.
Allow roughly 100 g. Purchasing molded keycaps gives smoother surfaces and more reliable stem fit.
These are material allowances, not slicer weight estimates. Three new spools may cost about $55–85, while this build uses only a fraction of each. Confirm 1.75 mm versus 2.85 mm for your printer before ordering; the links default to 1.75 mm.
For faithful colors: choose colorless filament. Tinted blue, gray, smoke, glitter and fiber-filled plastics change or block the light. Sand a test patch lightly for diffusion. Neither FDM PETG nor a printed keycap will exactly reproduce CNC-sandblasted polycarbonate or molded PBT. For the donor route, retain the factory lightpipe and use six frosted MX Pure caps; the vendor listed those as a pre-order.
Starting print profile
Setting
Starting point
Reason / constraint
Nozzle / layer height
0.4 mm / 0.20 mm
Use 0.12–0.16 mm for keycaps and the dial; 0.2 mm nozzle improves sockets if available.
Walls / top & bottom
4 perimeters / 5 layers
Use local solid modifiers around insert bosses and switch lands.
Infill
20–30% for opaque parts
Perimeter windows are modeled thin. Do not use sparse infill inside an optical window.
Temperature
Filament’s own PETG preset
Polymaker lists 240–260°C nozzle and 60–70°C bed; start within your printer’s supported range.
Moisture / plate
Dry filament; suitable release layer
Follow spool instructions. PETG can bond too strongly to smooth PEI or glass.
Bed size
At least 120 × 120 mm for one case
Largest part is 110 × 110 mm; allow for brim and actual printable area.
Scale
100%, millimetres
Adjust socket/cutout parameters instead of scaling the entire model.
Filament guidance: Polymaker PETG specifications. Actual printer model, nozzle and calibrated tolerances remain unconfirmed.
03 / files you can use
Editable solids. Printable meshes.
11 unique printable files, plus an assembled STEP model, parametric source and 3D preview. STL files are already rotated to their intended print orientation; STEP solids retain assembly coordinates.
The prototype uses 19.05 mm MX spacing, a 94 mm faceplate, 3 mm structural thickness with 1.6 mm switch clip lands, a 25 mm case and a 5 mm removable circular foot. Controls bring maximum overall height to about 46 mm, plus rubber.
Accuracy boundary: dimensions were selected from standard parts and the reference photo, not measured from the original. The CAD is not a manufacturer drawing. In particular, the joystick pocket, keycap sockets and printed insert holes require test fitting.
In the assembly, names beginning REF are purchased-part clearance envelopes. They are not objects to print. The STEP model does not contain a full production PCB or wires.
Part / print note
Qty
Material
Download
01 caseOpen side up; supports in USB tunnel only if your slicer needs them.
Print the two fit coupons first. Trial a single switch, stem, and heat-set insert. The 3.9 mm insert pilot is for the specified 4.2 mm OD × 4 mm long Adafruit insert; it is a starting allowance, not a universal insert hole size. The full shell should follow a successful test.
Add the key legends
The CAD keycaps are blank. Key legend SVG provides six functional symbols at print scale; the artwork approximates the reference labels. Print at 100%, verify the 20 mm scale bar, and trim close to each icon. Apply to the five white 1U caps and the white wide mic cap. Leave the six translucent agent caps unmarked.
Optional clear waterslide decal paper works with an inkjet printer. Use the paper manufacturer’s sealing instructions, test the finish on a spare PETG cap, and keep coatings away from switch stems. A local print shop can make the decals if you do not have a paper printer. These are surface labels, not molded legends.
To adapt the CAD for a genuine donor board
Use the donor measurement worksheet to record the real board outline, hole pattern, component heights, port/button positions, optical parts and antenna clearance. Import the STEP into Fusion, FreeCAD, Onshape or another CAD tool; remove the hand-wiring supports, add measured PCB standoffs, and revise the port, battery and diffuser seats. A donor mounting revision is still required. Keeping the factory enclosure while using custom keycaps is the quickest way to preserve native functionality during this phase.
The supplied wide key has two MX sockets 19.05 mm apart. It fits two independent switches. A conventional single-center 2U keycap and stabilizer will not fit this plate. Two lighter switch springs may be preferable because the wide key presses both switches.
04 / shopping list
Buy for one electronics route.
Filter by route before buying. Native means genuine electronics for supported Codex features. Custom means the experimental hand-wired design and supplied CAD. Materials means filament. US-dollar figures are observed prices where shown, or labeled estimates; tax, shipping and tools are extra.
0 items checked
✓
Part / seller link / specification
Buy / use
USD
Route
Creator Micro 2 Pro ↗Officially supported; Pro required to also match Bluetooth; availability unconfirmed
Check marks are saved in this browser when local storage is available. Supplier pages and stock can change. Catalog/search links for generic hardware require selecting the dimensions stated here.
Custom build budget
≈ $75–115
Electronics, small hardware and consumed materials, before shipping, tools and optional decal supplies. Add roughly $55–85 if buying three entire filament spools. The result still requires custom integration work for native parity.
Tools & bench supplies
Soldering iron with fine tip, flux, solder, ventilation, wire cutters/strippers, tweezers, multimeter, digital calipers, M3 hex driver, heat-set insertion tip, polyimide tape, thin removable foam tape and a small perfboard.
A filament dryer and a keycap puller help. No motors, display, speaker, Raspberry Pi computer, or onboard microphone are required.
Assembly / interactive 3D
Watch the pieces come together.
Play all eleven stages, use the timeline to separate the layers, and switch to the underside to inspect the hidden parts. Printed components use the same STEP geometry linked above.
The animation shows the custom prototype. Purchased components and cable routes are simplified references; use the written instructions and wiring map for the build.
05 / assembly
Test the electronics before closing the case.
Native route: preserve the working assembly
Connect a genuine unit in its original case and complete the official setup. Confirm task colors and controls before changing hardware.
Measure with the donor worksheet. If opening a Pro unit, unplug USB, turn it off and disconnect the battery before moving the board. Keep its original charger, protection circuit and cell together.
Revise and test-print the mounting interface. Retain the factory switch/LED assembly and lightpipe. Provide access to USB and the rear button, clearance around the antenna, and a measured gap at the touch electrode.
Fit the revised shell without loading the PCB or pinching wires. Reconnect the original components and run the acceptance checklist below. The supplied custom-PCB-free case is not approved for this transplant.
Custom route: supplied Rev A geometry
Print the fit samples
Print files 10 and 11 in the chosen materials. Check the 14.0 / 14.1 / 14.2 mm switch apertures. The switch should click in securely without forcing. Test the MX cross and heat-set insert. Change the JSON parameters and regenerate if necessary.
Print and finish the body
Print the case open side up, plate face down, foot bottom down, and baffles open side up. Clean burrs without widening switch lands. Keep the eight thin optical windows intact. Trial the USB cable in the 15 × 8 mm tunnel.
Install the inserts
Heat-set four inserts from the tops of the corner posts and two into the underside foot mounts. Use the 4 mm-long specified insert and let each cool fully. Keep the iron away from the thin windows.
Fit switches and controls
Clip 13 normal MX switches into the plate. Fasten the encoder with its washer and M7 nut; do not overtighten plastic. Test the dial with the supplied knob first. Solder flexible leads onto the slide joystick, test its movement, and seat it in the printed tray. Trim only tray plastic if required; do not remove the joystick’s retention frame.
Wire the key matrix
Use the top-view matrix below. One switch terminal joins its column. The other goes to the unbanded end of its diode; the banded end joins the row. Insulate crossings. Wire both switches under the wide key independently—the firmware merges them.
Build the light chain
Use two packs of the specified RGBW pixels. Put LEDs 0–5 into six black baffles, shining upward; insulate their rear pads. Tack baffles to the plate underside after wiring. Face LEDs 6–13 outward through the case’s eight inner-wall pockets. Chain DOUT to DIN and use common power/ground buses.
Add touch and indicators
Cut a 13 mm copper disk and solder its lead before installing it beneath the touch cap’s thin top skin. Run it to D10 with a 1 MΩ resistor to ground. Secure the cap by its flange. Fit the three 3 mm indicator LEDs with one 1 kΩ resistor each.
Mount the controller
KB2040 lies between the guide rails, USB facing rear. Use approximately 1.6 mm insulating foam tape under it; its nominal envelope is 17.8 × 35 × 4.9 mm. Solder wires directly to pads, not tall headers. Secure a maximum 25 × 20 mm perfboard in the front internal bay for the level shifter and passives.
Power and program on the bench
Check for shorts and diode polarity with a multimeter. Connect USB with the plate still accessible. Install CircuitPython and the included files. Test every switch, both wide-key halves, joystick axes, encoder/button, touch and every RGBW pixel. LEDs remain brightness-limited to 15%.
Close and fit the foot
Allow service slack without trapping wires under baffles, switches or posts. Fasten the plate with four M3 × 8 screws. Optionally tape four 24 mm OD, ≤2 mm-thick steel washers into the foot pockets. Attach the foot with two low-profile M3 × 8 screws and add adhesive rubber at the perimeter. Fit keycaps last.
Prototype fit checks that need the actual partsThe slide joystick has no controlled supplier drawing; test its 19.8 mm pocket. Keycap sockets depend on printer calibration. At full key travel, caps must clear the plate and each other. The dial must rotate freely and still depress. LED solder joints must not touch switch pins. No physical print or electrical bench test has been performed here.
Matrix: view from above, USB at the rear
Row / GPIO
C1 / D6
C2 / D7
C3 / D8
C4 / D9
R1 / D2
Encoder, separate wiring
Agent 01
Agent 02
Joystick, separate wiring
R2 / D3
Agent 03
Agent 04
Agent 05
Agent 06
R3 / D4
Command 1
Command 2
Command 3
Command 4
R4 / D5
Touch, separate wiring
Wide key / left switch
Wide key / right switch
Command 6
When soldering from underneath, this layout is mirrored left-to-right. Label rows and columns before flipping the plate.
Power pixels and the 74AHCT125 from the KB2040’s fused RAW rail. Power the joystick from 3V so its analog outputs stay within 3.3 V. All grounds join. Leave the fuse-bypass jumper open.
Budget estimate: 14 × 75 mA × 15% ≈ 158 mA for the LEDs at the worst RGBW setting, plus board and indicators. Target under 250 mA total and verify with a USB meter. This is an estimate, not a measured result.
Put a 100 µF / ≥10 V capacitor across the LED rail and 100 nF close to the shifter’s supply pins. Do not add an external supply to this USB-powered build.
Joystick and encoder pinout
On SparkFun’s COM-09426, the bottom-view pad sequence is X, VCC, Y, GND; GND is nearest the two mounting tabs. Use the linked seller’s orientation diagram and a meter—other PSP replacements may differ. Despite the seller’s Arduino example, this build uses 3.3 V VCC.
Encoder A/B go to TX/RX and common to GND. Its separate switch goes between A2 and GND. If turn direction is reversed, swap A/B in firmware. No resistor is needed for the encoder switch because the firmware enables its pull-up.
Use the current desktop app, connect the genuine unit, and follow its detected-device setup. On macOS, grant the requested Input Monitoring access. Choose task assignments, controls and brightness in the device settings. Work Louder Input is optional for other-app layers.
The mic key uses the computer’s microphone. Native voice feedback uses a sea-green recording animation, followed by white processing and ready feedback.
The selected task pulses. The current guide specifies red for errors; the supply-page photography can look pink. RGB values in the illustration are approximations, not published firmware constants.
Install the custom prototype firmware
Only do this on the KB2040. These files are not compatible with the genuine Work Louder board and must not replace its firmware.
From the matching CircuitPython library bundle, copy adafruit_hid/, neopixel.mpy, and adafruit_pixelbuf.mpy into CIRCUITPY/lib/.
Copy boot.py, code.py, and logic.py to CIRCUITPY. Unplug/replug so the second USB serial port is enabled. Keep hands off the stick and touch pad during startup calibration.
Agent and command keys output F13–F24. The touch control chooses plain, Shift, or Control banks. Map these in your shortcut utility or edit the mappings. The dial scrolls and presses Enter; the joystick sends arrows.
Install Python’s pyserial on the computer and use the included helper to set individual light colors.
python -m pip install pyserial
python -m serial.tools.list_ports
# Pick the KB2040 DATA port, not its REPL/console port.
python tools/set_light.py /dev/cu.usbmodemXXXX 0 0 120 255
# Windows example: replace the device path with COM7.
# LED 0–5 = agent keys; LED 6–13 = perimeter.
The helper sends a manual color command. Seeing the right color confirms LED control, not live task synchronization. Default bank colors are not agent-status indicators.
Work remaining for custom full functionality
A host integration must obtain live task identities and lifecycle events, map six keys consistently, send status and selection updates, handle voice states, dispatch app actions, and recover after reconnects. Native settings, reasoning controls, approval actions and Bluetooth add separate work. The installed app’s Work Louder library confirms a vendor RPC connection for device events and thread lighting; the supplied generic HID firmware does not implement that connection.
No tested custom bridge or native-device emulation is included. A periodic notification script is insufficient to match the original. Completion requires tests on the actual hardware and the current desktop app. The genuine electronics route avoids this unimplemented software layer.
07 / verification and remaining decisions
What has been checked.
Completed offline
All 11 STL files are closed, single-volume meshes. Individual STEP solids pass the CAD kernel validity check. The tested assembly pairs have no material overlap. The board envelope clears the case.
Input-state tests cover the wide key’s two-switch press/release ordering, joystick dead-zone behavior and malformed color input. Firmware syntax is checked.
These tests do not establish print fit, soldering correctness, optical uniformity, key travel feel, electrical current, firmware operation on hardware, or OEM donor compatibility.
Still needed from the build
Printer model, material diameter and nozzle; choice of genuine or custom electronics; actual-part measurements; first fit coupons; assembled hardware; and end-to-end software tests.
Native functionality is documented for genuine devices, but this particular printed re-housing has not been built. The custom route’s native software parity remains unimplemented.
Bench acceptance checklist
The native column is a future physical acceptance test, not a statement that the custom firmware passes it.