-25% sale! PistonPusher 2.2 - Paid blender add on

Hi all!

I’m proud to present PistonPusher.

PistonPusher is the result of my efforts to standardize a niche in asset creation: Pistons.

I’d kindly invite you to look here if interested:


What is pistonpusher

Pistonpusher is an add-on that can quickly rig pistons/actuators in a special way. There are also features to help integrating them. These pistons are special in the sense that they are far more flexible than pistons made with bare minimum solutions.


  • Pistons can easily be made longer and shorter. In both retracted/extended states. This behavior is disabled with a single click.
  • Pistons can exist out of any number of objects.
  • Individual elements can rotate freely, think of the rod, mounts and cylinder themselves.
  • (inverted) telescopic pistons are supported.
  • Pistons are easily removed from a scene.
  • Easy to place and connect to a model/armature.
  • Custom object and collection management system to keep order among all these objects.(No duplicate names if you took the time to name objects)
  • Instances of a type are derived from the first instance that was placed meaning you can edit multiple pistons in a target scene easily.
  • Materials can be added beforehand.
  • Very flexible.


The add-on was brought to life to make concepting easier. I’m not very good at drawing and I prefer to model it and get an idea of what it could look like. Where it really shines is if you want to take concept art a notch up. All together, it’s very easy to get things animated with these tools. So there’s some utility outside the scope of pistonpusher.

For who?

There’s potential for concept artists but also animators. They animate quite well, joints can be included. Pistonpusher does most of the leg-work and offers a solid way to re-use your pistons.

What can it not do?

Pistonpusher is really a dedicated solution for pistons. It’s not a complete rigkit. There are tools that provide the option to quickly get moving footage but you’re by no means forced to use these and can simply use the add-on to support your own methods/workflows.

Other features:

  • Creation systems. Easily model and rig various types of pistons. Adding parts is also easy.

  • The ability to stop a piston from stretching infinitely long. Pistons can stretch in both extended and retracted states. This behavior is easily disabled/enabled with the (un)lock length anchor operator.

  • Easily remove pistons from a scene, instances are counted and re-named automatically if need be.

  • Snap selected to active. Can ignore rotation/scale/location. Can auto-constrain to the active object or snap single objects to the 3d cursor, even if the object is parented. It is also used to place instances.

  • Set child-of tool. This tool easily sets child-of constraints. Even if such a constraint already exists. Can target armature bones too.

  • Create linked duplicate array, works with empties too.

  • Multi-place: Place multiple instances easily, works on selected objects or pistonpusher radial arrays.

  • Track to and apply - Crude align tool that simply adds and applies track to constraints. Can be used to quickly align decals that are already on the same plane, but have different rotations.

  • Reset hooks. This operator can reset hooks on selected objects, or all if no objects were selected. Optionally you can also apply scale and rotation. This is sometimes useful when you’re creating a piston with a template that heavily relies on hooks.

  • The ability to toggle viewport visibility on/off for all subd modifiers.

  • Select tool that can select objects based on collections and empties based on names.

  • Overlays designed to help troubleshoot issues if your piston does not behave as expected.

  • Asset/Collection management. Easily identify which objects belong to which piston.


If you have any questions, ask away!


I just updated it to version 1.2

Added thumbnail support!

For version 1.3 I planned changes to streamline the appending and instantiating process more!

PistonPusher 1.4 is available for download!

You can now snap a piston into position right away by clicking on a thumbnail ( forgot to add that in the video) additionally, while you’re at it, you can cycle through all types and sub directories you have. Can be ram intensive though. Also added a use case that demonstrates where I would use it.

I used quite some assets that came with kit ops for this scene, and even more from a free kit ops pack made by Andrew Averkin:

500 FREE HardSurface Kitbash Inserts for KitOps - BlenderNation

Lastly, I implemented a crude ability for users to configure hotkeys for new features. Basically, you just enter an event type as found here:

Event(bpy_struct) — Blender Python API


Some previews of update 1.5:


1 Like

Some more:

Adding the actual constraints for a stretchy piston is pretty easy at this point and will also be automated for most cases.

the pie menu changed too. Now it’ll stay open after clicking something in it.


A working piston in 30 seconds!

front/rod end trunnion mounts will work as well. Side mount/flange(and theoretically double rodded types) too.

Adding static connectors (and pipes) is also trivial, mirrors are handled as parts are added to the scene.(only mirrors with no mirror object set). (hose) connectors that are able to rotate around the piston are best added after the constraining process.

It’s pretty far done now. If i don’t run into issues while testing you can expect the update to be available this weekend.

A little how to video intended to show the correct settings for different types. Will be available for download later today.

