Skip to main content

Paul's Gridfinity Things

This Python program will generate several different kinds of gridfinity compatible objects for 3D printing. Gridfinity is an open source storage system best introduced in this video and then this diagram. Look on thangs and printables for more compatible parts.

Setup, You can install with pipx.

sudo apt install pipx
pipx install --python python3.12 gfthings

Or with uv, which also makes installing the correct python version easier.

  1. Install uv
  2. Use python 3.12 uv python install cpython-3.12
  3. Install gfthings uv tool install -p python3.12 gfthings

If you want to modify gfthings then build it with uv.

  1. Install uv
  2. Use python 3.12 uv python install cpython-3.12
  3. Tell UV that you also want development dependencies installed uv sync --extra dev
  4. Activate the local virtual environment for this shell . .venv/bin/activate

If you choose this option then you must run commands from the local virtual environment (step 4).

Copyright (C) Paul Bone Distributed under: CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/

Bins

Bins are gridfinity bins. They are inspired by Pred's bins and include the same label shelf. They are easy to print (overhangs and bridges are minimised) and can be generated in a number of custom sizes with and without dividers. For more information see:

gfbin -h

Features

The bins have a label shelf, of course you could use a label maker and stick on a lable. Or 3D print a label with Nick's excellent gflabel program and choose pred style labels.

Maybe you can just tell what's in your bins and don't need a label. That's what the --no-label option is for!

Ooh, that bin has a dividor. To add dividors use the -d option. Giving a 2 will make 2 compartments (1 partition). The above bin was made with:

gfbin --no-label -d 2 -s 10

The -s is for scoop radius. A little scoop in the front of the bin will help you get small parts out. This one has a 10mm radius, the default is 12.5mm. Use -s 0 for no scoop at the front at all, eg if you want to store larger items.

If something you're storing is a tight fit try removing the stacking lip, and if it's still a tight fit, you can probably take 0.4mm off each wall:

gfbin --no-label -s 0 --no-lip --wall-thickness 0.8

What if you want to store chopsticks, but your chopsticks are longer than your printer bed. Print two bins with some of the walls removed (--half-wall) and place them next to each -other. The scope gives a convenient place to put your hand to pick up the chopsticks. Scoops and labels are not supported on half-wall bins.

gfbin -x 1 -y 4 --half-wall

Magnet holes

Bins are generated with Gridfinity Refined style magnet holes. These are press fit magnet holes that allow you to insert a magnet from the side.

Use the blade of a flat-head screwdriver to push the magnet in. No worries if you put it the wrong way around and need to take it out. You can get a thin pin or alen key into the gap on the bottom of the bin to push it back out.

By default this fits 6x2 magnets, but maybe you've got some 8x3 magnets left over from another project?

gfbin --magnet-dia 8 --magnet-height 3

Or maybe you don't want "gridfinity refined" style magnet holes. Try --unrefined.

Sizes

You can make bins of any size, units are specified in "gridfinity units", that's 42mm across and back-to-front. Up and down is 7mm per unit plus the base.

The two bins on top of this stack are generated with

gfbin -x 2 -y 2 -z 3 -d 6 -s 0
gfbin -x 1 -y 2 -z 4 -s 0

Whole numbers aren't flexible enough. Try .5 numbers. This bin is 1 unit wide, and 1.5 deep. This works provided its base profile can be half the size, it is generated with:

gfbin -x 1 -y 1.5 --half-grid

Of course you can use a half grid base with whole number bin sizes, but not the other way around. Also half-grids don't support magnet holes.

Checkout reminders for these options and more with

gfbin -h

Funky bins

I had a tool that has an L shape, storing it in a rectangle bin would be a waste. So I created funky bins. They're specified by providing a 2D list of bools that specify is that square is part of the bin or not.

gfbin --funky \
    "[[True, False], [[True, False], [True, False],[True, True]]" \
    -z 14

The minor lists must all have the same length, and generating bins in this way has a finer stacking lip than when the regular -x and -y arguments are used (currently a build123d limitation).

