Batch Renaming 3ds Max Objects with Py3dsMax
Batch rename 3ds Max objects using Py3dsMax, with version checks, a worked example, and rollback guidance.
09 Oct 2025, 10:07 UTC

The problem: hundreds of objects, one naming convention
You receive a scene where every mesh is named Box001, Box002, and so on. Your downstream importer expects env_crate_01 style names. Renaming by hand is slow and easy to get wrong. 3ds Max offers two main automation paths: MAXScript, the legacy scripting language, and Python through the embedded MaxPlus (Py3dsMax) API, available starting with 3ds Max 2020. If your pipeline already uses Python, sending a MAXScript out of band creates friction. The practical decision is to use Python where it is supported and fall back to MAXScript only for operations the Python API does not expose.
1. Verify the Python API exists on your target machine
Do not assume Py3dsMax is installed. Open 3ds Max, open the Listener or the embedded Python editor, and run:
import MaxPlus
print(MaxPlus.Core.GetFileVersion())
Where to run: inside 3ds Max, not a system terminal. Required permissions: none beyond normal write access to the scene. Expected check: the command returns the Max build version without raising ImportError. If you see an import failure, the installation predates 3ds Max 2020 or has Python disabled; use MAXScript or COM automation instead. Risk: long scripts block the Max UI, so test on a copied scene first.
2. Worked example: prefix selected geometry
This example iterates the current selection, reads each node’s name, adds a prefix, and reports how many objects changed. Run it in the 3ds Max Listener or Python editor:
import MaxPlus
def batch_prefix(prefix="env_"):
nodes = MaxPlus.SelectionManager.GetNodes()
if not nodes:
print("No nodes selected.")
return 0
renamed = 0
for node in nodes:
current = node.Name
new_name = prefix + current
if current != new_name:
node.Name = new_name
renamed += 1
print("Renamed {} object(s).".format(renamed))
return renamed
# Run against the current selection
batch_prefix("env_")
Expected checks: watch the Listener for the renamed count, then open Scene Explorer or use Select by Name to confirm the prefix appears. Because this changes scene state, you can roll back immediately with Edit > Undo (Ctrl+Z) in the interactive session. API property names can differ between releases, so confirm node.Name behaves as expected in your installed version before running on production assets.
3. Trade-offs and limitations
| Factor | Detail |
|---|---|
| Version support | Py3dsMax is not available before 3ds Max 2020. |
| API coverage | Some modifier, controller, and renderer settings remain MAXScript-only. |
| UI responsiveness | Batch operations block the interface until finished. |
| Version drift | Behavior differs between 2020, 2024, 2025, and later releases. |
Closing: make the call before you script
Run the version check on each workstation that will process scenes. If Py3dsMax responds, add the prefix snippet to your tool menu and treat MAXScript as the fallback for properties Python cannot reach. If it does not, write the same logic in MAXScript. Always validate on a disposable copy of the scene before touching the master file.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.