(one i made with it)

1 Like

Update 1.5 is available for download both on blendermarket and gumroad now!

Just updated to 1.5.2

  • Added a telescopic rod

  • Parts can now be accessed outside of the creation process. There’s a toggle for it in the create section in the N menu panel.

  • Collection clean up is now performed while you prepare the piston for constraints.

  • Constrained the creation process a bit more. You can’t constrain before the piston is prepared now and you can’t prepare anymore after the piston is constrained.

  • Small misc changes related to the above changes.

  • After adding a mount, the snap to dropdown menu switches to the other side. So you can add them quickly and don’t need to think about it really.




Tested pistonpusher on linux. Works! And for those wondering, blender 3.0 is supported too.

Hi everyone!

I just uploaded 1.5.3 and a new parts directory. It’s recommend you replace the parts directory completely as most files had a name change. Hopefully you haven’t added too much parts yourself yet.


  • Snap modal now allows camera/view control when pressing middlemouse button/scroll

  • Rod end extrusion cutters now maintains offset while adjusting the piston rod radius.

  • ‘Rods’ collection is now named ‘Rod’ when creating a piston

  • Fixed origin of the t mount

  • Once you constrained a piston you can’t change mounts anymore. Instead you can go back to the initial menu used to start the process.

  • Save function bug - Parts have their file names changed to accomodate. It’s best to replace your parts directory with the new one.

  • Mounts saved with an offset on the X axis will have this offset preserved once added to the scene. (Mainly useful for trunnion mounts)

  • Mounts will now automatically scale down to a sensible size.

  • Control empties or parent objects(connectors) are now selected when mounts and connectors are added to the scene.

  • 4 more parts. 3 mounts, 1 banjo connector.

  • 2 templates: single and double action welded rod designs. These have extrusions ready for connectors.

  • Part prepare/make feature! you’ll find this in the create panel as well. It allows you to easily prepare connectors, mounts and rods so that they can be used while creating pistons. It works like this:

For mounts:

You should create the mount in a vertical position. The bottom-most face(s) will connect/touch with the piston rod or cylinder. This face should be at the world origin, or slightly below it if the rod sticks into the mount. Then, the origin of the main object should be set to its pivot point. After this you can select all child objects and lastly the main object. Then click on make. selected objects will be parented to the main object, an empty is added and the mount is rotated into the proper position. For connectors the process is the same but they won’t be rotated or parented to an empty.


For rods:

Rods are created in a horizontal position. You can add details and child objects as well. You can basically just take a cylinder, off-set its origin to a number < 0 on the y axis. All vertices further than the origin relative to 0(y axis) will stick out of the cylinder once you place it later on. Due to the way the rod is scaled, child objects are handled slightly different: You’re supposed to select only 2 objects, even if there are more. The piston rod, which should be selected last so it’s the active object and the ‘main’ (or biggest) child object. (All other objects are parented to the selected object.) Then you can click on make.


Note that this adds the proper collections, constraints and adjusts objects names so they reflect the expected convention(for mounts too). I still recommend giving your objects sensible names. You don’t need to name the piston rod, it’ll be named properly for you. I use transformation constraints for decorative pieces that you might find on piston rods, these are added too. You can add detailing geometry to the rod itself too now but only if you added child objects too(due to cylic dependencies that would otherwise form by hooking these vertices to the ‘p_rend’ empty).

Updated to 1.5.4

  • Mouse input modal operator logic adjusted, it’s now very similar to blender’s native scaling/resize functionality. Cleaned up various quirks with the tool as well.

  • Scaling is now toggled with the S key, shift can be held for finer adjustments. Original scale is preserved if cancelled. If the pistonpusher menu remains open after moving the mouse away, pressing shift will close it.

  • Certain keybinds returned a 'PASS_THROUGH needlessly, this has now been fixed.

  • The modal operator has new features: It can find the length anchor belonging to the instance it’s currently snapping. It’s currently only designed for pistons with a single length anchor This means that you can now press ‘E’ while snapping and drag the length anchor to the desired location. Only works if the length anchor has ‘Length anchor’ in its object name. You can also press ‘R’ to reset scale. I also disabled the ability to scale negatively.

  • Added 2 more connectors: One with a small oil reservoir, One flat like disk thing by lack of a better name.

  • Slightly adjusted the wr-double template so that it’s easier to add a rod end cap.

I also want to thank everyone that bought pistonpusher for their support, so:

Thank you!

