def METHOD_NAME(self, image,
             parent = NodePath(),
             transform = None,
             sort = 0):
    # Get the original parent, transform, and sort, if any, so we can
    # preserve them across this call.
    if not self.isEmpty():
        parent = self.getParent()
        if transform is None:
            # If we're replacing a previous image, we throw away
            # the new image's transform in favor of the original
            # image's transform.
            transform = self.getTransform()
        sort = self.getSort()
    self.removeNode()
    # Assign geometry
    if isinstance(image, NodePath):
        self.assign(image.copyTo(parent, sort))
    elif isinstance(image, str) or isinstance(image, Texture):
        if isinstance(image, Texture):
            # It's a Texture
            tex = image
        else:
            # It's a Texture file name
            tex = TexturePool.loadTexture(image)
            if not tex:
                raise IOError('Could not load texture: %s' % (image))
        cm = CardMaker('OnscreenImage')
        cm.setFrame(-1, 1, -1, 1)
        self.assign(parent.attachNewNode(cm.generate(), sort))
        self.setTexture(tex)
    elif isinstance(image, tuple):
        # Assume its a file+node name, extract texture from node
        model = base.loader.loadModel(image[0])
        if model:
            node = model.find(image[1])
            if node:
                self.assign(node.copyTo(parent, sort))
            else:
                print('OnscreenImage: node %s not found' % image[1])
        else:
            print('OnscreenImage: model %s not found' % image[0])
    if transform and not self.isEmpty():
        self.setTransform(transform)