Jump to content

Search the Community

Showing results for tags 'python'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • General
    • Announcements
    • Emby Premiere Purchase/Subscription Support
    • Feature Requests
    • Tutorials and Guides
  • Emby Server
    • General/Windows
    • Android Server
    • Asustor
    • FreeBSD
    • Linux
    • NetGear ReadyNAS
    • MacOS
    • QNAP
    • Synology
    • TerraMaster NAS
    • Thecus
    • Western Digital
    • DLNA
    • Live TV
  • Emby Apps
    • Amazon Alexa
    • Android Mobile
    • Android TV / Fire TV
    • Emby Theater
    • iOS
    • Apple TV
    • Kodi
    • Raspberry Pi
    • Roku
    • Samsung Smart TV
    • Sony PlayStation
    • LG Smart TV
    • Web App
    • Windows Media Center
    • Plugins
  • Language-specific support
    • Arabic
    • Dutch
    • French
    • German
    • Italian
    • Portuguese
    • Russian
    • Spanish
    • Swedish
  • Community Contributions
    • Ember for Emby
    • Fan Art & Videos
    • Tools and Utilities
    • Web App CSS
  • Other
    • General Discussion
    • Developer API
    • Hardware
    • Media Clubs
    • Legacy Support


  • Emby Blog

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...

