keKit 1.304 21-11-26

A collection of my scripts for Modo. 

Python3 (modo 15+) is supported. Should also work fine on older versions.

Copyright © Kjell Emanuelsson, MIT license. Not PEP8 complient.


  • Open user content folder (available in modo menu) and put the kit folder in the plugin folder.  See kit install video.


  • Mouse-hover over each script in the kit in modo, or,  read header info directly in the .py files in a text editor.

How do I Update?

  • Overwrite the old kit!  

Public Discussion & Feedback HERE 

Download here (or click the banner above...)

Note: Gumroad links - Dont worry, no need to pay me if you dont want to! ;)

Release Log

More Info (and caveats) below.

Update 1.304

- Python3+ conversion issues fixed (probably!)

- Hotkey assignment bug for Item Mode Toggle fixed
- Kit Menu cleanup & version nr fix
- Added Fill-Slicer script to menu (was already included, just not in the menu): Contextual tool, see tool-tip for modes.

Update 1.303 - Converted scripts for Python 3 support. (Consider it a beta, as it is pretty much untested.) keKit 1.301 is still available on gumroad for 2.7.

Update 1.301 - Fixed selection bug in Bounding Box script: It will now create a bbox around a selection (or all if nothing is selected, as is the modo way.) Both in                                       world space mode and local space (item rotation) mode.

Update 1.3 - (Misc) Added Item Mode Toggle. Toggles between item and element mode, and remembers which mode you were in. (like in blender, for example)

                     also - Minor tweaks, and version nr bump just to give a slightly better status comparison to the blender kit version nr.

Update 1.165 - Added new mode for Nailgun to parent instances to target mesh - use tool choice in nail gun menu and ctrl-shift to map hotkey.

Update 1.161 - Updated Unrotator - Fixed "center" mode.

Update 1.16 - Updated Mouse Mirror  - Added "Merge" alternative; merges mirror geo + UV-mirror & offset to avoid mirrortangled uvs). +optimization.

Update 1.155 - Added DupeToPoly  - dupes first selected item to all faces in last selected item (with optional arguments in the menu). 

Update 1.154 - Updated SnapMode 1.1  (snapping modes in pie-menu) - Transform tools are now reselected also in Item mode.

Update 1.153 - Fixed FitPrim two-vert mode offset bug when used across two mesh layers (item transforms). 

Update 1.152 - ACTUALLY Fixed bug in FitPrim - where single poly fitting used the wrong sizes.

Update 1.151 - Fixed bug in FitPrim - where single poly fitting used the wrong sizes.

Update 1.15 - Added Convex Hull 1.0 (and Convex Hull Each) script. Video.  Also, changed the hotkey for assigning hotkeys to CTRL-SHIFT, instead of just CTRL.

Update 1.13 - Fixes for Replace All with Last : Unparenting / Instance source replacement issues fixed + selecting result now.

Update 1.12 - Minor fix for - removed pack line as it wont work on certain versions for some reason (not rly needed anyways...)

Update 1.11 - Fixed Unrotator 1.4 - Item placement should work now, also using target geo normals for placement for better subd placement. 

Update 1.1 - Added new scripts: Randomize Items, Atlas & Texel UV-map, MakePoly & UV.  Also updated Cavity Bridge, so it does'nt merge -all- the verts.

Update 1.072 - Added new script: Replace All with Last.  Turns ALL selected items into the same as the LAST selected - with the individual transforms intact. Like this.

Update 1.071- Added new mode to Unrotator: Center - places geo to target geometrys centerpoint (in the middle of faces).

Update 1.07 - Unwrapper 2.0 added (in UV-pie). I prob should do a video...maybe later - Just try it in the UV pie and/or read the script header for now ;> 

                       Also, ContextJoin & Collapse updated with multi-layer (+ unselected, but active "foreground" layers) support. 

Update 1.065 - Added ContextJoin and ContextCollapse (will use resp. join or collapse depending on selection type) along with my Merge & Tools pie menu. 