L-shaped bins are possibly the most useful, but there are many possibilities. Some "special" arguments for --funky refer to presets that may be fun, try:

gfbin --funky donut -z 4 -o donut.step

Maybe this would be a suitable box for coiled USB cables, then place a 1x1 bin in the centre for USB A-to-C adaptors.

The available presets are:

  • donut
  • cross
  • tetris_l
  • tetris_j
  • tetris_t
  • tetris_s
  • tetris_z

Now packing your storage away can really be like tetris. Just don't completely fill a row!

Bases

A minimal gridfinity base. This is a remix of https://www.printables.com/model/608500-gridfinity-base-light-magnetic-connectable-paramet with paramertised dimensions. Try:

gfbase -h
gfbase -x 4 -y 3 -o base.step

To connect bases made with gfbase use the clips found [https://www.printables.com/model/608500-gridfinity-base-light-magnetic-connectable-paramet/files](on the original model). Mulitple bases can be connected to fill the bottom of a drawer. For example this drawer has two 4x3 and two 4x4 bases connected. It also has some edge pieces (comming soon) that prevent the base from sliding around.

You can customise the screw holes, By default counterbored holes that can take a magnet, screw or pin (below) are generated. you can change the screw diameter, magnet diameter and magnet depth.

gfbase --magnet-diameter 6.1 \
       --screw-diameter 4 \
       --magnet-depth 2

By default there are two screw/magnet holes per square. But to save plastic or printing time generate a minimal baseplate with

--screw-hole-count 0

Other valid options are 2 and 4.

Finally there's a "screw hole pattern for drawers" option:

--screw-hole-pattern-drawer

This places exactly 4 screw holes in the corners but not-too-near the corners (clearance for my drill). Which is suitable if you need to mount the base but don't need to provide magnets or iron screws for magnets in the boxes.

If you don't need any screw holes then the base can be made shorter to save time, filament and height.

--short

Base Edges

I don't know about you but my drawers arn't multiples of 42mm and I don't want the bases sliding around in the drawers. So I've added another program that creates "edge spaces" to fill up room and stop be base from slopping around.

gfedge -x 4 -y 14 -o edge.step

Like before the -x parameter is in gridfinity units. But the -y parameter is not! It's in milimetres.

Short variations of the edges to match the short base can be made with the --short option

gfedge --short -x 4 -y 10 -o edge.step

Pins

Pins, or pegs, are a small object that can be used to attach a Gridfinity base to a sheet of plywood such as found in the bottom of many desk drawers. Run:

gfpin

To generate pin.step. Print it at a higher temperature if you can for strong layer adheasion. Pressing it through the gridfinity base and a 3mm driled hole can take some force. I don't know how easy it is to remove - the question hasn't come up!

Metadata

Release files for gfthings 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gfthings 0.9.0
File Size Uploaded
gfthings-0.9.0.tar.gz 14.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gfthings 0.9.0
File Interpreter ABI Platform
gfthings-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 34.5 kB

Release files / gfthings-0.9.0.tar.gz

Download URL gfthings-0.9.0.tar.gz
Size 14.4 kB
Tags Source
SHA-256 checksum
How to use checksums
0427673d13afaba2e80b1d403d58cc93a78b64960efd35038fd63f5156b5913a
BLAKE2b-256 checksum
How to use checksums
42888d917bca1a9381c6960379f2b5a3ac37f7bb30ed74c2f9eed2771efd8578
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / gfthings-0.9.0-py3-none-any.whl

Download URL gfthings-0.9.0-py3-none-any.whl
Size 20.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8f1f18aefcdf3935fb6cc693b5cffbdb67ae33d458d4635b34b097a0cd09c83a
BLAKE2b-256 checksum
How to use checksums
27503bafd3e7ef43aa400eef9ca4a519ae4b2cb0ed47a34fa68caaaccb1c3215
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.9.0 This release

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page