hello,
the xref will import the material unless it's on Generator mode.

You can maybe juste merge de target document with your current document. This work with a simple scene of course but can go really more complicated.

def main(): if op is None: raise ValueError("you have to select at least one object") if not op.IsInstanceOf(c4d.Oxref): raise ValueError("selected object must be a xref") # Starts Undo doc.StartUndo() # if the xref is in generator mode, we need to import the material from the target document. if op[c4d.ID_CA_XREF_GENERATOR]: targetDoc = op[c4d.ID_CA_XREF_FILE] c4d.documents.MergeDocument(doc, targetDoc, c4d.SCENEFILTER_MATERIALS | c4d.SCENEFILTER_OBJECTS, None) else: result = c4d.utils.SendModelingCommand(command = c4d.MCOMMAND_CURRENTSTATETOOBJECT, list = [op] , doc=doc) if result: doc.InsertObject(result[0]) doc.AddUndo(c4d.UNDOTYPE_NEW, result[0]) else: raise ValueError("couldn't retrieves the CSTO of the xref") #remove the existing xref doc.AddUndo(c4d.UNDOTYPE_CHANGE, op) op.Remove() doc.EndUndo() c4d.EventAdd()

Cheers,
Manuel