OpenCube is a 3D-printable filter cube implemented using OpenSCAD. OpenCube can house round filters and rectangular mirrors of any size. It can also be connected to any lens tube by insertion of a retaining ring into a filterFace. OpenCube overall size, as well as sizes of all housings can be easily adjusted by editing parameters in a setup file.

OpenSCAD files available on GitHub.


OpenCube consist of a frame, which provides a structural support, a set of faces that allow to customise the functionality of a cube, and a mirror holder that positions a mirror in the middle of the cube. An overview of all OpenCube components is given below.

Square components


Triangular Components


Frames are the structural components of a cube.

Frames feature housings for standard hex nuts, which allows attachment of faces my the means of screws.

Square frame

The size of a squareFrame is by default equal to $cubeSize + 2 * $postSize, but can be adjusted by passing a frameSize parameter, which can either be a single value for a square frame or two values for a rectangular frame.

A squareBase is a variation of a squareFrame which allows to print squareFrame and squareFace in a single unit.

Triangular frame

A triangularFrame is useful when only two optical inputs/outputs are required.


Faces are interchangeable components of a cube that allow to customise it for a particular need. Faces have four holes in each of the corner for fitting screws. The size of the screw holes can be adjusted via $screwRadius1 (radius of a threaded part), $screwRadius2 (radius of a screw cap) and $screwCap (height of a screw cap) in the setup file. The size of squareFace is by default equal to

$cubeSize + 2 * $postSize + 2 * $faceThickness

but can be adjusted by passing frameSize parameter as in a squareFrame. In this case the size of a face will be equal to

frameSize + 2 * $faceThickness.

Note: addition of 2 * $faceThickness is required to create a tapered edge at the interface of two orthogonal faces.

Square face

A squareFace is a simple solid face with no openings for light path.

Square mirror face

The only difference between squareMirrorFace and the squareFace is two additional screw holes for attachment of a mirror holder (see the assembly picture above).

Square filter face

A squareFilterFace functions as a filter holder on inner side, and as a lens tube adapter on the outer side.

Triangular face

A triangularFace covers the triangularFrame.

Mirror Holders

Mirror holders are there to fix a mirror inside a cube.

Square mirror holder

A squareMirrorHolder is placed between two squareMirrorFaces and is fixed with two screws on each side. A mirror is held in place by a squareMirrorCover, which is attached to holder by four screws.

Triangular mirror holder

A triangularMirrorHolder is attached to two triangularFrames. A mirrorCover is used as in squareMirrorHolder to hold a mirror in place.