1.5.6 Is now available for download


  • Renamed length anchor of rounded piston.

  • Fixed issue with connector 6, a part was not in the right collection

  • Changed connector 0,1 and 2 so that they are more realistic,

  • Added a circle ngon for users that have cablerator, to connector parts that could use one.

  • Changed connector 11, reduced geometry in flat areas

  • Added 4 connectors, 2 of these have control empties to adjust them as you see fit, the other 2 are a nurbs and bezier pipe

  • Added a small kpack that contains 2 different bolts and 1 nut

  • After you made a part, save panel will now show, set at the proper sub directory

  • Added a simple notification system, these appear in the bottom center of your 3dview/viewport and give information about what’s happening.

  • Can now press ‘H’ while snapping to show modal keybinds. Like notifications, they will automatically dissappear after 3 seconds. You can change this duration in the add-on preferences

  • Fixed a bug that would occur if you tried to add a piston to the scene while having 2 objects selected which were not empties. It originally didn’t break the functionality but it did cause an error. This is now handled properly and the operator is cancelled when you try to do this.

  • Fixed bug when adding part while not in the piston creation process, this bug also did not break functionality and simply caused an error in the console.

  • Fixed bug when replacing a piston rod during the piston creation process.

Uploaded a how to/timelapse!

I’m currently collaborating with the one and only @masterxeon1001

As a result of this, we’re adding some really fine, high quality hydraulic cylinders. We just added 4 new pistons. You’ll recognize some of these in masterxeon1001’s videos. A big thanks and shout out to him for helping me out and allowing me to add his work to PistonPusher.

Be sure to check his channel out if you often use cylinders/pistons cause this month his content will focus on them! MasterXeon1001’s youtube channel


Just updated to 1.5.7


  • Fixed gui bug when saving a piston, causing an incorrect notification to appear.
  • Added support for piston designs that can not use a length anchor but still need tracking constraints
  • Added support for subd workflow in the form of a ‘custom’ template. This is a more manual approach to the creation process, so it is not limited to subd workflow.
  • various changes to the N-panel(s). Mostly related to the new custom template/mode.
  • Added ‘C’ keybind to snap modal. This allows you to toggle the auto constrain opt-in.
  • MasterXeon1001 made another awesome looking cylinder/piston. This one is hydro-electric.
  • Bonus content: Also made possible by MasterXeon1001! There is a game ready variant of the glass/see through piston type. It’s also UV’ed. The file also contains the high res version.

1.5.8 is out!

  • Rods are now hooked to the rod anchor automatically if there is not a vertex group. This was a bug related to the custom template which did not re-hook the rod properly. For most rods, you can skip hooking the rod from now on.
  • Prepare operator can now work without a cutters collection.
  • Added a handler that fixed an issue after file reload, related to the piston select tool.
  • Added curve support for the creation system constrain operator.
  • Added a button to toggle subd modifiers viewport visibility of all objects. Found in N panel and pop up menu.
  • Ensured that the ‘go back’ button appears in custom template mode as well once constrained.

Masterxeon1001 has also been very busy!

  • Added 2 constrained game ready pistons.
  • Hydro-electric game ready bonus file
  • Added a ‘plunger’ piston.
  • Updated hydro-electric variant to a version with a better mesh and mount.
  • Added heavy duty sci-fi-ish piston.

That’s strange.

Assuming you just tried to append a piston? Or why do I see the creation system in that state?

I’ll need more info on this, I cant see anything wrong immediatly.

sorry wrong location. Corrected.

Skipped some numbers, kinda, pistonpusher 1.5.11 is out now.

Everything that was wrong with the creation system should be fixed with this update. Pistons that are constrained from now on can also be rotated in an easy way, on a per part basis ( mount/cylinder/rod).


  • UI works properly now and refined the constrain configuration opt-ins a bit more.
  • Rods are finally handled properly
  • rotation drivers are added when you constrain a piston now. This means you can freely rotate the cylinder and piston rod now. To rotate the piston rod(and child objects), select the piston rod anchor. For the cylinder, you can rotate the object that is called 'Cylinder. There must always be an object called ‘Cylinder’ from now on.
  • rear length anchors come with another empty called _rla now. This is the empty that you want to move now, if you wish to make the cylinder longer.
  • Pistons that are constrained without a length anchor, or without tracking constraints are no longer stretchable, this was needed so that you can easily rotate the cylinder in these cases too.

This only applies to newly constrained pistons. I still have to re-constrain all assets.

PistonPusher 1.5.13 is out.

  • Objects now maintain visual transform when you set/overwrite a child of constraint.
  • Snap modal properly snaps a piston to empties, even if the empties are parented to something else.
  • Length anchor name requirement for snap modal is now case insensitive
  • front/forward length anchors of newly constrained pistons can now be (un)locked properly again, even after the piston moved.