Tuesday, May 12, 2026

prototype case print 2

the big upgrades here are having a cutout for the palms and beveling (build123d filleting) all the outer edges. it makes it feel more premium to not have the edges attacking you. i've shrunk the length of the keys and case (y direction) as well so it now has adorable proportions. the strawberry mint ice cream color scheme doesn't hurt, either.
the knobs aren't connected to anything so they droop a bit.
under the hood, i've improved the keyboard a bit; accidentals are spaced a bit more like on a real piano (i.e., unevenly), which necessitated moving around the "key wiggle bridge" on the bottom of each key so each bridge was exactly the same width. this took me more time than i'd like to admit.
some notes:
  • i may try to bevel the case more; you get elephant's foot on the first layer so the top and bottom edges don't feel super smooth. however it's still a huge improvement on feel.
  • i'll probably want to bevel the tops of the accidentals.
  • i lied in the last post, you won't want a "relaxed grip" on this so the shoulder buttons should be fine pivoting around the top corners. i may want to try moving the pivot point down but keeping the buttons external profile in about the same spot, so there's a bit of a lever arm no matter where you press it.
  • the knobs coming off the bottom of the front look really fun, but the best location for these would be on the back so that your other fingers could adjust them during a performance. but they look really good here, and having them for visual feedback when adjusting isn't the worst. (i may not be leaving enough space for the actual potentiometers, hmm.) if i do move them to the back, there's room for a sick logo in front, or some waveform adjusting button(s), or both.
  • assembling this is a bit of a pain right now; i need to add more pedestals for my columns at the very least. i'm also probably overbuilding it, so there's a couple columns i could remove.

Monday, May 11, 2026

prototype case print

refining ideas and cutting back possibilities is hard. i've been wondering whether rear-mounted shoulders would be better (so you press inward but upward through the case), but there's gotta be a reason standard shoulder buttons work so well on controllers.

i did make a test print to start iterating on the "feel" of the device, to see if this or other changes would be necessary.
some notes:
  • it's currently about 2.9 cm (1.125") thick, which feels slightly too thick. i think i'll try to get it down to about 1", but the internals will be the constraint here. if we need to remain about this size the shoulder buttons need to be thicker so they're easier to press for a range of z.
  • the shoulder buttons should maybe pivot in the other direction. i currently have the pivot near the corner of the case (so the lever arm is inwards), but for a relaxed grip the trigger fingers will want to press at the corner. alternatively i could make it so there is no pure pivot and the whole button should come inwards a little bit, so it doesn't matter as much where you put the force.
  • it would be nice to chamfer the bottom left and bottom right edges so the palms don't feel that edge as much.
  • for pocketability, it would be nice to not be as long in the y direction. the keys are the primary constraint here, and however big i want the knobs to be, but i'll probably trim off a little blank space where possible.
  • also for pocketability, i have been wondering if i should drop the joystick. if i keep it, it needs to be safely tucked under/between the knobs. i still think it would be awesome to have, but i have to see if it still feels easy to reach with the knobs possibly in the way. i would still like some way to select a waveform, see design.
if you've gotten this far, here are some of my thoughts for the possible name.
  • patchsoul prodigy
  • patchsoul octavio
  • patchsoul ponderer
  • patchsoul volta
  • patchsoul porta (short for portable, or maybe portamento if i get gliding in here)
kyudo was in the running ("cute kiddo" mashed together) but apparently that's a style of serious zen Japanese archery, whose adherents i'd rather not offend.

Friday, May 8, 2026

first shoulder tester print

i got my turn on the 3d printer, and there is something really striking about the cyan and yellow combination (specifically sunflower yellow).
well, the columns didn't print the greatest; there was a lot of fuzzy beard up to the z level of the walls. i tried to sand them down but at some point i ended up breaking one off. i was able to wedge it back in from the bottom so that i could test the shoulders.
i may just print the columns separately and wedge them into the case; it will give a optional color offset. alternatively i may make these screws; it's possible these will be subjected to too much force.

these actually feel pretty good for shoulder buttons, too! so that's a success. but i'll definitely be curious how they feel with a button to activate.

Thursday, May 7, 2026

design for constructability

the Oskitone Scout is a huge inspiration for this work, though i am reverse engineering the design into build123d without looking at Oskitone's openSCAD specifics. i printed a copy and am reading rough dimensions with a ruler, and adjusting for look/feel. still you can't argue with how good the Scout looks!
one of the things the Scout keyboard does is put nubs on the top and bottom of the natural keys. i assume these help with keeping the keys inside the case, but they also look kinda cool and mimic the look of a real piano key with its top lip. to get the keys in the Scout case you kinda have to shimmy them in diagonally (or force it a bit).