Update 1.064 - Added Crease Weight script & pie menu. Also added edge weighting pie menus.

Update 1.063 - Fit2Grid v1.2 Update - Fixed value input bug + Added better micrometer support & micrometer fit2grid pie

Update 1.062 - Material Backup (will backup unused materials), SelectMoreUntilLoop & Select Parents (selects selections parents instead - for grouped)  added.

Update 1.061 - Fit2Grid v1.1 Update - Added user value prompt (argument) for custom grid size (This variant is also in the menu, not just in the pie.)

Update 1.06 - Added Arrange Items, Switch Places, Purge Images and Purge All. Also made changes to Cavity Bridge. Video.

Update 1.05  - Retube 1.0 , Quick Tube Scale, Unrotator "selection only" mode + bugfixes, piemenus.  Video.

Update 1.042 - CavityBridge 1.1 - Adressed pretty bad bug ! Should work a lot better for heavily subdivided edges now!

Update 1.041 -  MouseFlip1.3 : Fixed various re-selection bugs & issues!

Update 1.040 - Added CavityBridge 1.0. Video.

Update 1.038 - MatchCenters fix - filters selection, only mesh items (for now)

Update 1.038 - Added MatchCenters script. Added new modes for Center2Selected + visibility fix. Visibility & (no) selection fix for Unrotator.

Update 1.037 - Fixed & Added new toolmode for bbox: Local (uses item transforms for orientation) + (working in both world space and local space)

Update 1.037 - MouseMirror 2.0 - Functionality change : In POLY MODE now only mirrors SELECTION. VERT or EDGE selection will CONNECT.

Update 1.036 - Unrotator 1.23 - bugfix! doh.

Update 1.036 - Unrotator 1.22 (should not need using "flip"  as much now) and some adjustments to unwrapper & uvplanarselected.

Update 1.035 - Added ke_fit2grid v1.0    >>> Instructions/Tutorial image here <<<

Snaps every selected vert from element selection (or all verts, if in item mode) to nearest grid position as specified.

Meant for low poly use, a few verts at a time - will be very very slow on > 1k vert selections.

- Verts already on the specified grid will not be fit to grid.

- See the count of fitted verts in the event log.

- Fitted verts will be selected. ( set "select_fitted" variable to False to skip. )

- Could be useful just to check if you are actually on grid...

- Assuming metric units used (meters: just convert the arguments (yourself!) in the pie cfg if needed;>)

Update 1.034 - Added ke_slice and ke_fillslicer (unlisted) + ke_edgesplit (unlisted) -bugfixes to ke_center2selected (works in item mode now...) and TripleSplitSpin.

Update 1.033 - Updated TripleSplitSpin 1.3 - Added default split behaviour mode (splits all polys sharing verts)

Update 1.032 - Updated TripleSplitSpin 1.2 - Now stand alone! Also, has spikey! (see video here)

Update 1.021 - Updated Unrotator with edge selection tweak.

Update 1.02 - Added Mesh Item (& instance) support to Mouse Mirror & Mouse Flip (+ pie menu w. macro)

Update 1.0 - Somewhat final - added Unrotator, CircleQuad +some minor tweaks & stuff. Some scripts have been replaced in the menu, still in the kit tho.

Update 0.21 - Nailgun 1.0

Update 0.2   - Speed improvements: Nailgun (Major), QuickPaste (minor), also added the slots to Nailgun, finally. new script "placeItemThere"

Update 0.15 - Added Rot2GroundCenter, offsetWP2sel, RotWPy90 +  pie menu update.


Additional Info & Caveats:

If you already have any of these scripts installed separately - You need to remove those to avoid conflicts with the kit.
You may of course download the kit and just use scripts separately (It may or may not work, I make no promises! )
For loose scripts: Place the .py (and if included, .cfg) files in user scripts / config - unless otherwise noted.  (Helpful tutorial here ).
Tested on modo 12.1v1 mostly. Some on modo10 & 11. Some scripts will probably not work on older versions.
Update by overwriting should work 99% of time, but, Modo *may* still retain info in the main cfg causing some compatibility issues.
No easy fix here afaik? Remove all kit entries from main cfg or just use a fresh cfg..

