While tracking down an air leak in a living room window, I noticed one of the cellular blinds was missing an end cap, so I scanned a pair of surviving caps:

Blow out the contrast, save as a JPG.
Import into LightBurn:
- Trace the outlines into paths
- Use LightBurn’s shape optimization tool to dramatically reduce the number of nodes & smooth the outlines
- Overlay & align the shapes
- Export as an SVG file
Import into Inkscape:
- Put the paths on named layers
- Center around an alignment mark
- Save as an Inkscape SVG

It is slightly tilted, but that doesn’t matter. You could devote more time to smoothing / reverse-engineering the shapes, but that doesn’t make much difference, either.
Inkscape exports the SVG coordinates with respect to the overall page origin in the lower left corner, so when OpenSCAD imports the SVG the paths end up far away from the origin. The trick is to put a 2 mm diameter circle at a known location, center the paths around it, then have OpenSCAD use the circle’s location to recenter the paths.
Because Inkscape uses the lower left corner of each shape as its origin, you must put the circle at (99,99) to have its center at (100,100). That is one of the many reasons you (well, I) can’t use Inkscape as a CAD program.
Import into OpenSCAD, recenter, and extrude the shapes:
CapCenter = [100,100];
PlateThick = 1.8; // thickness of visible end cap
HolderTall = 10.0 + PlateThick;
union() {
linear_extrude(height=PlateThick)
translate(-CapCenter)
import("Living Room shade end caps - Inkscape.svg",layer="Exterior");
linear_extrude(height=HolderTall)
translate(-CapCenter)
import("Living Room shade end caps - Inkscape.svg",layer="Retainer");
}
Which produces a solid model:

Save the model as 3mf, import into PrusaSlicer, and slice:

Making the retainer shape a little wider would be a good idea to get better infill, but it’s a slip fit into the blind (surely why it fell out long ago) and need not withstand any stress.
Print as usual:

And then It Just Works™:

It’s sitting atop a bookcase while I finish tinkering with its window.
All that seems like a lot of fiddling around, but it uses each program to its best advantage and it’s surprisingly easy after the first few models.
Comments
One response to “Quick-n-Easy Window Shade End Cap”
[…] do not know what changed or if, in fact, my misunderstanding of how things worked required the previous workaround, but this is much better. The OpenSCAD code includes a [0,0] offset value, should you need […]