back to my design. i'm glad i looked closely at this cut away because if i copied the Scout's nubs i'd have a constructability problem:
my keys will have to slot in from the bottom, and will come in straight due to the shoulder columns. i could redesign the shoulders, or i could remove the key lip, and one of these is easier than the other. well, i should probably even add in a key taper, i haven't yet modelled how the keys depress to make sure i'm not running into the edge of the case.

Wednesday, May 6, 2026

building inside a case

refactored my case code to be generated by a solid that most things should fit inside, which is parametric in the "wall size" so i can generate the outer solid, the inner solid, and an inner solid with some clearance so parts should fit without trouble. the case then simply becomes outer - inner, plus holes for buttons and keys. this allows me to build cross beams a bit more readily, like the keyboard back bar here:
side bar: it looks like the keyboard back bar lays on the shoulder buttons, but there will be another crossbeam in between to avoid the shoulder buttons infringing on the keys' ability to bend, see video below.

the idea is to share as much code between building parts individually and modeling how they fit together, so i have a get_keyboard_pos() function which is used as the first parameter here, and build_case_clearance_solid() is memoized so it only needs to be calculated once. the keyboard position isn't needed when printing so it gets added and subtracted in this method, but not before intersecting with the case's inner clearance.
  def fit_in_case(where, part):
    return where.inverse() * (
        build_case_clearance_solid().intersect(
            where * part
        )
    )
and here is the result with the crossbar.

Tuesday, May 5, 2026

clip tool in build123d

build123d has a visualizer (ocp_vscode) that you can run in standalone mode (python -m ocp_vscode). it has a nice clip tool that you can use to see into parts, which is handy.
i was having trouble with small mouse movements glitching my ocp_vscode view, but restarting ocp_vscode helped.

Monday, May 4, 2026

synth design

i want some way to change the volume, this will likely go on the right knob.

it would be nice to include a way to increase vibrato. this could easily go on left knob, or on pressing up on the joystick.

it would be nice to include a way to increase glide (or slide/portamento). this could easily go on left knob.

i want some way to change the waveform (e.g., sine, triangle, square); i'd like to break this out as pre-duty positive waveform shape and post-duty negative waveform shape, so you could have sine (well, cosine) for the positive part of your wave and square for the negative part. this involves some state complexity, but the default would be to change both at the same time. it might be nice to have this on left knob, but able to go full circle so you can get back to where you started (so maybe a rotary encoder here). alternatively one or two separate buttons would probably be better. two if we get a large list of shapes, but we probably don't have too many we'd want to include. holding L or R individually could change pre/post shapes independently.

it would be nice to include a way to increase duty delta. i.e., the duty can change over time (defaults to no change, but can be increased), and duty is itself how long you're in the positive part of the waveform.

it would be nice to include pitch bend; this could go on the joystick by pressing left and right.

this is going to be polyphonic (maybe 4-8 voices), and i want some way to hold notes without holding down the key - like a piano pedal. the way this will work, i'm imagining: holding either (or both) L/R shoulder buttons will count as "holding the pedal." any notes that are pressed while holding L or R will be changed into that octave (i.e., R -> octave up, L -> octave down), but holding both L+R means the note will stay in the current octave. releasing L or R will update you into that octave (unless L and R were pressed at the same time).

will need to test that out and see what feels best, of course.
[edited 2026-05-11]

shoulder button tester

using build123d is fun because you can make things parametric, and it seemed obvious that of all the parts to this build, shoulder buttons would require the most fussing with parameters.

so i made a shoulder button tester that would be similar to the case in the upper right corner, but would allow faster iteration in case i needed to change the enclosure and button. here's a first pass on the design:
of course i couldn't help over building it, but i'll be able to use the crenelations for the real enclosure as well.
looks like i'll have to be careful with keyboard + shoulder button overlap. hmm

[edit] i think having an internal stopper will work better for our case, so we can minimize the number of things moving around inside the case where they might not be desired. this column (and where it can move in the negative space) will stop the shoulder button from exiting the device, but could also be engineered to reduce force on the internal button after a certain point.

building a gadget

i have too many interests and too little time for any of them, which is why i recently started a new project. heavily inspired by the Oskitone Scout, and for the purposes of having a handheld pitch generator (for an a cappella group i'm a part of), but also because i wanted a cool synth toy, i made this sketch:
the idea is to be able to change octaves by hitting the shoulder buttons, so you only "need" one octave of notes. it was intended to be played via thumbs.

a few days later, i wanted to lean into the game controller vibe, so it has a joystick, probably for changing pitch by aiming left/right and some other sound qualities like vibrato or duty by aiming up/down. i've been modeling it in build123d, one because i like python as a scripting language and two it feels pretty intuitive (in algebra mode at least).
i am building my 3d printing skills up (i should probably blog about the Catan-like board game i made pieces for), i already am confident in my ability to write code (i've even done low-level microcontroller audio code for the bitbox), but the but the one skill i don't yet have is wiring up circuits and microcontrollers. i'm terrified but also looking forward to trying to develop this.