[Update: Added another variant for "Wilton Gel Food Coloring Containers". There are now trays with these diameters: 25.5 mm (e.g. Army Painter, both standard and elevated variants), 33.5 mm (e.g. Citadel, standard variant) and 29.0 mm (e.g. Wilton, standard variant). If there is demand for elvated variants of the 29.0 mm and 33.5 mm trays, please leave a message.
Be careful: Currently trays of different diameters cannot be combined, except if you go for the two prototype models mentioned below. However, if this is needed, let me know in the comments.]
Recently I started painting the minis of a Zombicide board game I bought (being a total painting noob, I will not elaborate on how the minis turned out… ). I quickly realized that I needed a some kind of storage solution for the growing collection of paints so designed an expandable tray that I could add pieces to whenever I got new paints.
The tray consists of single parts that can easily be connected in any order. The connection is very tight and stable, so, once put together, the tray feels like a single piece and can easily be carried around. A single piece weighs about 6g and prints in about 45 min. The brush holder is a bit heavier and takes much longer to print, however, only one or two of those should be needed.
This works similar to how jigsaw puzzle pieces fit together:
I mainly print with Prusament PLA or DasFilament PLA, using the standard Prusament PLA profile in PrusaSlicer. If the model dimensions are accurate, the connection is tight enough to make them hold together quite strongly, but still loose enough to make separating them an easy process.
However, if you printer is not well calibrated, you might end up with connectors that are too large or too small. To check accuracy, print two or three pieces of the test STL and try the fit. If you need too much force to push them into each other or, on the other hand, the fit is too loose, check if your filament diameter or your extrusion multiplier are correct. You can also play with the “x/y compensation” function to change the outer dimensions. This allows much finer control than rescaling.
This tray is made for Army Painter paints. If you need a different size, rescaling should work fine within a certain range. Just make sure you use the same scaling factors for all pieces. Also, upscaling in the Z-direction will increase the friction area of the connectors and you might require more force during assembly and disassembly.
Please let me know what you think. Also, do feel free to drop me message, if you have problems with printing these.
All my models are free and may be used and shared by everyone. I put a lot of time in my designs to get everything right and I hope the result shows. So, if you like my stuff, consider supporting me here: paypal.me/schnelge.
Cheers! ^_^
Update 1: I quickly realized that finding paint bottles in the rear was pretty hard because the labels were blocked by the bottels in the front. So I added two more designs to elevate them and making it easier finding them.

Update 2: A user asked for trays, that can be used for two different bottle sizes (e.g. Citadel and Army Painter). I came up with two prototypes. I don't use Citadel colors so I cannot really test them. So, if anyone finds this useful, please give it a go. Feedback would be much appreciated! ^_^

Update 3: Added another model for containers with a diameter of 29.0 mm! Pic will be added later.
P.S.: This project was inspired by my Interlockable Sorting Cups. Feel free to take a look.
The author marked this model as their own original creation.