Out-of-date Script specific info /  videos: (Somewhat older Selection, not exhaustive list, probably not updated...check update comments :))

ke_prim v2.1


Simple script that fits/aligns the work plane contextually and activates your primitive tool of choice:

Nothing selected = Default primitve tool, at current scene work plane.

Element selected = Aligns workplane to selection and fires set primitive tool. 

Mouse over = Aligns workplane to (unselected) element under the mouse cursor and fires set primitive tool. 

2.1 Update : Added "unit" argument  - replaces CTRL-clicking for unit prim at 0,0,0  +does not reset settings (seg/sides etc)  for cylinder, sphere and cone tool!

Complementary Macro : ke_tooldrop - to reset work plane when you are done and drop the tool, you can map this to 'Q' or what not.  See video HERE.

Note :The Macro is included in the kit.

ke_fitprim v2.43


Creates unit size (+length fitting modes) primitives based on different types of selection. First selected "island" is intended prim pos/size.

- Uses modos built in primitive tool for prim settings/creation.

- User argument overrides available for sides and segments values

- Multiple item support (only processes first two items) --> Item Selection order is important <-- First item selections always first island.

- Basic symmetry support (world axis ONLY - does not support item transform compensation or workplane symmetry)

2.43 : Default to poly from item mode, Unitconversion fixes

2.41 : Added unit conversion (All SI & Imperial units + Game Units)

2.3  : No-Select symmetry fix

2.1  : Fixed item transform compensation issue (from vert position type)

ke_xthick v1.0


Extracts selected polygons and thickens them - automatically setting the shifted distance to the shortest edge length OR

sets shift to the distance to the second selection island (via point to plane calculation).

Selection order important - first island is the intended operation, second is distance.

With multiple items selected, order is important : first mesh is op, second is distance.

NOTE : Symmetry is not supported. it will restore symmetry to avoid dupe polys, but selection treated as above (if islands)

             Work plane will be retained also.

ke_stepscale v3.0


Doubles or halves size - When scaletool is active.

Doubles by default. add "half" as argument to half size selection: " half"

(will not keep element scale values - always at 100% in tool)

Suggest mapping contextual hotkey to "transform" tool (weirdly same mapping for scaling - will only work when scale tool is active still)

Note: if mapped to mouse btns = modo jankiness -> req perfectly still mouse...

ke_bbox v1.0


Makes a bbox. Everyone has to make one of these scripts, right? More like a reminder that I really want a convex hull script (not sure I want to/can make one tho)

No Video.

Three Macros


Selectngons, weightngons & selectbetween:

A few simple macros for quicker selections: Select all connected ngons -> a version that also applies edge weighting.

Also, a useful macro to 'select between' a little easier.

EDIT: It seems this type of 'select between' is already standard in Modo (at least in 11.2, I have no idea when it was introduced (9?), had this macro since the age of the dinosaurs...)  So, You dont need it - just hit SHIFT-RMB....doh.

ke_QuickTube 1.3


Makes pipes along element selections (using tube tool):

VERTS (in selected order),

EDGES (in any order - crossing loops will cause random directions), and POLYGON faces (makes a border edge selection)

(at least 2 verts, 1 edge or 1 face. vert mode only makes one tube.)

Edge loops ,if continous, are CLOSED unless using the scale argument, leaving uncontinous loops OPEN.

By default it uses the values from the TubeTool for sides,segments and radius.

Symmetry is turned off during operation and turned on again afterwards if on.

Workplane placement will be retained after operation.

MouseMirror 1.0 & MouseFlip 1.0



Mirrors selected mesh (select edges or polys) towards mouse pointer locally - meaning next to the bounding box (on relevant axis, as indicated by axis gizmo down left)


Flips your selected & connected polygons based on the mouse pointer position in relation to your selection and your viewport orientation:


Basic world axis symmetry support.

Option: Fit workplane beforehand for custom angles. (mouse placement not important)

Tip: dont place mouspoint *too* close to selection, pref a bit outside selection bbox.

Known issue: If you undo, the WP might be locked to preferred angle: Just reset wp to unlock.

Nailgun 1.0 & QuickPaste 1.1



1.0 - Enabled symmetry move. Fixed offset. Fixed selection bug(s).

0.91 - Workflow improvements (repositions when selecting instanced items now)

0.5 - Major speed improvement, added the slots!

Instances "loaded" item to where you point the mouse (on *any* mesh item - *except instances*)


1.1 - Minor speed improvement, no longer uses Paste.Tool, removed "fit" opt.

Select POLYS to copy and point your mouse at intended target poly to align to.

Source polys should be oriented "straight up" in Y axis. Option: Set WP beforehand for specific wp-placement.

wpUnrotate 1.0


Aligns element selection straightens/unrotates with position + 'unrotation' (rotation resets) from aligned workplane

Usage :   

1. Fit Workplane to where you want the 'bottom'

2. Select any elements. Connected elements will be selected, so no need to select all.

Note : Workplane Y axis should point 'outwards'..

Itemize 1.0


Turns element selection to a new item with position and rotation from aligned workplane.

Usage :   

1. Fit Workplane to where you want the 'bottom' of your new item.

2. Pick EDGES or POLYGONS that will be itemized. Connected mesh will be selected, so no need to select all.

3. The FIRST vertex selection = CENTER offset position (where your center POSITION will be) instead of workplane center.

(Verts will thus also be checked in EDGE/POLY mode, so keep vert selections empty unless you want an offset center.)

argument : dupe  - Makes new item. if you prefer to keep the original geo too.

Note : Workplane Y axis should point 'outwards'.

Rot2GroundCenter 1.0

offsetWP2sel 1.0 ( and RotWPy90 )



Rotate to ground and center - "Bottom" determined from first selected poly (or pre-fitted Workplane).  Select additional polys to be included. (Script will use select.connect, so no need select all connected polys.)

Option: Select one vert to offset centered placement (origo position)  *** Make sure no verts are selected if you dont want this ***


Offsets an active work plane to the average position of any element(s) selected. 


RotWPy90 - Rotates active wp along Y (to re-orient X & Z directions)


Unrotator 1.21


1.21 - Quick fix for open border edge selections to reduce need of flip command.

          This will auto-flip when vert in edge selection is part of an open border (no cap cyl)

TLDR: Do you know the  "rotate to or unrotate" script by seneca menard? It's like that.

Else: When you point at the connected mesh (or to "space") the script Unrotates connected element selection, using the selection geo as vectors to "straighten" it, OR,

Places connected geo on OTHER mesh surfaces you point to. OR, where an active Workplane is fitted, if any.

Poly mode: First face is the new "bottom" used for vector calc. Add more to include unconnected geo.

Edge/Vert mode: Have at least three verts. Use poly mode to add unconnected geo. Be sure to be in edge/vert mode for those to be used as bottom.(Also make sure to *not* have polys selected in vert/edge mode if you *dont* want them included)

Item mode: Unrotates simply resets item rotation. Place by pointing at other mesh surface.

Optional modes: 

Duplicate/Instance - Duplicates selection (items) when placing.

Symmetry: Applies simple world mirror operation. (It checks for VISIBLE (hidden =/= invisible!) items at the mirror position. jfyi.)

CircleQuad 1.0


Bevels a subdivided circle ngon from poly selection islands (for making holes or cylindrical protrusions or sumn)

Note: Uses radial align. In a very slow macro-ish way - expect LONG waits on large selections.

Also, intended for square-ish selections - may get wonky on long rectangles ( and uneven ngons).

Optional modes :

each face - Bevels each single face instead of selection islands

perfc    - Uses Seneca Menards "" instead, if you have it. (each has use cases)