Friday, 8 May 2026

insert string before string, Python script for Maya

generated through ChatGPT.. mel solutions seemed broken.
This will make a popup window, you put in your desired string and the one you want to put it in front of. Whatever you have selected gets processed

# =======================================================
# Maya Python Script
# Insert String BEFORE Another String
# on Multiple Selected Transform Nodes
# =======================================================

import maya.cmds as cmds


# -------------------------------------------------------
# Rename Logic
# -------------------------------------------------------
def insert_before_rename_execute(*args):

    # Get selected transforms
    sel = cmds.ls(selection=True, type="transform")

    if not sel:
        cmds.warning("Please select one or more transform nodes.")
        return

    # Get UI values
    insert_str = cmds.textField(
        "insertStringField",
        q=True,
        text=True
    )

    before_str = cmds.textField(
        "beforeStringField",
        q=True,
        text=True
    )

    # Validation
    if not before_str:
        cmds.warning("Please enter a target string.")
        return

    renamed_count = 0

    # Process all selected objects
    for obj in sel:

        # Skip objects that don't contain target string
        if before_str not in obj:
            print(
                'Skipped "{}" (target string not found)'.format(obj)
            )
            continue

        # Find insertion point
        index = obj.find(before_str)

        # Build new name
        new_name = (
            obj[:index] +
            insert_str +
            obj[index:]
        )

        # Rename object
        renamed = cmds.rename(obj, new_name)

        print(
            'Renamed: {} -> {}'.format(obj, renamed)
        )

        renamed_count += 1

    print(
        "\nFinished. {} object(s) renamed.\n".format(
            renamed_count
        )
    )


# -------------------------------------------------------
# UI
# -------------------------------------------------------
def insert_before_tool_ui():

    window_name = "insertBeforeToolWin"

    # Delete existing window
    if cmds.window(window_name, exists=True):
        cmds.deleteUI(window_name)

    # Create window
    cmds.window(
        window_name,
        title="Insert String Before",
        widthHeight=(400, 180)
    )

    cmds.columnLayout(
        adjustableColumn=True,
        rowSpacing=10
    )

    cmds.text(
        label="Rename Selected Transform Nodes"
    )

    cmds.separator(style="in")

    # Insert string
    cmds.text(
        label="String To Insert:",
        align="left"
    )

    cmds.textField("insertStringField")

    # Before string
    cmds.text(
        label="Insert BEFORE This String:",
        align="left"
    )

    cmds.textField("beforeStringField")

    cmds.separator(style="in")

    # Execute button
    cmds.button(
        label="Rename Selected Objects",
        height=40,
        command=insert_before_rename_execute
    )

    cmds.showWindow(window_name)


# -------------------------------------------------------
# Launch
# -------------------------------------------------------
insert_before_tool_ui()