python-plexapi icon indicating copy to clipboard operation
python-plexapi copied to clipboard

Add an actor to a movie/video with role and thumb

Open dom6770 opened this issue 5 years ago • 14 comments

So far I have created a little script to add an specific actor to a search result:

from plexapi.server import PlexServer
PLEX_URL = 'http://192.168.178.100:32400'
PLEX_TOKEN = 'token'
homeserver = PlexServer(PLEX_URL, PLEX_TOKEN)

tag = input(f"Actor: ")

for video in homeserver.library.section('test').search(None, collection=[tag]): 
	video._edit_tags(tag="actor", items=[tag])

It work's fine. An actor appears on that particular video(s) in the collection. Now, I just don't want to add the actor, I also want to add the role and a thumb (photo URL), but so far I could not find anything in the documentation and in the source code. (might be it's quite late and I am tired), but I would be thankful if someone could help me with it or make it possible.

dom6770 avatar Apr 22 '20 02:04 dom6770

You and me both. Creating an actor also creates the actor in the DB where I assume you could add the missing thumb and role but I haven't tried that yet. I'd prefer to do it all with API commands.

blacktwin avatar Apr 22 '20 11:04 blacktwin

@JonnyWong16 found how to add a thumb.

edits = {
    'actor[0].tag.tag': 'Mom',
    'actor[0].locked': 1,
    'actor[0].tag.thumb': 'https://nickelodeonuniverse.com/wp-content/uploads/Spongebob.png'
}
movie = plex.library.section('Movies').get('Title')
movie.edit(**edits)

Still trying to find role.

blacktwin avatar Apr 23 '20 11:04 blacktwin

Found it.

edits = {
    'actor[0].tag.tag': 'Mom',
    'actor[0].locked': 1,
    'actor[0].tagging.text': 'Test Role',
    'actor[0].tag.thumb': 'https://nickelodeonuniverse.com/wp-content/uploads/Spongebob.png'
}
movie = plex.library.section('Movies').get('Title')
movie.edit(**edits)

image

JonnyWong16 avatar Apr 23 '20 16:04 JonnyWong16

Need a addActor or add additional kwargs if it already exists.

blacktwin avatar Apr 23 '20 17:04 blacktwin

Imo we should support objects. So Role.create() and allow that to be passed to edit that serialize this to a url.

Hellowlol avatar Apr 23 '20 17:04 Hellowlol

Agreed.

blacktwin avatar Apr 23 '20 17:04 blacktwin

While you're at it, there's a bug if you use _edit_tags(). Somewhere in the code when retrieving a movie, it only retrieves the first 3 actors. Therefore, when you use _edit_tags(), the tag_helper() inserts the new actor into position 4.

JonnyWong16 avatar Apr 23 '20 19:04 JonnyWong16

It only retrieves 3 as this only what re xml includes. If we want more the user has to movie.reload() is the fourth item overwritten?

Hellowlol avatar Apr 23 '20 19:04 Hellowlol

From my tests it looks like it's inserted and not overwritten. Needs more testing though.

JonnyWong16 avatar Apr 23 '20 23:04 JonnyWong16

@Hellowlol I don't think we can use the Role class to create or edit a role/actor. The actor is tied to a Video object and in order to create one we need to use a Video. I'm thinking of adding the method to add or edit an actor in the Video class.

Some findings in case they are relevant:

Actor's thumb follows the name of the actor across libraries and videos. The role is attached to the video. Actors are not linked across libraries, at least in the WebUI but plex.search('Bob Odenkirk') works :)

blacktwin avatar Jun 05 '20 20:06 blacktwin

Refreshing an item removes all added actors from the item. This makes sense for known movies and shows where metadata is available as refreshing wipes the previous metadata values and updates. However, for Home Videos adding an actor named Mom would be pretty cool but if the library get refreshed all your custom actors are lost.

blacktwin avatar Jun 18 '20 17:06 blacktwin

It shouldn’t be deleted as long as the item is locked.

Hellowlol avatar Jun 18 '20 18:06 Hellowlol

Locked attribute doesn't exist for the tag/field and adding the usual locked str doesn't make a difference. I've created a Plex Feature Request. But I'm not sure that we are really supposed to be allowed to edit actors like this.

blacktwin avatar Jun 18 '20 18:06 blacktwin

With actor[0] and using index= for actor[index] has been very inconsistent. Typically any new actor created or any existing actor that is edited (add or change role, thumb, or just index) moves the actor to the beginning of cast list. However I've observed several times where changing the index value to -1, 1, or 2 when creating or just updating the index value for an existing actor will cause them to move forward or backward in the listings. This has been somewhat random.

blacktwin avatar Jun 19 '20 13:06 blacktwin