Found 8 results

  1. hello all, i just started learning python and wrote a script that (using youtbe-dl) takes a list of youtube channels/playlists and downloads the vids, renames them to emby's tv library naming standards, moves them into your emby library. once emby has generated NFO files for them, the script will also insert the aired date and year for each episode based on the date the video was uploaded. as i'm not great at python, i was wondering if some folks who are that might be interested in using this script would mind taking it and playing with it. i feel like with some tweaking, it could be of more use to the broader emby community. just post here or PM me and i'll send you the script with the instructions on how to use. i dont want to post it publicly yet incase theres some huge bug. don't want to ruin anyones library 🙂 EDIT: sorry for the long delay, life got crazy. attached is the script and instructions. ytd_20200724_public.zip
  2. SuperMinecraftKid

    Bulk New Users Python Script

    Hello everyone! I used to have a python script that would add accounts with selenium. It worked well enough, but that was broken by an emby update. Current events have given me lots of free time and I'm kinda bored, so I decided to rewrite my script using python requests and the emby api. This script takes input from a text file in the format <server username>, <emby connect username> <server username>, <emby connect username> <server username>, <emby connect username> and creates users on an emby server with the username <server username> and attempts to link it to <emby connect username>. The script also configures a bunch of settings for the new user. A list of settings that are configured by the script and more details can be found in the readme in the github repo. Here it is: https://github.com/stummyhurt/auto-emby-accounts I'd love to hear any thoughts!
  3. xsteadfastx

    Emby plugin for mopidy

    hi, for over a year im a user of emby and i love it alot. a long time ago i used MPD for playing music on my linux box. it worked well and some time later i found out about mopidy. its a music server written in python. its like mpd but much more extensible. it has a lot of plugins like one for youtube, soundcloud or even spotify. i wanted a way to play songs from emby on my little mopidy server running on a raspberry pi in the kitchen. I started to code on Mopidy-Emby. I fought myself through some basics of the emby api. there is alot to come. right now i need to find out how to seek through a activate stream. the "/Sessions/<ID>/Playing/seek" doesnt work for me at all... but i give my best. maybe someone find this usefull. you can install it through pip with pip install mopidy-emby https://github.com/xsteadfastx/mopidy-emby
  4. Hi, Put this together for my own use - its a bit rough around the edges but figured i'd throw it out here should anyone want to give it a whirl! Docker Hub: https://hub.docker.com/r/matty87a/telemby GitHub: https://github.com/matty87a/telemby
  5. I wanted to populate my library with a local trailer for each film. I was also interested in learning a bit of Python. So this resulted in the script below, if you want to run it you'll need to install Requests and PyTube (can be done using PIP): import sys import requests import urllib import json import ConfigParser import glob import os from pytube import YouTube config = ConfigParser.RawConfigParser() config.read('trailers.ini') embyapi = "" embykey = "" embyusr = "" h = 0 i = 0 j = 0 k = 0 if config.has_option('emby', 'api'): embyapi = config.get('emby', 'api') else: embyerror = "No Emby URL in Config File.\n" if config.has_option('emby', 'key'): embykey = config.get('emby', 'key') else: embyerror += "No Emby API Key in Config File.\n" if config.has_option('emby', 'usr'): embyusr = config.get('emby', 'usr') else: embyerror += "No Emby User ID in Config File." if config.has_option('emby', 'dirfrom'): embydirf = config.get('emby', 'dirfrom') else: embydirf = "" if config.has_option('emby', 'dirto'): embydirt = config.get('emby', 'dirto') else: embydirt = "" if len(embyapi) == 0 or len(embykey) == 0 or len(embyusr) == 0: print(embyerror) sys.exit() if embyapi[-1] != "/": embyapi += "/" url = embyapi + "Users/%s/Items?IncludeItemTypes=Movie&Recursive=true&StartIndex=0&format=json&fields=RemoteTrailers,Path" % (embyusr) headers = { 'content-type': 'application/json', 'Authorization': 'MediaBrowser', 'UserId': embyusr, 'Client': 'EmbyTrailers', 'Device': 'Python Script', 'DeviceId': 'xxx', 'Version': '', 'X-MediaBrowser-Token': embykey, } emby = requests.get(url, headers = headers) films = json.loads(emby.content) if not 'Name' in films['Items'][0]: print print("No Films Found") else: for film in films['Items']: if film['LocalTrailerCount'] == 0: h += 1 fulpath = film['Path'].encode("utf-8") if embydirf != "" and embydirt != "": fulpath = fulpath.replace(embydirf, embydirt, 1) fulpath = os.path.normpath(fulpath.replace('\\', os.sep)) basefil = os.path.basename(fulpath) basedir = os.path.dirname(fulpath) trail = os.path.splitext(basefil)[0] if trail[-3:-1] == "CD": trail = trail[:-4] if basedir[-1] != os.sep: basedir += os.sep if len(glob.glob(r"%s%s%s" % (basedir, trail, "-trailer*"))) == 0: download = True i += 1 for trailer in film['RemoteTrailers']: if download: try: yt = YouTube(trailer['Url'].encode("utf-8")) yt.set_filename(trail + "-trailer") video = yt.filter('mp4')[-1] video.download(basedir) except Exception, e: print(trail + " - " + trailer['Url'].encode("utf-8") + " - " + str(e)) if len(glob.glob(r"%s%s%s" % (basedir, trail, "-trailer*"))) > 0: download = False j += 1 if download: k += 1 print("Emby thinks %s Films are Missing Trailers" % (h)) print("%s Films Actually Missing Trailers" % (i)) print("Downloaded %s Trailers" % (j)) print("Unable to Download %s Trailers" % (k)) It reads a trailer.ini file: [emby] api = https://localhost/emby/ key = 00000000000000000000000000000000 usr = 11111111111111111111111111111111 dirfrom = \\Server dirto = /mnt which contains the Emby URL, Emby Username, Emby Api Key and two keys to convert the file paths (Emby reports the file location as \\Server\Movie\Movie.avi, but when I want to run the script on the local machine I want to look at /mnt/Movie/Movie.avi) Two assumptions the script makes is that the trailers are stored as <Movie Name>-trailer.mp4 and that files that have been split over multiple discs will be <Movie Name> CD1.avi, <Movie Name> CD2.avi etc I've run the script locally on my FreeBSD server and remotely from a Windows Machine (In this instance I removed the dirfrom and dirto values) and seems to work on both. Thought this might be useful to others or for someone wanting to work with Emby in Python.
  6. stuartma

    Unable to register with API sync

    I've started having a problem with my Emby - I can't say 100% it started in but that the version I have installed when when I first noticed I can no longer get my python sync script (source is available on GitHub) to register with Emby as a sync destination. I don't get any error messages, but when I try and use the WebUI to sync any media I just get told I have no sync providers installed and am directed to install FolderSync. I'm posting the following JSON to "" {"PlayableMediaTypes":["Audio","Video"],"SupportsPersistentIdentifier":true,"SupportsMediaControl":false,"SupportsOfflineAccess":true,"SupportsSync":true,"SupportsContentUploading":false,"DeviceProfile":{"MaxStreamingBitrate":176551724,"MaxStaticBitrate":100000000,"MusicStreamingTranscodingBitrate":192000,"DirectPlayProfiles":[{"Container":"mp4,m4v","Type":"Video","VideoCodec":"h264","AudioCodec":"mp3,aac"},{"Container":"mkv","Type":"Video","VideoCodec":"h264","AudioCodec":"mp3,aac"},{"Container":"mov","Type":"Video","VideoCodec":"h264","AudioCodec":"mp3,aac"},{"Container":"opus","Type":"Audio"},{"Container":"mp3","Type":"Audio"},{"Container":"aac","Type":"Audio"},{"Container":"m4a","AudioCodec":"aac","Type":"Audio"},{"Container":"webma,webm","Type":"Audio"},{"Container":"wav","Type":"Audio"},{"Container":"webm","Type":"Video"},{"Container":"m4v,3gp,ts,mpegts,mov,xvid,vob,mkv,wmv,asf,ogm,ogv,m2v,avi,mpg,mpeg,mp4,webm,wtv","Type":"Video","AudioCodec":"aac,aac_latm,mp2,mp3,ac3,wma,dca,dts,pcm,PCM_S16LE,PCM_S24LE,opus,flac"},{"Container":"aac,mp3,mpa,wav,wma,mp2,ogg,oga,webma,ape,opus,flac,m4a","Type":"Audio"}],"TranscodingProfiles":[{"Container":"opus","Type":"Audio","AudioCodec":"opus","Context":"Streaming","Protocol":"http","MaxAudioChannels":"2"},{"Container":"opus","Type":"Audio","AudioCodec":"opus","Context":"Static","Protocol":"http","MaxAudioChannels":"2"},{"Container":"mp3","Type":"Audio","AudioCodec":"mp3","Context":"Streaming","Protocol":"http","MaxAudioChannels":"2"},{"Container":"mp3","Type":"Audio","AudioCodec":"mp3","Context":"Static","Protocol":"http","MaxAudioChannels":"2"},{"Container":"aac","Type":"Audio","AudioCodec":"aac","Context":"Streaming","Protocol":"http","MaxAudioChannels":"2"},{"Container":"aac","Type":"Audio","AudioCodec":"aac","Context":"Static","Protocol":"http","MaxAudioChannels":"2"},{"Container":"wav","Type":"Audio","AudioCodec":"wav","Context":"Streaming","Protocol":"http","MaxAudioChannels":"2"},{"Container":"wav","Type":"Audio","AudioCodec":"wav","Context":"Static","Protocol":"http","MaxAudioChannels":"2"},{"Container":"mkv","Type":"Video","AudioCodec":"mp3,aac,ac3","VideoCodec":"h264","Context":"Streaming","MaxAudioChannels":"2","CopyTimestamps":false},{"Container":"ts","Type":"Video","AudioCodec":"aac,mp3,ac3","VideoCodec":"h264","Context":"Streaming","Protocol":"hls","MaxAudioChannels":"2","EnableSplittingOnNonKeyFrames":false},{"Container":"webm","Type":"Video","AudioCodec":"vorbis","VideoCodec":"vpx","Context":"Streaming","Protocol":"http","MaxAudioChannels":"2"},{"Container":"mp4","Type":"Video","AudioCodec":"mp3,aac,ac3","VideoCodec":"h264","Context":"Streaming","Protocol":"http","MaxAudioChannels":"2"},{"Container":"mp4","Type":"Video","AudioCodec":"mp3,aac,ac3","VideoCodec":"h264","Context":"Static","Protocol":"http"}],"ContainerProfiles":[],"CodecProfiles":[{"Type":"Video","Container":"avi","Conditions":[{"Condition":"NotEqual","Property":"CodecTag","Value":"xvid"}]},{"Type":"Video","Codec":"h264","Conditions":[{"Condition":"EqualsAny","Property":"VideoProfile","Value":"high|main|baseline|constrained baseline"},{"Condition":"LessThanEqual","Property":"VideoLevel","Value":"41"}]},{"Type":"Audio","Conditions":[{"Condition":"LessThanEqual","Property":"AudioChannels","Value":"2"}]}],"SubtitleProfiles":[{"Format":"srt","Method":"External"},{"Format":"ssa","Method":"External"},{"Format":"ass","Method":"External"},{"Format":"srt","Method":"Embed"},{"Format":"subrip","Method":"Embed"},{"Format":"ass","Method":"Embed"},{"Format":"ssa","Method":"Embed"},{"Format":"dvb_teletext","Method":"Embed"},{"Format":"dvb_subtitle","Method":"Embed"},{"Format":"dvbsub","Method":"Embed"},{"Format":"pgs","Method":"Embed"},{"Format":"pgssub","Method":"Embed"},{"Format":"dvdsub","Method":"Embed"},{"Format":"vtt","Method":"Embed"},{"Format":"sub","Method":"Embed"},{"Format":"idx","Method":"Embed"},{"Format":"smi","Method":"Embed"}],"ResponseProfiles":[{"Type":"Video","Container":"m4v","MimeType":"video/mp4"},{"Type":"Video","Container":"mov","MimeType":"video/webm"}],"MaxStaticMusicBitrate":null}} Has there been any changes to the way syncing works in the Emby Web UI, or have I done something wrong?
  7. Hii all Because the update process for the emby server (while it's running as a service) can be a bit annoying, so i made an application with a python script. It works no matter where it's located. You just have to unzip the *.zip file in the attachement. After that, in the unzipped folder run the "emby_update_v2.exe" as administrator. The application can be used with diffrent commandline arguments: /beta - Start normal with updating beta server, while its running as a service /dev - Start normal with updating dev server, while its running as a service /download - Start with downloading the regular version first /beta_download - Start with downloading the beta version first /dev_download - Start with downloading the dev version first /taskkill - Start with killing the process instead of stopping the service /debug - Start into the Debug Mode for debugging the functions. >> without an argument - start normal with updating the regular server, while its running as a service PLEASE NOTE: - The application normaly starts with the ability to stop the service at very first - If you know the service IS NOT running, start the application with one of the three 'download' arguments - If you have the Beta server service running, simply add the /beta argument in the commandline - If you have the Dev server service running, simply add the /dev argument in the commandline - If you have any kind of trouble, start the application with the /debug argument to try and/or debug functions Updater.zip
  8. I'm wondering if anybody has made their own simple script to go through (recursively) sub-directories and remove x in filnames with y. I've looked online (python) and found some pretty long winded solutions, but I feel like this could be done simply in a nested for loop with only 1 or 2 modules. for filename in dir: if filename contains ['list', 'of', 'items', 'easily', 'enumerated'] newname = filename.replace(x,y) os.rename(filename,newname) That is non recursive, but has been working for regular txt files for me, but not folders. Any suggestions?
  • Create New...