All Activity
- Past hour
-
MikeMcCall05 joined the community
-
009081 joined the community
-
Valery ramirez joined the community
-
Juancar7 joined the community
-
Giliard Oliveira joined the community
-
Fstuff joined the community
-
Lele1408 joined the community
-
pablis joined the community
-
DimmittScheib joined the community
- Today
-
media deletions are not logged in admin Dashboard > Activity
justinrh replied to justinrh's topic in General/Windows
@Lukeanother oddity with multi-version, in the web app I poke the Delete button and it shows a specific version but not the one that is set to play, so there is no way to delete a specific one though you can delete only one. -
You can search for missing episodes on a per-show and/or per-season basis. You can also lend your support here:
-
Interactive Duplicate Actor/Person Merger
Abobader replied to noobilly's topic in Tools and Utilities
Hello noobilly, ** This is an auto reply ** Please wait for someone from staff support or our members to reply to you. It's recommended to provide more info, as it explain in this thread: Thank you. Emby Team -
noobilly started following Interactive Duplicate Actor/Person Merger
-
Hi everyone, Like many of you, I have run into the issue where Emby creates duplicate actor or director profiles (usually due to different metadata providers or slight spelling variations). Merging these manually through the web interface is pretty tedious, especially if an actor has multiple duplicate IDs. To fix this, I asked Google Gemini to help me build a Windows tool for merging duplicate Actor/Person profiles automatically. I have compiled it into an easy-to-use .exe file. How to use it: 1. Set up your config file Before running the tool, you need to add your server details. Open the config.json file and fill in your information exactly like this (make sure to include http://): { "EMBY_URL": "http://192.168.30.248:8096", "API_KEY": "abcdefghijklmnopqrstuvwxyz1234567" } 2. Run the tool Double-click emby_actor_merge_manually.exe. Input the name of the duplicate actor or director you want to fix and press Enter. The tool will search your server and list all profiles matching that name. Type the ID of the one you want to keep and press Enter. Press Enter one last time to confirm the merge. 3. Cleanup Once the tool finishes moving everything over to the main profile, just go to your Emby Scheduled Tasks and run a Scan Media Library. Emby will automatically delete the leftover empty ghost profiles. Source Code Lastly, here is the source code of the .exe file written in Python, in case anyone prefers to run it manually as a script. Hopefully, Emby developer will implement a similar built-in function for users to do this easily as an Admin in the future import requests import urllib.parse import json import os import sys # ========================================== # CONFIGURATION LOADER # ========================================== CONFIG_FILE = "config.json" def load_config(): if not os.path.exists(CONFIG_FILE): default_config = { "EMBY_URL": "http://YOUR_SERVER_IP:8096", "API_KEY": "YOUR_API_KEY_HERE" } with open(CONFIG_FILE, 'w') as f: json.dump(default_config, f, indent=4) print(f"[{CONFIG_FILE} not found!]") print(f"I just created a blank '{CONFIG_FILE}' in this folder.") print("Please open it, paste your Emby URL and API Key, save it, and run this script again.") sys.exit() with open(CONFIG_FILE, 'r') as f: try: config = json.load(f) return config.get("EMBY_URL", "").strip('/'), config.get("API_KEY", "") except json.JSONDecodeError: print(f"Error: {CONFIG_FILE} is not formatted properly.") sys.exit() EMBY_URL, API_KEY = load_config() if not EMBY_URL or not API_KEY or "YOUR_API_KEY_HERE" in API_KEY: print(f"Error: Please add your actual Emby URL and API Key to {CONFIG_FILE}.") sys.exit() # ========================================== headers = { "X-Emby-Token": API_KEY, "Content-Type": "application/json", "Accept": "application/json" } def main(): search_name = input("Enter the name of the actor/director to search for: ").strip() if not search_name: print("Name cannot be empty. Exiting...") return print("\nAuthenticating and locating Admin User ID...") res_users = requests.get(f"{EMBY_URL}/emby/Users", headers=headers) if res_users.status_code != 200: print(f"Error fetching users. Status: {res_users.status_code}") return users = res_users.json() admin_id = None for u in users: if u.get("Policy", {}).get("IsAdministrator"): admin_id = u["Id"] break if not admin_id: print("Could not find an Admin user. Falling back to the first user.") admin_id = users[0]["Id"] print(f" -> Success! Using Admin ID: {admin_id}") print(f"\nSearching for profiles matching '{search_name}'...") safe_search_name = urllib.parse.quote(search_name) search_url = f"{EMBY_URL}/emby/Users/{admin_id}/Items?SearchTerm={safe_search_name}&IncludeItemTypes=Person&Recursive=true" res_search = requests.get(search_url, headers=headers) if res_search.status_code != 200: print(f"Error searching for actor. Status: {res_search.status_code}") return items = res_search.json().get("Items", []) if not items: print(f"No profiles found matching '{search_name}'. Exiting...") return found_profiles = {} for item in items: person_id = item.get("Id") if person_id: found_profiles[person_id] = item.get("Name", "Unknown") if len(found_profiles) == 1: print(f"\nOnly 1 profile found for '{search_name}'. No duplicates exist! Exiting...") return print(f"\nFound {len(found_profiles)} matching profiles:\n") print("=======================================================") for pid, pname in found_profiles.items(): print(f" ID: {pid} | Name: {pname}") print("=======================================================\n") keep_id = input("Enter the ID of the profile you want to KEEP: ").strip() if keep_id not in found_profiles: print(f"Error: '{keep_id}' is not in the list of found profiles. Exiting...") return keep_name = found_profiles[keep_id] duplicates_to_merge = [pid for pid in found_profiles.keys() if pid != keep_id] print(f"\n[Settings Locked]") print(f" -> KEEPING: {keep_name} ({keep_id})") print(f" -> MERGING: {len(duplicates_to_merge)} duplicate(s) into the kept profile.") confirm = input("Press ENTER to begin the merge, or type 'Q' to quit: ") if confirm.strip().lower() == 'q': print("Canceled. Exiting...") return for duplicate_id in duplicates_to_merge: duplicate_name = found_profiles[duplicate_id] print(f"\n=======================================================") print(f" Hunting down media for: {duplicate_name} (ID: {duplicate_id})") print(f"=======================================================") dup_search_url = f"{EMBY_URL}/emby/Users/{admin_id}/Items?PersonIds={duplicate_id}&Recursive=true&Fields=People" res_dup = requests.get(dup_search_url, headers=headers) if res_dup.status_code != 200: print(f"Error fetching items for {duplicate_id}. Status: {res_dup.status_code}") continue dup_items = res_dup.json().get("Items", []) print(f"Found {len(dup_items)} items containing this duplicate.") if not dup_items: print("No merging needed. This duplicate has no attached media.") continue for item in dup_items: item_id = item["Id"] item_name = item.get("Name", "Unknown") print(f"\nProcessing: {item_name} (ID: {item_id})") item_get_url = f"{EMBY_URL}/emby/Users/{admin_id}/Items/{item_id}" res_item = requests.get(item_get_url, headers=headers) if res_item.status_code != 200: print(f" -> Failed to fetch full metadata. Error {res_item.status_code}") continue full_item = res_item.json() people = full_item.get("People", []) keep_exists = any(str(p.get("Id")) == str(keep_id) for p in people) new_people = [] changed = False for p in people: if str(p.get("Id")) == str(duplicate_id): if keep_exists: print(f" -> Dropping duplicate (Main person already exists here).") changed = True continue else: print(f" -> Replacing duplicate with '{keep_name}'...") p["Id"] = keep_id p["Name"] = keep_name changed = True new_people.append(p) if changed: full_item["People"] = new_people update_url = f"{EMBY_URL}/emby/Items/{item_id}" update_res = requests.post(update_url, headers=headers, json=full_item) if update_res.status_code in [200, 204]: print(f" -> Successfully updated metadata!") else: print(f" -> Failed to update. Error {update_res.status_code}") else: print(" -> No changes needed.") print("\nMerge complete! Run 'Scan Media Library' in Emby to wipe the leftover duplicate profiles.") if __name__ == "__main__": main() emby_actor_merge_manually.exe config.json
-
I am using a pc usually when i look at this in metadata manager. It doesn’t not work at all on ios half the screen is blocked off. I would like a way to collapse show that has tons of missing episodes if possible or hide them somehow so i don’t have to scroll through them all each time.
-
d00zah started following Emby LiveTV - Individual Programs Icon Empty
-
It just reads the info that Emby gives it so if Emby knows the properties of the file then the plugin will as well. Yes, those are the ones i'm planning to add with a "snap to nearest known rate" as a failsafe for those that might just deviate with 1bit or something for some reason. The plugin can already see .mp3, .flack and so on as it dynamically looks after what Emby says the files have. Actually have file formats and so on working already.
-
Appreciate it and many thanks but i need icons that look like the ones already in the plugin so as to not suddenly have a lot of different ones. You can gather them in a zip file and release them either here or in another thread (probably best) as i'm sure there are people very interested in them!
-
I built the Plexamp "Sonic Analysis" experience for Emby — self-hosted. Anyone Interested? Want to test it?
ginjaninja replied to kaj's topic in Third Party Apps
How do i troubleshoot these sorts of errors using cuda via pip install torch torchvision torchaudio --index-url "https://download.pytorch.org/whl/cu130" 24 bytes - your stream is not nice... (maybe increasing resync limit could help). Note: Illegal Audio-MPEG-Header 0x00000000 at offset 3936001. Note: Trying to resync... Note: Skipped 1024 bytes in input. [C:\vcpkg\buildtrees\mpg123\src\-66150af195.clean\src\libmpg123\parse.c:wetwork():1389] error: Giving up resync after 1024 bytes - your stream is not nice... (maybe increasing resync limit could help). Note: Illegal Audio-MPEG-Header 0x00000000 at offset 3937028. Note: Trying to resync... Note: Skipped 1024 bytes in input. [C:\vcpkg\buildtrees\mpg123\src\-66150af195.clean\src\libmpg123\parse.c:wetwork():1389] error: Giving up resync after 1024 bytes - your stream is not nice... (maybe increasing resync limit could help). Note: Illegal Audio-MPEG-Header 0x00000000 at offset 3938055. Note: Trying to resync... Note: Skipped 1024 bytes in input. [C:\vcpkg\buildtrees\mpg123\src\-66150af195.clean\src\libmpg123\parse.c:wetwork():1389] error: Giving up resync after 1024 bytes - your stream is not nice... (maybe increasing resync limit could help). Note: Illegal Audio-MPEG-Header 0x00000000 at offset 3939082. Note: Trying to resync... Note: Skipped 1024 bytes in input. [C:\vcpkg\buildtrees\mpg123\src\-66150af195.clean\src\libmpg123\parse.c:wetwork():1389] error: Giving up resync after 1024 bytes - your stream is not nice... (maybe increasing resync limit could help). Note: Illegal Audio-MPEG-Header 0x00000000 at offset 3940109. Note: Trying to resync... Note: Skipped 1024 bytes in input. [C:\vcpkg\buildtrees\mpg123\src\-66150af195.clean\src\libmpg123\parse.c:wetwork():1389] error: Giving up resync after 1024 bytes - your stream is not nice... (maybe increasing resync limit could help). Note: Illegal Audio-MPEG-Header 0x00000000 at offset 3941136. Note: Trying to resync... Note: Skipped 1024 bytes in input. -
Watched states don't sync reliably with server for Downloaded media
Modify3453 replied to Modify3453's topic in Android
@LukeSome days it may be better but for several it wasn't working at all so I would have to say this issue is still very much apparent where the app is not taking the locally retained watched state (which works) and passing to the server. I have to manually set episodes to watched for these, even though the downloaded episode shows it is indeed watched - the watch state isn't syncing. Ideally it would sync right away when connecting to the local server. Should I be leaving the app open (even though it was opened when the server was inaccessible and can't see server info)? I figured I had to close it out, to get it to connect again. Even if I do that, and leave it 'connected and open' overnight for example, it still did not sync the watched episodes. -
Yeah that makes sense. I'll probably have a new version out by the end of the week with that. Hopefully sooner!
-
Thanks
-
That means i would also lose the embedded chapters no? Then an option to only remove TheIntroDB chapters is definitely needed.
-
FlameRed started following Emby LiveTV - Individual Programs Icon Empty
-
Hello! I did a bit of searching but did not find this question posted, so forgive me if I am kind of new to IPTV. I setup IPTV using Stationarr and everything worked very well. I have station Icons propulated, the guide properly populated, the station channels logos populated. But under Live Tv ==> Shows, the icons are all empty. I am not sure how to diagnose what I might be doing wrong that the show icons are coming through. Or perhaps there is a better XMLTV source for shows themselves? Thanks in advance!
-
@KyoumaI believe you'd need to remove all chapters from the media currently, then rescan the chapters to reset them. I'll look into adding your other suggestions though.
-
Will the new plugin be able to read and identify the file, or will it only work with the filename or a custom setting? Here is a list of what I know. .mp3 .flac .wav .m4a .aac .ogg .opus .alac .aiff .wma Sample rates 8 kHz 11,025 kHz 12 kHz 16 kHz 22,05 kHz 24 kHz 32 kHz 44,1 kHz 48 kHz 64 kHz 88,2 kHz 96 kHz 176,4 kHz 192 kHz 352,8 kHz 384 kHz 705,6 kHz 768 kHz Bit depths 8-bit 16-bit 20-bit 24-bit 32-bit (inteiro) 32-bit float 64-bit float Bitrates MP3 (CBR) 8 kbps 16 kbps 24 kbps 32 kbps 40 kbps 48 kbps 56 kbps 64 kbps 80 kbps 96 kbps 112 kbps 128 kbps 160 kbps 192 kbps 224 kbps 256 kbps 320 kbps
-
GrimReaper started following Old "Media Server" text replacement
-
It is by design.
-
I like your plugin so much that I made icons for my own use (I find the default ones really ugly—no offense). If my graphic style works for you, let me know what you need for albums, and I'll create them in that style.
-
Ya tenía ambas opciones en Ilimitado y me sigue sucediendo el mismo problema.
-
jluce50 started following Old "Media Server" text replacement
-
Not a breaking issue, but I noticed that if t he server name contains "Emby", the text is replaced with "Media Server" in browser tabs/window titles.
-
Pixelsmash Vulnerability in ffmpeg (CVE-2026-8461) - Is Emby vulnerable?
unisoft replied to CHBMB's topic in General/Windows
You like insulting people don't you? You assume you are the greater authority, and that everyone else is stupid. You don't know my background, where I work, how long I have been in the industry etc. etc. CEO's don't answer anything on web sites or forums for those companies (usually). Instead you have program managers or actual developers or a department responsible doing it. Emby support is on here, I don't need to know about their background, just a mere question about a securiuy page so that posts in the forums are avoided and Emby looks more professional with regards to security and integrity of their products. Softworkz has explained the position, it could have been left at that, without you chipping in. I don't need smebody who gets off on gas lighting people for their fulfillment. -
Thanks. Rebooting the router resolved it. So weird...
-
@Pasithea A few more questions/suggestions. Is it possible to also add a Pop up for skip credits/next episode? It would be great, if we could have a place in the UI to see, remove chapters retrieved from this plugin. Maybe also a way to submit new markers within the Plugin UI? Thank you for making this.
-
Hi. Check firewall, VPN general network setup. Something is blocking access to our server over the internet and there will be more problems related to that.
-
Suddenly all I get is a spinning circle when trying to load the plugin catalog. I tried with a new installation and the same thing happened. The catalog refuses to load and there is an endless spinning circle. Anyone know what could have caused this and how to solve?
