LizardByte has the full documentation hosted on Read the Docs.
Themerr-jellyfin is a plugin for Jellyfin that adds theme songs to movies using ThemerrDB.
Plugin for Jellyfin that adds theme songs to movies and tv shows using ThemerrDB.
Home Page: https://app.lizardbyte.dev/ThemerrDB
License: GNU Affero General Public License v3.0
LizardByte has the full documentation hosted on Read the Docs.
Themerr-jellyfin is a plugin for Jellyfin that adds theme songs to movies using ThemerrDB.
I'm receiving the following error when trying to run Themerr-jellyfin.
Jellyfin Version : 10.8.8
Themerr-Jellyfin Version : 0.0.1.0
Operating System: Linux
Architecture: X64`
[2023-02-16 09:56:01.828 +00:00] [ERR] [123] Jellyfin.Server.Middleware.ExceptionMiddleware: Error processing request. URL "POST" "/Themerr/DownloadMovies".
Newtonsoft.Json.JsonReaderException: Additional text encountered after finished reading JSON content: }. Path '', line 1, position 120.
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Jellyfin.Plugin.Themerr.ThemerrManager.DownloadAllThemerr()
at Jellyfin.Plugin.Themerr.Api.ThemerrController.DownloadMovieThemerrRequest()
at lambda_method1017(Closure , Object )
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Jellyfin.Server.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
at Jellyfin.Server.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
at Jellyfin.Server.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
at Jellyfin.Server.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Jellyfin.Server.Middleware.QueryStringDecodingMiddleware.Invoke(HttpContext httpContext)
at Swashbuckle.AspNetCore.ReDoc.ReDocMiddleware.Invoke(HttpContext httpContext)
at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Jellyfin.Server.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
at Jellyfin.Server.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
at Jellyfin.Server.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context, IServerConfigurationManager serverConfigurationManager)
at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)
Is there anyway to fix this?
No response
No response
The plugin can`t find theme songs. My jellyfin is pt-BR (the translations are missing).
No response
Logs:
[15:38:06] [INF] [43] Jellyfin.Plugin.Themerr.ScheduledTasks.ThemerrTasks: Starting plugin, Downloading supported Theme Songs...
[15:38:07] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: O Despertar de uma Paixão, contribute:
https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20O%20Despertar%20de%20uma%20Paixão%20(2006)&database_url=https://www.themoviedb.org/movie/14202
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)
[15:38:37] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: Sou Louco Por Você, contribute:
https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Sou%20Louco%20Por%20Você%20(2012)&database_url=https://www.themoviedb.org/movie/109689
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)
[15:39:08] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: A Árvore do Amor, contribute:
https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Árvore%20do%20Amor%20(2010)&database_url=https://www.themoviedb.org/movie/50542
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)
[15:39:38] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: A Pior Pessoa do Mundo, contribute:
https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Pior%20Pessoa%20do%20Mundo%20(2021)&database_url=https://www.themoviedb.org/movie/660120
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)
[15:41:09] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: Mommy, contribute:
https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Mommy%20(2014)&database_url=https://www.themoviedb.org/movie/265177
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)```
More logs:
```[16:15:45] [INF] [19] Jellyfin.Plugin.Themerr.Api.ThemerrController: Server culture: pt-BR
[16:15:45] [WRN] [19] Jellyfin.Plugin.Themerr.Api.ThemerrController: Locale resource does not exist: Jellyfin.Plugin.Themerr.Locale.pt_BR.json
[16:15:45] [WRN] [19] Jellyfin.Plugin.Themerr.Api.ThemerrController: Locale resource does not exist: Jellyfin.Plugin.Themerr.Locale.pt.json
[16:15:46] [INF] [40] Jellyfin.Plugin.Themerr.Api.ThemerrController: Progress Items: {"items":[{"name":"A Árvore do Amor","id":"075c1889-db4e-f8e7-daba-377a381c3e6b","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Árvore%20do%20Amor%20(2010)&database_url=https://www.themoviedb.org/movie/50542","theme_provider":null,"type":"Movie","year":2010},{"name":"A Baleia","id":"80161451-0d55-dd60-1b0c-2ffca36aef24","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Baleia%20(2022)&database_url=https://www.themoviedb.org/movie/785084","theme_provider":null,"type":"Movie","year":2022},{"name":"A Pior Pessoa do Mundo","id":"0e097417-3246-9685-812d-604a085f5123","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Pior%20Pessoa%20do%20Mundo%20(2021)&database_url=https://www.themoviedb.org/movie/660120","theme_provider":null,"type":"Movie","year":2021},{"name":"A Sociedade da Neve","id":"c388bdb7-976e-c3ba-519b-347329e9b2fa","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Sociedade%20da%20Neve%20(2023)&database_url=https://www.themoviedb.org/movie/906126","theme_provider":null,"type":"Movie","year":2023},{"name":"Ahsoka","id":"50a5cd45-4f13-c970-aa4b-fedea3638f8d","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[TV SHOW]:%20Ahsoka%20(2023)&database_url=https://www.themoviedb.org/tv/114461","theme_provider":null,"type":"Series","year":2023},{"name":"Amnésia","id":"94ea2869-9297-6413-812a-327fed1802da","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Amnésia%20(2000)&database_url=https://www.themoviedb.org/movie/77","theme_provider":null,"type":"Movie","year":2000},{"name":"Andrei Rublev","id":"c38e8c59-6cac-e38d-a8c0-12d36795f839","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Andrei%20Rublev%20(1966)&database_url=https://www.themoviedb.org/movie/895","theme_provider":null,"type":"Movie","year":1966},{"name":"Barbie","id":"05879b5d-ac54-996b-41c5-798a7ff88baa","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Barbie%20(2023)&database_url=https://www.themoviedb.org/movie/346698","theme_provider":null,"type":"Movie","year":2023},{"name":"Ben-Hur","id":"c1dc96f7-4272-20b5-0d51-37646abdc37a","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Ben-Hur%20(1959)&database_url=https://www.themoviedb.org/movie/665","theme_provider":null,"type":"Movie","year":1959},{"name":"Blade II: O Caçador de Vampiros","id":"22ed2f8d-29ae-9480-9687-eb797a562820","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Blade%20II:%20O%20Caçador%20de%20Vampiros%20(2002)&database_url=https://www.themoviedb.org/movie/36586","theme_provider":null,"type":"Movie","year":2002},{"name":"Bob Marley: One Love","id":"c722cd5e-7fbe-d4a3-f0e8-01b6d37c5f00","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Bob%20Marley:%20One%20Love%20(2024)&database_url=https://www.themoviedb.org/movie/802219","theme_provider":null,"type":"Movie","year":2024},{"name":"Cartas de Iwo Jima","id":"2b075921-c16d-7d74-5f9c-aaa32899808d","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Cartas%20de%20Iwo%20Jima%20(2006)&database_url=https://www.themoviedb.org/movie/1251","theme_provider":null,"type":"Movie","year":2006},{"name":"Cidadão Kane","id":"52393ac3-4901-6bc0-404f-54a9fa1990c3","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Cidadão%20Kane%20(1941)&database_url=https://www.themoviedb.org/movie/15","theme_provider":null,"type":"Movie","year":1941}[...]```
CI build is consistently failing after merging #98.
No response
This should be fixed by oddstr13/jellyfin-plugin-repository-manager#99
Additional references:
I have Themer and TMDb installed, and hit download theme songs, but nothing happens and it never plays any when browsing movies.
Any suggestions? this plugin seems awesome if I could only get it working, thanks!
I am hoping to get it to play theme songs
No response
Theme starts at the maximum volume when opening a movie/series page without any option to set volume.
Option to set volume in settings
No response
Plugin works fine, creates Themerr.json and downloads theme.mp3, however all mp3 get corrupted.
No response
Running latest linuxserver jellyfin image and nightly Themerr-jellyfin docker mod.
LOGS:
[2023-09-15 10:51:04.807 +01:00] [INF] [132] Jellyfin.Api.Controllers.UniversalAudioController: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: null, MaxAlbumArtHeight: null, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 8000000, MaxStaticBitrate: 8000000, MusicStreamingTranscodingBitrate: 128000, MaxStaticMusicBitrate: 8000000, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "mp3", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "alac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4b", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webm", AudioCodec: "webma", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: "", AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False, Conditions: [] }], ContainerProfiles: [], CodecProfiles: [], ResponseProfiles: [], SubtitleProfiles: [] }
[2023-09-15 10:51:04.808 +01:00] [INF] [132] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "tiagalho". EnableAudioPlaybackTranscoding: True
[2023-09-15 10:51:04.850 +01:00] [INF] [10] Jellyfin.Api.Controllers.UniversalAudioController: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: null, MaxAlbumArtHeight: null, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 8000000, MaxStaticBitrate: 8000000, MusicStreamingTranscodingBitrate: 128000, MaxStaticMusicBitrate: 8000000, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "mp3", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "alac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4b", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webm", AudioCodec: "webma", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: "", AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False, Conditions: [] }], ContainerProfiles: [], CodecProfiles: [], ResponseProfiles: [], SubtitleProfiles: [] }
[2023-09-15 10:51:04.852 +01:00] [INF] [10] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "tiagalho". EnableAudioPlaybackTranscoding: True
[2023-09-15 10:51:05.112 +01:00] [INF] [10] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Jellyfin Web" "10.8.10" playing "theme". Stopped at "1097" ms
TLDR: The DOCKER_MOD installs the config dir and files with root ownership instead of the user that jellyfin runs as, causing jellyfin to crash on startup.
I have jellyfin running in a docker container on linux which has been working well for some time. I'm using the linuxserver/jellyfin image, along with their recommended PUID
and PGUID
options set to 1000
, and UMASK_SET
of 022
.
Following the install docs, I added DOCKER_MODS=lizardbyte/themerr-jellyfin:latest
to the environment variables in my docker-compose.yaml
and issued a docker-compose up -d
.
Examining the jellyfin logs reveals that the server repeatedly crashes due to an exception in the Themerr plugin with System.UnauthorizedAccessException: Access to the path '/config/data/plugins/Themerr/meta.json' is denied.
I noticed that the directory /config/data/plugins/Themerr
and its files are all owned by root
instead of the UID configured for the container, hence why the plugin is unable to access them once it starts up in jellyfin.
I manually chmod'd the files and everything fired up OK.
From looking at the linuxserver s6 init scripts I am guessing the fix would be to place an init script so that s6 changes ownership to the abc
user on startup. Their own docker-mods docs don't seem to cover this situation, but maybe some other docker-mods out there have a simple solution.
It's likely this only happens if the mod is installed after jellyfin has already been initialised previously.
The jellyfin server should start and begin answering network requests instead of crashing.
Complete cycle from the logfile - this pattern repeats as docker restarts the container:
jellyfin_1 | [22:59:28] [INF] [1] Main: Jellyfin version: 10.8.10
jellyfin_1 | [22:59:28] [INF] [1] Main: Environment Variables: ["[JELLYFIN_WEB_DIR, /usr/share/jellyfin/web]", "[JELLYFIN_CACHE_DIR, /config/cache]", "[JELLYFIN_PublishedServerUrl, https://XXXXXXXXXXX/]", "[JELLYFIN_CONFIG_DIR, /config]", "[JELLYFIN_LOG_DIR, /config/log]", "[JELLYFIN_DATA_DIR, /config/data]"]
jellyfin_1 | [22:59:28] [INF] [1] Main: Arguments: ["/usr/lib/jellyfin/bin/jellyfin.dll", "--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg"]
jellyfin_1 | [22:59:28] [INF] [1] Main: Operating system: Linux
jellyfin_1 | [22:59:28] [INF] [1] Main: Architecture: X64
jellyfin_1 | [22:59:28] [INF] [1] Main: 64-Bit Process: True
jellyfin_1 | [22:59:28] [INF] [1] Main: User Interactive: True
jellyfin_1 | [22:59:28] [INF] [1] Main: Processor count: 32
jellyfin_1 | [22:59:28] [INF] [1] Main: Program data path: /config/data
jellyfin_1 | [22:59:28] [INF] [1] Main: Web resources path: /usr/share/jellyfin/web
jellyfin_1 | [22:59:28] [INF] [1] Main: Application directory: /usr/lib/jellyfin/bin/
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Setting cache path: /config/cache
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.ApplicationHost: Loading assemblies
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Bookshelf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Bookshelf_9.0.0.0/Jellyfin.Plugin.Bookshelf.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.CoverArtArchive, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Cover Art Archive_7.0.0.0/Jellyfin.Plugin.CoverArtArchive.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly MetaBrainz.Common.Json, Version=5.0.0.0, Culture=neutral, PublicKeyToken=be12cbb629c03021 from /config/data/plugins/Cover Art Archive_7.0.0.0/MetaBrainz.Common.Json.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly MetaBrainz.MusicBrainz.CoverArt, Version=4.0.0.0, Culture=neutral, PublicKeyToken=be12cbb629c03021 from /config/data/plugins/Cover Art Archive_7.0.0.0/MetaBrainz.MusicBrainz.CoverArt.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Fanart, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Fanart_10.0.0.0/Jellyfin.Plugin.Fanart.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Opds, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/OPDS_4.0.0.0/Jellyfin.Plugin.Opds.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.OpenSubtitles, Version=19.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Open Subtitles_19.0.0.0/Jellyfin.Plugin.OpenSubtitles.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Themerr, Version=0.0.1.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Themerr/Jellyfin.Plugin.Themerr.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly YoutubeExplode, Version=6.2.5.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Themerr/YoutubeExplode.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Tvdb, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/TheTVDB_10.0.0.0/Jellyfin.Plugin.Tvdb.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly TvDbSharper, Version=3.2.2.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/TheTVDB_10.0.0.0/TvDbSharper.dll
jellyfin_1 | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.TMDbBoxSets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/TMDb Box Sets_10.0.0.0/Jellyfin.Plugin.TMDbBoxSets.dll
jellyfin_1 | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Defined LAN addresses : [192.168.0.0/16,10.0.0.0/8]
jellyfin_1 | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Defined LAN exclusions : []
jellyfin_1 | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using LAN addresses: [192.168.0.0/16,10.0.0.0/8]
jellyfin_1 | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using bind addresses: []
jellyfin_1 | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using bind exclusions: []
jellyfin_1 | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Bookshelf 9.0.0.0
jellyfin_1 | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Cover Art Archive 7.0.0.0
jellyfin_1 | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Fanart 10.0.0.0
jellyfin_1 | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: OPDS Feed 4.0.0.0
jellyfin_1 | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Open Subtitles 19.0.0.0
jellyfin_1 | [22:59:40] [ERR] [1] Emby.Server.Implementations.Plugins.PluginManager: Error creating Jellyfin.Plugin.Themerr.Plugin
jellyfin_1 | System.UnauthorizedAccessException: Access to the path '/config/data/plugins/Themerr/meta.json' is denied.
jellyfin_1 | ---> System.IO.IOException: Permission denied
jellyfin_1 | --- End of inner exception stack trace ---
jellyfin_1 | at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
jellyfin_1 | at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode)
jellyfin_1 | at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
jellyfin_1 | at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
jellyfin_1 | at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
jellyfin_1 | at System.IO.StreamWriter.ValidateArgsAndOpenPath(String path, Boolean append, Encoding encoding, Int32 bufferSize)
jellyfin_1 | at System.IO.File.WriteAllText(String path, String contents)
jellyfin_1 | at Emby.Server.Implementations.Plugins.PluginManager.SaveManifest(PluginManifest manifest, String path)
jellyfin_1 | at Emby.Server.Implementations.Plugins.PluginManager.CreatePluginInstance(Type type)
jellyfin_1 | [22:59:40] [FTL] [1] Main: Error while starting server.
jellyfin_1 | System.UnauthorizedAccessException: Access to the path '/config/data/plugins/Themerr/meta.json' is denied.
jellyfin_1 | ---> System.IO.IOException: Permission denied
jellyfin_1 | --- End of inner exception stack trace ---
jellyfin_1 | at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
jellyfin_1 | at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode)
jellyfin_1 | at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
jellyfin_1 | at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
jellyfin_1 | at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
jellyfin_1 | at System.IO.StreamWriter.ValidateArgsAndOpenPath(String path, Boolean append, Encoding encoding, Int32 bufferSize)
jellyfin_1 | at System.IO.File.WriteAllText(String path, String contents)
jellyfin_1 | at Emby.Server.Implementations.Plugins.PluginManager.SaveManifest(PluginManifest manifest, String path)
jellyfin_1 | at Emby.Server.Implementations.Plugins.PluginManager.ChangePluginState(LocalPlugin plugin, PluginStatus state)
jellyfin_1 | at Emby.Server.Implementations.Plugins.PluginManager.CreatePluginInstance(Type type)
jellyfin_1 | at Emby.Server.Implementations.ApplicationHost.<>c__DisplayClass99_0`1.<GetExports>b__0(Type i)
jellyfin_1 | at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
jellyfin_1 | at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
jellyfin_1 | at System.Linq.Enumerable.CastIterator[TResult](IEnumerable source)+MoveNext()
jellyfin_1 | at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
jellyfin_1 | at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
jellyfin_1 | at Emby.Server.Implementations.ApplicationHost.GetExports[T](CreationDelegateFactory defaultFunc, Boolean manageLifetime)
jellyfin_1 | at Emby.Server.Implementations.Plugins.PluginManager.CreatePlugins()
jellyfin_1 | at Emby.Server.Implementations.ApplicationHost.FindParts()
jellyfin_1 | at Emby.Server.Implementations.ApplicationHost.InitializeServices()
jellyfin_1 | at Jellyfin.Server.Program.StartApp(StartupOptions options)
jellyfin_1 | [22:59:40] [INF] [1] Main: Running query planner optimizations in the database... This might take a while
jellyfin_1 | [22:59:40] [INF] [1] Emby.Server.Implementations.ApplicationHost: Disposing CoreAppHost
jellyfin_1 | [22:59:40] [INF] [2] Main: Received a SIGTERM signal, shutting down
If a show or movie contains a semicolon, for example "Steins;Gate", then trying to add an theme request will truncate the issues title resulting in "[TV SHOW]: Steins"
I've created a patch that fixes this that I'll PR shortly.
The full issue title should be preserved, for the given example it should be "[TV SHOW]: Steins;Gate (2011)" and not "[TV SHOW]: Steins"
This can be seen in the edited title of this theme request:
LizardByte/ThemerrDB#3849
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.