Search the Community
Showing results for tags 'python'.
-
Good evening all, I am extremely happy to present to you - Emby Scripter-X version 3.0 (up on the catalog now!) The major change in this version is -- Packages -- ! This gives you the opportunity to develop packages for Scripter X for others to install and use. And very soon, there will be a Packages catalog available that you'll be able to search for, and install community packages, straight from your Emby Administration Console. A package is written in Javascript. A Package requires 3 things - 1) a PackageInfo.json file, 2) a Package.js file, and 3) both these files zipped up together in a .ZIP file. PackageInfo.json provides vital information about your package to ScripterX. It's format is as follows :- { "Id": "scripterx.package.example", "Name": "Example Package", "Description": "An example package for the ScripterX package system.", "Author": "Anthony Musgrove", "Email": "anthony@emby-scripterx.info" } Package.js is the javascript file for your package - where all your code exists. This is the fun bit. Some important things to know about your script: - When your package is initialised by ScripterX (on installation, and on server startup), a function in your Package.js is executed. It is called _package_init(): function _package_init() { //do something here on package startup } - Your script can subscribe to ANY of the ScripterX events, by adding a function with the name _EventName, for example, if you wish to subscribe your package to the onAuthenticationFailed event, you'd simply enter: function _onAuthenticationFailed(context) { //do something here when someone fails to authenticate to emby. } *** Note, the parameter for these functions is context, which is the context of the event call. It contains all the information regarding token values, etc, that you have full access to. For example, to get the username of the attempted failed authentication, you could use :- function _onAuthenticationFailed(context) { var attempted_username = context.Token("%username%").value; } - Same goes for any of the other events, events being: onAuthenticationFailed, onAuthenticationSuccess, onLibraryScanComplete, onMediaItemAdded, onMediaItemRemoved, onMediaItemUpdated, onPlaybackStart, onPlaybackStopped, onScheduledTask, onSessionEnded, onSessionStarted, onCameraImageUploaded, onLiveTVRecordingStart, onLiveTVRecordingEnded, onScheduledTaskStart, onScheduledTaskEnded, onMediaItemAddedComplete, onPlaybackProgress - To log output from your package to the Emby server log, you can utilise the ScripterX.Log functions, they are :- ScripterX.Log.Info("Add an Info log entry to emby server log."); ScripterX.Log.Error("Add an Error log entry to emby server log."); - If you need timers, ScripterX has timers. You can simply create, delete, start, restart or stop a timer by using the following Timers commands : Create a timer that only elapses once, but can be restarted manually after its elapsed, by using .createOnce: ScripterX.Timers.createOnce("myTimer", 5000, "tmrMyTimer_Elapsed", null); or, create a timer that elapses every interval, without having to be restarted, by using .createRepeating: ScripterX.Timers.createRepeating("myRepeatingTimer", 10000, "tmrMyRepeatingTimer_Elapsed", null); - When your timer elapses, it will call the function set in as your callback. For example, when my timer elapses, it will call the following function: function tmrMyTimer_Elapsed(timer_name, timer_interval, objects) { //do something here when my timer elapses, the timer's name is given here too. //timer name is needed to start, stop, restart, delete etc. } - ScripterX supports webhook posts right from your javascript, you can perform a webhook post by using the ScripterX.Web functions, for example, in my _onPlaybackStart function, I want to post to a webhook every time someone starts playing a movie or TV show on my server, I can do this by: function _onPlaybackStart(context) { /* Send a webhook when (someone) plays (something) */ var api_url = "https://myapi.url.com"; var playback_info = {}; playback_info.itemId = context.Token("%item.id%").value; playback_info.itemName = context.Token("%item.name%").value; playback_info.userName = context.Token("%username%").value; playback_info.deviceName = context.Token("%device.name%").value; playback_info.serverName = context.Token("%server.name%").value; playback_info.memo = playback_info.userName + " is playing " + playback_info.itemName + " on device " + playback_info.deviceName + " from server " + playback_info.serverName; ScripterX.Web.Post(api_url, JSON.stringify(playback_info)); } - Once you've created your Package zip file for distribution, you can install it on your Emby server by using the Emby Scripter-X package installer interface, as shown below: - While you're testing your package, you don't have to keep uninstalling and reinstalling your package to test and debug. Simply install your package ONCE, then navigate to your Emby data directory, find ScripterX, then find Packages, then find the folder labelled with your package's assigned installationId. Inside this directory, you'll notice Package.js. Make changes directly to this file, then go back into your Emby administration panel and click the 'Reload' icon next to your package listed in your 'Installed Packages' panel. The reload icon is next to the uninstall/delete icon. If you wish to uninstall a package, simply click the trashbin, then confirm by clicking 'Really Uninstall?' There is MUCH, MUCH more to come, but for now this will get people going. There are other function groups that I am going to implement including Library searching and Item manipulation, User manipulation and searching, among many, many other functionality. Please enjoy, and as always, any comments, feedback, suggestions are MUCH MUCH appreciated. Emby ScripterX (github: https://github.com/AnthonyMusgrove/Emby-ScripterX) Project/Product Website: https://www.emby-scripterx.info/ Version v2.3.4 now up on the Emby Plugin Catalog & GitHub with changes. Events supported: On Authentication Failed, On Authentication Success, On Playback Start, On Playback Stopped, On Session Started, On Session Ended, On Media Item Added, On Media Item Updated, On Media Item Removed, on Scripter-X Scheduled Task, on Library Scan Completed, On Camera Image Uploaded, on Live TV Recording Start, on Live TV Recording Ended, onScheduledTaskStart, onScheduledTaskEnded, onPlaybackProgress, onMediaItemAddedComplete For tokens available, please see GitHub readme, or check out the Actions interface in the plugin - you can find the plugin in the Emby Server Catalog, under 'General'. ChangeLog Changes for 2.3.4: Major core rewrite Added conditions (drag and drop) Rewrote token parser and added contexts Added event onPlaybackProgress (which supports transcoding detection) Added event onMediaItemAddedComplete which is called virtually, after an onMediaItemAdded + Meta Data (or timeout of 40 seconds, whichever comes first) Added IP address tokens for Authentication events Various other modifications and changes Changes for 2.3.1: %item.library.name%, %item.library.type% issue resolved Added confirmation on delete for actions (theme friendly) Remove 'Global Tokens' section in Actions interface (they're listed now for each event) Changes for 2.3.0: Variables are now case-insensitive, refactoring a lot of the interface code (Prototype-to-production), cleaning interface, addressed various GitHub issues. Changes for 2.2.9: Progressively from v2.2.6, functionality to enable or disable events individually, many more tokens (please see GitHub tokens list or the Actions interface), global tokens (server version, uptime, etc), more item tokens (for example, season number, episode number, item meta (imdb id, tmdb id, whatever you wish), season meta, series meta, plus plenty more! Changes for 2.2.5: Aesthetics on Actions Interface (enlarged textboxes for script and interpreter, better alignment of add buttons) Changes for 2.2.4: Progessively from v2.2.0 to v2.2.4, integration with a sortable library, actions user interface customisation and remembering custom order within browser local storage. Changes for 2.2.0: Now theme friendly and compatible, changes with theme selection correctly. Changes for 2.1.9: Redesign Events/Actions interface for less clutter Please ignore the 'Advanced' tab, It won't be there in the next catalog release, its just used for debug at this stage. Changes for 2.1.7, 2.1.6, 2.1.5, 2.1.4: Progressive changes to implement Live TV Recording Events. 'Emby Scripter-X DVR Manager' was implemented in the codebase to handle all Live TV events, tokens and logging. Changes for 2.1.3: Addressed bug with %item.library.*% tokens with respect to onItemRemoved event. (see https://github.com/AnthonyMusgrove/Emby-ScripterX/issues/2 for info!) Changes for 2.1.2: Added new event - onCameraImageUploaded. This event is triggered when a user uploads an image to the Emby Server via the 'Camera Upload' functionality within the various Emby Apps. Tokens supported are as above. Below is an image of the event on the Actions page, along with an image of a sample batch script and output: Changes for 2.1.1: Actions now utilises the entire available interface space; so editing and viewing are much easier. Some input validation added for Interpreter and Script Some cosmetic modifications :- on adding new action, delete/trash button is now changed to 'X' so it indicates 'remove this unsaved action'. Once a new action is saved, the 'X' icon will change to a 'trash/delete' icon, signifying 'delete this action from the server'. Changes for 2.1.0: Bug fix for " in script name, parameters, interpreter. various other bugs, interface bug fixes very stable at this stage. Changes for 2.0.0: Redesign Interfaces, add Actions interface, Community interface (as tabs) Redesign core Allow multiple script actions for each event Changes for 1.0.0.8 - Various updates/changes: Addressed issues with having to supply entire path to interpreter. Implemented better way to detect OS platform (IsWindows() IsLinux() IsOSX()) Powershell.exe, cmd.exe, /bin/bash or a custom executable is now supported Examples now: using powershell.exe as interpreter: -File "D:\embyscripts\ScripterX-test.ps1" -Name %item.name% -ID %item.id% -Type %item.type% -LibName %item.library.name% using cmd.exe as interpreter: /s /c D:\embyscripts\test.bat AuthFail %username% %user.id% %device.id% %device.name% using /bin/bash /home/medius/scripts/test.sh AuthOK %username% Changes for 1.0.0.7: on Library Scan Completed : D:\embyscripts\test.bat Library Scan Complete! Library Scan Complete! Changes for 1.0.0.6: %item.update.reason% : Media Item Updated "1917" "D:\Media\Movies\1917.2019.1080p.BluRay.x264.AAC5.1-[YTS.MX] - Copy.mp4" (Update Reason: MetadataEdit) D:\embyscripts\test.bat Media Item Updated "%item.name%" "%item.path%" (Update Reason: %item.update.reason%) 1.0.0.5 additions: %series.id%, %series.name%, %season.id%, %season.name% : PlaybackStart ItemID: 593 - Name: "Brian: Portrait of a Dog" - Path: "D:\Media\TV\Family Guy\S01\S01E07 - Brian - Portrait Of A Dog.avi" - Username: Anthony - DeviceName: Firefox - ItemType: item type: Episode - LibraryName: TV - LibraryContentType: tvshows (seriesname: Family Guy) (season: Season 1) D:\embyscripts\test.bat PlaybackStart ItemID: %item.id% - Name: "%item.name%" - Path: "%item.path%" - Username: %username% - DeviceName: %device.name% - ItemType: item type: %item.type% - LibraryName: %item.library.name% - LibraryContentType: %item.library.type% (seriesname: %series.name%) (season: %season.name%) README is on Github. Comments/Feedback/Suggestions are GREATLY appreciated. On Scheduled Task: A field now exists to specify a script to run as a scheduled task - you'll now see under 'Scheduled Tasks -> Application' an Emby ScripterX Scheduled Task. No tokens are yet available to this field - need feedback/suggestions/comments on what should be available to specify as parameters/tokens.
- 740 replies
-
- 16
-
I have followed the instructions layed out here: https://dev.emby.media/home/sdk/apiclients/Python/README.html I have also tried the pre-packed pip version: https://pypi.org/project/embyclient/ I cant seem to get either of these to work. while i know embyclient is not supported here, i suspect given the automated nature the issue lays in the parent sdk library from embyclient.EmbyClient.Python.activity_log_service_api import ActivityLogServiceApi ModuleNotFoundError: No module named 'embyclient.EmbyClient' I actually cant even get the SDK version to import because of the hyphen in its name Python 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import embyclient-python File "<stdin>", line 1 import embyclient-python During packaging there were a couple of deprecated warnings but it seemed to complete and generate the folders fine PS C:\Users\king\Downloads\Emby.SDK-master\SampleCode\RestApi\Clients\Python> python setup.py install --user running install C:\Users\king\AppData\Local\Programs\Python\Python311\Lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. warnings.warn( C:\Users\king\AppData\Local\Programs\Python\Python311\Lib\site-packages\setuptools\command\easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools. warnings.warn( running bdist_egg running egg_info creating embyclient_python.egg-info I was wondering if the pre-packaged perhaps was not working because of the below (Essentially EmbyClient.Python can resolve to two different paths) The embyclient (again by 3rd party) does not even have the EmbyClient folder. I dont think something is working as it should.
- 9 replies
-
- python
- embyclient
-
(and 1 more)
Tagged with:
-
Tool to automatically re-order how the cast & crew are displayed
Nillows posted a topic in Tools and Utilities
Hey everyone, I put this tool together last night to fix a small and trivial inconvenience that sometimes arises within the default .nfo files that Emby generates. It's available now and there's a download link at the bottom of my post. Simply run the program and paste the path to your content library to have this tool analyze each and every .nfo file sequentially. Works for both tv shows and movies, and also allows full or partial reordering. Having Python installed on your machine is the only prerequisite. EXAMPLE SCENARIO Below is an example of the tool fixing my .nfo for Alien with Sigourney Weaver starring. However, for some reason, Tom Skerritt was showing as the first actor in my Emby display, when the movie CLEARLY stars Sigourney Weaver, who is unjustly showing as actor 2 (see below). Processing file: /var/lib/emby/media/movies/HDD1/movies/Alien Film Franchise [Directors Cut-Special Edition-Unrated] 1979-2012/Alien Directors Cut - Sci-Fi 1979 Eng Subs 720p [H264-mp4].nfo Current order of actors in /var/lib/emby/media/movies/HDD1/movies/Alien Film Franchise [Directors Cut-Special Edition-Unrated] 1979-2012/Alien Directors Cut - Sci-Fi 1979 Eng Subs 720p [H264-mp4].nfo: 1: Tom Skerritt as Dallas 2: Sigourney Weaver as Ripley 3: Veronica Cartwright as Lambert 4: Harry Dean Stanton as Brett 5: John Hurt as Kane 6: Ian Holm as Ash 7: Yaphet Kotto as Parker 8: Bolaji Badejo as Alien 9: Helen Horton as Mother (voice) Enter the new order of actors by numbers separated by spaces (e.g., '5 6 4 8 2' or just '5 6 4' to partially re-order), or press Enter to skip this file: 2 1 New order of actors: 1: Sigourney Weaver as Ripley 2: Tom Skerritt as Dallas 3: Veronica Cartwright as Lambert 4: Harry Dean Stanton as Brett 5: John Hurt as Kane 6: Ian Holm as Ash 7: Yaphet Kotto as Parker 8: Bolaji Badejo as Alien 9: Helen Horton as Mother (voice) As you can see from the output above, the user simply has to type the desired order of the actors using the original list as an identifier. In the above example case, typing 2 1 means actor #2 first, actor #1 second, then leave the order of the rest of the cast and crew alone. I could have reorganized the cast and crew in any arbitrary order or depth though, like 2 1 5 3 4 6 7 and it would rearrange the actors to a further depth. The tool also automatically locks the .nfo file if you do decide to reorganize the actors to prevent Emby from overwriting the changes. It does not lock the .nfo file if the user skips over it. It's available for download here on my GitHub. If anyone has any issues using the tool or any feedback for additional features to enhance the ease of use and user experience then please let me know!- 4 replies
-
- cast and crew
- cast
-
(and 9 more)
Tagged with:
-
Hello, I'm currently trying to get the list of servers from a users account. Wiki The authentication part is working successfully and I get the required user_id and access_token, but the following get request just doesn't reply anything. header = { "X-Application": "blah/1", "X-Connect-UserToken": access_token } response = requests.get("https://connect.emby.media/service/servers?userId={}".format(user_id), headers=header) print(response.status_code) print(response.text) >> 200 >> [] I tried switching user_id and access_token and other stuff as well, but I'm pretty sure everything is fine on my side. Please, help. What am I missing?
-
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
-
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
-
Looking for help running python/bash scripts on QNAP (maybe the same process on other Linux based NAS's) I have Emby running pretty much perfectly on my NAS, but my IPTV provider, provides VOD (in M3U file) which I want converted to STRM within their own library. I have seen several python/bash scripts for doing this, by my knowledge is this area is non existent. Just looking for information on the following: Where to put the script How to run the script How to run the script at preset times How to run at startup of NAS Many thanks for any help you can give me
-
Python script for automating Youtube-DL to a TV library
mrb002 posted a topic in Tools and Utilities
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- 7 replies
-
- 1
-
- python
- youtube-dl
-
(and 1 more)
Tagged with:
-
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!
-
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': '1.0.0.0', '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.
-
I've started having a problem with my Emby 3.2.26.0 - I can't say 100% it started in 3.2.26.0 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 "http://10.1.1.1:8096/emby/Sessions/Capabilities/Full" {"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?
-
Python script & Application for updating the server as a service
L.Fino posted a topic in General/Windows
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 -
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?