Giter Site home page Giter Site logo

confusedpolarbear / intro-skipper Goto Github PK

View Code? Open in Web Editor NEW
986.0 24.0 320.0 1.81 MB

Fingerprint audio to automatically detect and skip intro sequences in Jellyfin

License: GNU General Public License v3.0

C# 58.23% HTML 20.53% Dockerfile 0.04% Python 2.47% JavaScript 5.60% Shell 0.09% Go 13.04%

intro-skipper's Introduction

Intro Skipper (beta)

Plugin Banner

Analyzes the audio of television episodes to detect and skip over intros.

If you use the custom web interface on your server, you will be able to click a button to skip intros, like this:

Skip intro button

However, if you want to use an unmodified installation of Jellyfin 10.8.z or use clients that do not use the web interface provided by the server, the plugin can be configured to automatically skip intros.

System requirements

  • Jellyfin 10.8.4 (or newer)
  • Jellyfin's fork of ffmpeg must be installed, version 5.0.1-5 or newer
    • jellyfin/jellyfin 10.8.z container: preinstalled
    • linuxserver/jellyfin 10.8.z container: preinstalled
    • Debian Linux based native installs: provided by the jellyfin-ffmpeg5 package
    • MacOS native installs: build ffmpeg with chromaprint support (instructions)

Introduction requirements

Show introductions will only be detected if they are:

  • Located within the first 25% of an episode, or the first 10 minutes, whichever is smaller
  • Between 15 seconds and 2 minutes long

Ending credits will only be detected if they are shorter than 4 minutes.

All of these requirements can be customized as needed.

Installation instructions

Step 1: Install the modified web interface (optional)

While this plugin is fully compatible with an unmodified version of Jellyfin 10.8.z, using a modified web interface allows you to click a button to skip intros. If you skip this step and do not use the modified web interface, you will have to enable the "Automatically skip intros" option in the plugin settings.

Instructions on how to switch web interface versions are located here.

Step 2: Install the plugin

  1. Add this plugin repository to your server: https://raw.githubusercontent.com/ConfusedPolarBear/intro-skipper/master/manifest.json
  2. Install the Intro Skipper plugin from the General section
  3. Restart Jellyfin
  4. If you did not install the modified web interface, enable automatic skipping
    1. Go to Dashboard -> Plugins -> Intro Skipper
    2. Check "Automatically skip intros" and click Save
  5. Go to Dashboard -> Scheduled Tasks -> Analyze Episodes and click the play button
  6. After a season has completed analyzing, play some episodes from it and observe the results
    1. Status updates are logged before analyzing each season of a show

Installation instructions for MacOS

  1. Build ffmpeg with chromaprint support using brew:
brew uninstall --force --ignore-dependencies ffmpeg
brew install chromaprint amiaopensource/amiaos/decklinksdk
brew tap homebrew-ffmpeg/ffmpeg
brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-chromaprint
brew link --overwrite ffmpeg
  1. Retrieve ffmpeg path with whereis ffmpeg and use this path on Jellyfin under encoding settings

  2. Follow the installation instructions above

Documentation

Documentation about how the API works can be found in api.md.

intro-skipper's People

Contributors

anthonylavado avatar arbitrate3280 avatar artiume avatar barongreenback avatar bond-009 avatar carif avatar cellulosa avatar codito avatar confusedpolarbear avatar crobibero avatar daullmer avatar dependabot[bot] avatar dkanada avatar h1dden-da3m0n avatar iluvatyr avatar joshuaboniface avatar jtormalm avatar konradrej avatar ldellisola avatar logicalphallacy avatar neropcstation avatar nielsvanvelzen avatar nyanmisaka avatar oddstr13 avatar roib20 avatar smart123s avatar zzvertigo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

intro-skipper's Issues

[Bug] Error processing request. URL "GET" "/Intros/Shows".

Describe the bug
A clear and concise description of what the bug is.

System information

  • Plugin version: latest
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: Deb file
  • OS: ubuntu 20.04

Jellyfin logs
[2022-06-19 15:32:16.777 +10:00] [ERR] Error processing request. URL "GET" "/Intros/Shows".
System.ArgumentNullException: Value cannot be null. (Parameter 'key')
at System.Collections.Generic.Dictionary`2.FindValue(TKey key)
at ConfusedPolarBear.Plugin.IntroSkipper.Controllers.VisualizationController.GetShowSeasons()
at lambda_method1083(Closure , Object , Object[] )
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
--- End of stack trace from previous location ---
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.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.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.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)
at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)
[2022-06-19 15:33:19.240 +10:00] [INF] Executing "Analyze episodes"

After a new minutes dashboard [Running tasks] starting to count from 0.01% but not sure if it's working as I can't find any new files and nothing else shows in the logs.

Are we able to have a log file for this that shows every what is going on and more info on how this plugin works for those who have limited IT knowledge? I understand how it works but not where the files are stored? I was thinking inside the shows folder?

[Bug] EDL branch crashes while scanning if enabled EDL writing is enable.

Describe the bug
if i turn off the write EDL option the scan completes fine, but if i enable it i get the follow crash
System information

  • Plugin version: pulled from master with edl merged, then dll copied over dll in plugin folder ( commit cf1dc66)
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: ubuntu debs from their stable version
  • OS: Ubuntu 20.04

Jellyfin logs

2022-06-23 16:15:00.725 +01:00] [ERR] Error
System.AggregateException: One or more errors occurred. (The given key 'c0fd6fff-ebde-4011-f410-efc6a31cf09a' was not present in the dictionary.)
 ---> System.Collections.Generic.KeyNotFoundException: The given key 'c0fd6fff-ebde-4011-f410-efc6a31cf09a' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at ConfusedPolarBear.Plugin.IntroSkipper.EdlManager.UpdateEDLFiles(ReadOnlyCollection`1 episodes)
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.<>c__DisplayClass22_0.<ExecuteAsync>b__0(KeyValuePair`2 season)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass44_0`2.<PartitionerForEachWorker>b__1(IEnumerator& partitionState, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
--- End of stack trace from previous location ---
   at System.Threading.Tasks.Parallel.<>c__DisplayClass44_0`2.<PartitionerForEachWorker>b__1(IEnumerator& partitionState, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
   at System.Threading.Tasks.TaskReplicator.Replica.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.TaskReplicator.Run[TState](ReplicatableUserAction`1 action, ParallelOptions options, Boolean stopOnFirstFailure)
   at System.Threading.Tasks.Parallel.PartitionerForEachWorker[TSource,TLocal](Partitioner`1 source, ParallelOptions parallelOptions, Action`1 simpleBody, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
--- End of stack trace from previous location ---
   at System.Threading.Tasks.Parallel.ThrowSingleCancellationExceptionOrOtherException(ICollection exceptions, CancellationToken cancelToken, Exception otherException)
   at System.Threading.Tasks.Parallel.PartitionerForEachWorker[TSource,TLocal](Partitioner`1 source, ParallelOptions parallelOptions, Action`1 simpleBody, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body)
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress`1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options)

[2022-06-23 16:52:34.021 +01:00] [ERR] Error
System.AggregateException: One or more errors occurred. (The given key '281b49f6-c4e1-34e3-a64d-630044fcb7e8' was not present in the dictionary.) (The given key 'c0fd6fff-ebde-4011-f410-efc6a31cf09a' was not present in the dictionary.)
 ---> System.Collections.Generic.KeyNotFoundException: The given key '281b49f6-c4e1-34e3-a64d-630044fcb7e8' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at ConfusedPolarBear.Plugin.IntroSkipper.EdlManager.UpdateEDLFiles(ReadOnlyCollection`1 episodes)
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.<>c__DisplayClass22_0.<ExecuteAsync>b__0(KeyValuePair`2 season)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass44_0`2.<PartitionerForEachWorker>b__1(IEnumerator& partitionState, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
--- End of stack trace from previous location ---
   at System.Threading.Tasks.Parallel.<>c__DisplayClass44_0`2.<PartitionerForEachWorker>b__1(IEnumerator& partitionState, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
   at System.Threading.Tasks.TaskReplicator.Replica.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.TaskReplicator.Run[TState](ReplicatableUserAction`1 action, ParallelOptions options, Boolean stopOnFirstFailure)
   at System.Threading.Tasks.Parallel.PartitionerForEachWorker[TSource,TLocal](Partitioner`1 source, ParallelOptions parallelOptions, Action`1 simpleBody, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
--- End of stack trace from previous location ---
   at System.Threading.Tasks.Parallel.ThrowSingleCancellationExceptionOrOtherException(ICollection exceptions, CancellationToken cancelToken, Exception otherException)
   at System.Threading.Tasks.Parallel.PartitionerForEachWorker[TSource,TLocal](Partitioner`1 source, ParallelOptions parallelOptions, Action`1 simpleBody, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body)
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress`1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options)
 ---> (Inner Exception #1) System.Collections.Generic.KeyNotFoundException: The given key 'c0fd6fff-ebde-4011-f410-efc6a31cf09a' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at ConfusedPolarBear.Plugin.IntroSkipper.EdlManager.UpdateEDLFiles(ReadOnlyCollection`1 episodes)
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.<>c__DisplayClass22_0.<ExecuteAsync>b__0(KeyValuePair`2 season)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass44_0`2.<PartitionerForEachWorker>b__1(IEnumerator& partitionState, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
--- End of stack trace from previous location ---
   at System.Threading.Tasks.Parallel.<>c__DisplayClass44_0`2.<PartitionerForEachWorker>b__1(IEnumerator& partitionState, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
   at System.Threading.Tasks.TaskReplicator.Replica.Execute()<---

[Doc] No web interface in release's zip file

The current documentation to install the web interface says:

Download the latest compiled version of the web interface from the releases tab (or compile from source)

But the release zip only contains the DLL of the plugin. I'm unsure if one way to install would be to clone the intros branch from your jellyfin-web repo and simply mount it in Jellyfin docker container or if there are other steps involved.

Or I might have simply missed something here?

Can't wait to try the plugin, thank you! Hope Jellyfin eventually allow plugins to modify the web UI without having to go through such extremes.

[Bug] log file does not specify jellyfin-ffmpeg5 needed for native install

Describe the bug
Task to analyze shows fails.

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: Via Repo
  • OS: Ubuntu 22.04 LTS (GNU/Linux 5.15.0-40-generic x86_64)

Jellyfin logs

[2022-06-26 14:07:52.520 -07:00] [INF] ExecuteQueuedTasks
[2022-06-26 14:07:52.678 -07:00] [INF] Executing "Analyze episodes"
[2022-06-26 14:07:52.678 -07:00] [ERR] Error
ConfusedPolarBear.Plugin.IntroSkipper.FingerprintException: No episodes to analyze: either no show libraries are defined or ffmpeg could not be found
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress`1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options)
[2022-06-26 14:07:52.678 -07:00] [INF] "Analyze episodes" Failed after 0 minute(s) and 0 seconds

[Bug] API returning HTTP 401

Describe the bug
API returning HTTP 401 and intro skipping seemingly non-functional.

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: linuxserver container
  • OS: Linux

Jellyfin logs

[16:21:29] [INF] [44] Microsoft.AspNetCore.Hosting.Diagnostics: Request starting HTTP/1.1 GET http://tv.stocum.us/Episode/d0480146f42890e22bf8ddb25a1d403b/IntroTimestamps - -
[16:21:29] [INF] [44] Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Authorization failed. These requirements were not met:
DenyAnonymousAuthorizationRequirement: Requires an authenticated user.
[16:21:29] [INF] [44] Jellyfin.Api.Auth.CustomAuthenticationHandler: AuthenticationScheme: CustomAuthentication was challenged.
[16:21:29] [INF] [44] Microsoft.AspNetCore.Hosting.Diagnostics: Request finished HTTP/1.1 GET http://tv.stocum.us/Episode/d0480146f42890e22bf8ddb25a1d403b/IntroTimestamps - - - 401 0 - 0.7539ms

Skipping outros/credits

It would be a good feature if this plugin was able to skip outros/credits as well. Makes binge-watching a bit easier

Could not open the input file

Hey,

We are trying to run a scan and getting constant errors like Image

Is there any way to see what this actually is and have you seen this before?

jellyfin-ffmpeg now includes libchromaprint

This is just an info that we recently added libchromaprint to jellyfin-ffmpeg.
Once 10.8 stable with jellyfin-ffmpeg 5.0.1-5 gets released you could use ffmpeg to create the fingerprints you're currently generating with fpcalc.

[Bug] Spaces in tv episode names cause issues

Describe the bug
It seems having spaces in tv episode name is causing fingerprint issues because when I removed them before I didn't have issues.

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: Windows installer exe
  • OS: Windows 10

Jellyfin logs

pastebin.com/kiwk8ajR

[Feature] How long should a scan take?

I have around 7.5k episodes on my NAS and after 16 hours scanning I was at 20%. I'm running a rasberry pi4, and run Jellyfin in docker.

I dont mind leaving it running, but I also have HomeAssistant in docker and find that when I run the Alayze Episodes, it seems to interfere with my HomeAssistant instance, I think just a resource issue.

So just wondering if there are any benchmarks for how long I should expect it to run?

Server: raspberrypi
Version: 10.8.0
Operating System: Linux
Architecture: Arm

Add user preference for intro skipping method

Would be nice if each user could choose if they want auto skip or just button.

Also, would be good if we could specify certain clients where it would automatically skip, for people with Android TV's who don't want to recompile the whole app, if you just set it to skip intro, you won't need the button.

Request for information on jellyfin web files

I map Jellyfins web config to an external docker volume, so that I can modify the UI, please can you tell me which files exactly you have modified in here so that I can reintroduce my modifications into the web ui. I also want to make a modified Jellyfin android tv apk and windows client to work with intro-skipper so this would help massively.

Thanks and great work.

[Feature] exclusion list to exclude certain shows from the scan

The possibility to exclude certain shows from the auto skip would be nice.
Some shows have small little details within the intro, wich you might want to see but won't get detected cause those differences from ep to ep are just visual.

E.g in "wellington paranormal" there are different newspapers headlines each time.

Option to export/save as .edl file for other players to skip found intros [Feature]

Describe the feature you'd like added
The option to export all found intros (or save as you find) to a .edl file and save along side the video file to allow other player to skip intros.
Kodi for example is planing on adding option 4 and 5 for intro and outro.
[https://kodi.wiki/view/Edit_decision_list]

Additional context
Not sure a huge amount of people use Jellyfin and separate Kodi, but could help those with external players.

[Bug] Path not given by Jellyfin

Describe the bug
The intro skipper plugin can not parse episodes

Jellyfin logs

[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode b7942c39-7576-d787-660f-3727875c521c as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode c67a6e3b-fc05-2bd4-a1bb-d4c379ffb8e5 as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode 444d243e-f430-dc84-2736-d63a213c8066 as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode c8dc383e-baec-e386-1d11-7fed19058acc as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode c46d473e-defe-307a-6222-81a7a5e142df as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode dd417d40-86b5-461c-e236-073695521456 as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode fe325541-dd8f-8040-f938-afb83d86f1ee as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode 8a3e1742-eae1-c4df-bb90-af7895d612df as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode 197d2b42-eabd-3ac5-c1f2-b21938fcc3d5 as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode c7c26a53-5c9c-31f3-8434-f890f643a682 as no path was provided by Jellyfin
[2022-06-24 10:12:58.226 +02:00] [WRN] [1] ConfusedPolarBear.Plugin.IntroSkipper.Entrypoint: Not queuing episode 275f0654-59ce-3a14-0e45-762659483549 as no path was provided by Jellyfin

[Feature] Analyze new episodes on library scan

From what Ive seen, currently the episodes only get scanned when the task is run.
Due to this, episodes that get download only get analyzed for their intros sometime later, which:

  • Places a greater load on the server, as all series and all seasons have to be checked for changed/added episodes
  • Allows intro skipping only after running the task, which may be annoying for airing series

What do you think about analyzing the episodes as soon as they get picked up in the library scan?

I have not checked deeply into it, but I suppose newly added episodes get added to some kind of queue, as Jellyfin needs to get metadata for the episodes.
Maybe it is possible to use this queue to analyze the episodes for their intros.

Also, there is some kind of event system (the one the Webhook plugin uses), which notifies a plugin when a new episode is added.
This event system could also be efficiently used for this (Maybe this event?)

Using one of those two methods, analyzing episodes as soon as they are available should be possible.
I honestly only see advantages when using this method, is this something you are interested in adding to this plugin?

[Feature] Library selection

I'd like to see the ability to limit which libraries the plugin will scan for intro skipping.

I have one TV library for episodes where the media files are hosted locally, and another one that is 7000+ .strm files (which just contain a link to a file on a web server somewhere). In the comparison section of the plugin configuration screen it shows all of the TV series in my .strm library, but I'm unsure how the plugin will handle those files and I'd hate to see it trying to stream all that remote media to try to analyze it.

[Bug] Linuxserver/Jellyfin docker plugin problem

The plugin isn't running for me. I get no errors in the log and it only runs for a second or less. I'm using the Linuxserver/Jellyfin version of the docker. It has ffmpeg 5.0 installed and I did force install fpcalc in the docker and that still didn't get it working. Any clue where I could look for the problem? I am running Jellyfin 10.8.1

[Bug] Unable to get intros in plugin configuration

Describe the bug
When loading the plugin configuration page the dropdowns aren't populated.
image

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.1
  • Jellyfin installation method: Official Docker (mapped web)
  • OS: Debian

Jellyfin logs

[09:17:38] [ERR] [119] Jellyfin.Server.Middleware.ExceptionMiddleware: Error processing request. URL GET /Intros/Shows.
System.ArgumentNullException: Value cannot be null. (Parameter 'key')
   at System.Collections.Generic.Dictionary`2.FindValue(TKey key)
   at ConfusedPolarBear.Plugin.IntroSkipper.Controllers.VisualizationController.GetShowSeasons()
   at lambda_method690(Closure , Object , Object[] )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
--- End of stack trace from previous location ---
   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 Prometheus.HttpMetrics.HttpRequestDurationMiddleware.Invoke(HttpContext context)
   at Prometheus.HttpMetrics.HttpRequestCountMiddleware.Invoke(HttpContext context)
   at Prometheus.HttpMetrics.HttpInProgressMiddleware.Invoke(HttpContext context)
   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)

[Bug] Progress Reset

Describe the bug
I have a large library and my scan over the course of the week got to around 38%. After this latest update, it's now gone back to 0%. Is this normal for this update?

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: Docker
  • OS: Ubuntu

[Feature] Analysie Chapter data to detect Intro and outros

Describe the feature you'd like added
Some videos already have chapters metadata.
By using the chapters, the scanning could be sped up by either looking for a certain pattern in the chapters name i.e. Intro, OP,ED etc or by cutting down the analysis length by filtering the chapters. i.e. we know that the plugin currently looks for an intro that is Located within the first 25% of an episode, or the first 10 minutes, whichever is smaller. Lets imagine there is a file that which has 3 chapters in the first 25% of an episode:

  1. The first chapter would cover 10% of the episode (0-10%)
  2. The second chapter would cover the next 10% (10-20%)
  3. The third chapter would cover the next 30% (20-50%)

Now, most likely the intro would be in the second chapter, after the prologue. By scanning that portion first we have reduced the scanning from 25% to 10%. If it fails to detect in the second chapter, then it should check the remaining chapters. At best we reduce the scanning and fingerprinting time and at worst we don't gain any performance out it, but delay by increasing the time it takes to get the chapter information (which would be almost negligible compared to fingerprinting audio)

Additional context
FFMPEG to get the chapters:
ffprobe -i fname -print_format json -show_chapters -loglevel error

Bug: Analyze episodes Completed after 0 minute(s) and 0 seconds

Installed 0.0.0.2 using the plugin manifest and your docker container attached to a Jellyfin 10.8 beta 3 library.
Restarted the server and manually started the Scheduled Task but it silently failed and logs Analyze episodes Completed after 0 minute(s) and 0 seconds on the first scan.

[Bug] analyze episodes task fails to run

Describe the bug
the Analyze episodes task fails to run (error in logs below)

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: native through apt repo
  • OS: Debian

Jellyfin logs

[2022-06-22 15:00:01.120 +00:00] [INF] Executing "Analyze episodes"
[2022-06-22 15:00:01.121 +00:00] [ERR] Error
ConfusedPolarBear.Plugin.IntroSkipper.FingerprintException: No episodes to analyze: either no show libraries are defined or ffmpeg could not be found
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress 1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options)
[2022-06-22 15:00:01.121 +00:00] [INF] "Analyze episodes" Failed after 0 minute(s) and 0 seconds
[2022-06-22 15:00:01.123 +00:00] [INF] ExecuteQueuedTasks

Server not working after plugin install

I'm trying to install the plugin and it doesn't seem to work at all. After replacing my container Image everything loads up fine, but once I install the plugin and restart I get this.
I'm trying to install version v0.1.0 (v0.0.3 also didn't work), and I changed from the linuxserver/jellyfin image (10.8.0) if it matters (I remapped the directories as this comment explains, and everything kept working as usual.

Am I doing something wrong?

UPDATE: seems like installing the plugin with my original image lets the server load, but it doesn't scan. I've tried installing fpcalc (using libchromaprint-tools) and it makes Jellyfin crash with the same error, so I'm guessing that's the issue.

[Bug] Episodes are not ordered correctly within season

Describe the bug
The episodes to be analyzed are ordered by the sorting title instead of the episode number (index number).

As seen by this code segment:

OrderBy = new[] { ("SortName", SortOrder.Ascending) },

This leads to bad intro detection in certain seasons. For example, one season I've tested has 64 episodes and changes the intro every 12-15 episodes. As the episodes are scrambled by sorting after the sorting title and not chronological, the plugin compares wrong intro sequences and finds no timestamps (tested on small subset of 5 episodes). After testing I have found that changing "SortName" to "IndexNumber" in the mentioned line solves the wrong sorting and results in 100% intro detection within the tested episodes. It would also fix the Fingerprint Visualization interface as it uses the same sorting from the same list.

Is there a reason for sorting with the title instead of chronological?

System information

  • Plugin version: latest master commit f6abe81
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: Native (Service)
  • OS: Windows 11

[Bug] Can't press skip button on iOS

Describe the bug
Skip button is hidden behind the rest of the web UI on my iPhone X, see image below. I do not have a larger iPhone to try it on.
iOS screenshot

System information

  • Plugin version: 0.1.5.0
  • Jellyfin client: Official iOS Jellyfin app v1.5.0 (Native Video Player turned off)
  • Client OS: iOS 15.5
  • Jellyfin server version: 10.8
  • Jellyfin server installation method: ConfusedPolarBear docker image
  • Server OS: Debian 11

Jellyfin logs

No relevant logs found

Autoskip intros

I think there should be an option to autoskip intros. This would bypass the need to compile the web interface for the plugin to work

Won't analyze episodes

Hi,

I've just installed ver 0.1.0.0 of intro-skipper and am on Jellyfin 10.8.0. When i try to analyze episodes through the scheduled tasks it fails and says completed in 0 minutes and 0 seconds in the logs. I have tried installing version 0.0.3.0 and 0.0.2.0 and both of these do the same thing.

Autoskip intro on androidTV client

Auto Skipping works great on all clients except android TV. On android tv stable, it doesn't skip it just plays ignoring the plugin. On android tv debug, it tries to skip and crashes.
I tried to check logs to debug what was happening but there's nothing in server logs so I was wondering if there was a way to check.

Add API version parameter to API routes added by the plugin

The API parameter would allow for a more stable API, while at the same time allowing for changes in the future. This would motivate developers of 3rd party Jellyfin clients to implement this until the intro skipping feature gets implemented officially.

Doesn't work on Android TV

Describe the bug
I have auto skip on since I don't have docker and didn't want to upload a modded GUI. Web GUI works and Android Phone app but ATV does not auto skip.

System information

  • Plugin version: 1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: DEB File
  • OS: Android TV

Jellyfin logs
N/A
paste logs here

Input string was not in a correct format.

Describe the bug
Sporadically after a while of analysing error "Input string was not in a correct format." occurs and analysing stops. Upon triggering the analysing again, the error occurs almost immediately, after a bunch of "ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask: Analyzing XX episodes from XX season XX".

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: jellyfin-intro-skipper:latest docker image
  • OS: linux/amd64

Jellyfin logs

[...]
[DBG] [77] ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask: Analyzing 10 episodes from Squid Game season 1
[DBG] [77] ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask: Analyzing 26 episodes from King of the Hill season 3
[ERR] [77] System.AggregateException: One or more errors occurred. (Input string was not in a correct format.)
  ---> System.FormatException: Input string was not in a correct format.
    at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, TypeCode type)
    at ConfusedPolarBear.Plugin.IntroSkipper.Chromaprint.LoadCachedFingerprint(QueuedEpisode episode, ReadOnlyCollection`1& fingerprint)
    at ConfusedPolarBear.Plugin.IntroSkipper.Chromaprint.Fingerprint(QueuedEpisode episode)
    at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.FingerprintEpisodes(QueuedEpisode lhsEpisode, QueuedEpisode rhsEpisode)
    at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.AnalyzeSeason(KeyValuePair`2 season, CancellationToken cancellationToken)
    at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.<>c__DisplayClass19_0.<ExecuteAsync>b__0(KeyValuePair`2 season)
    at System.Threading.Tasks.Parallel.<>c__DisplayClass44_0`2.<PartitionerForEachWorker>b__1(IEnumerator& partitionState, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
 --- End of stack trace from previous location ---
    at System.Threading.Tasks.Parallel.<>c__DisplayClass44_0`2.<PartitionerForEachWorker>b__1(IEnumerator& partitionState, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
    at System.Threading.Tasks.TaskReplicator.Replica.Execute()
    --- End of inner exception stack trace ---
    at System.Threading.Tasks.TaskReplicator.Run[TState](ReplicatableUserAction`1 action, ParallelOptions options, Boolean stopOnFirstFailure)
    at System.Threading.Tasks.Parallel.PartitionerForEachWorker[TSource,TLocal](Partitioner`1 source, ParallelOptions parallelOptions, Action`1 simpleBody, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
 --- End of stack trace from previous location ---
    at System.Threading.Tasks.Parallel.ThrowSingleCancellationExceptionOrOtherException(ICollection exceptions, CancellationToken cancelToken, Exception otherException)
    at System.Threading.Tasks.Parallel.PartitionerForEachWorker[TSource,TLocal](Partitioner`1 source, ParallelOptions parallelOptions, Action`1 simpleBody, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
    at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
    at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body)
    at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress`1 progress, CancellationToken cancellationToken)
    at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options)

[Bug] Can't press skip intro button on Android

Describe the bug
A clear and concise description of what the bug is.

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: native
  • OS: Windows 10

I checked that the PC is working normally.
But on the Android app, the button pops up, but I can't press it. Is there any solution?

[Feature] Make intro time requirements configurable by the user

Show introductions will only be detected if they are:
Located within the first 25% of an episode, or the first 10 minutes, whichever is smaller

There are quite a few episodes in my library where the intro starts after the 10 minute mark. The plugin fails to detect these intros with its current hardcoded analyze duration limit of 600 seconds. It would be very much appreciated if you allowed the user to change this setting in a config file or the GUI.

Personally, I'd probably set it to 40% or 20 minutes, whichever is smaller. These values should cover nearly 100% of episodes instead of the current ~95%. The increased resource usage would be fine, since the audio-based scan is very quick and the fingerprint data require minimal disk space.

Offering just two scan options in the GUI would also provide a pretty nice user experience:

  • Quick scan (default) detects most intros (25%/10m)
  • Full scan takes twice as long and detects virtually all intros (40%/20m)

[Feature] Skip and play automatically

Describe the feature you'd like added

Skipping is normal, but automatically pauses after skipping.
I hope it plays right away without pausing.

Additional context
Add any other context or screenshots about the feature request here.

Analyze episodes doesn't appear to do anything

When I click the "Analyze episodes" button it proceeds to run but then finishes without taking any time and doesn't appear to actually analyze anything. There are plenty of episodes for it to analyze however.

System information

  • Plugin version: 0.1.0.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: By executable?
  • OS: Windows 10

[2022-06-17 05:10:38.802 -04:00] [INF] [25] Emby.Server.Implementations.ScheduledTasks.TaskManager: Executing "Analyze episodes"
[2022-06-17 05:10:38.804 -04:00] [INF] [25] Emby.Server.Implementations.ScheduledTasks.TaskManager: "Analyze episodes" Completed after 0 minute(s) and 0 seconds
[2022-06-17 05:10:38.810 -04:00] [INF] [25] Emby.Server.Implementations.ScheduledTasks.TaskManager: ExecuteQueuedTasks

[Bug] [ERR] The installed version of ffmpeg does not support chromaprint

Describe the bug
Trying to run the Analyze Episodes Scheduled Task fails instantly when triggered. Checking Jellyfin logs shows that the plugin failed to find a version of ffmpeg that supports chromaprint. Current ffmpeg in use is the latest ffmpeg 5.0.1 from Jellyfin. Tried to switch to system installed ffmpeg, version 4.2.7-0ubuntu0.1, and received the same result.

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: Native
  • OS: Ubuntu 20.04.4

Jellyfin logs
jellyfin20220622.log

Thank you for the help and thanks for the awesome plugin!

Finish documenting theory of operation

Short high level overview:

  • Episodes are queued for analysis by season, ordered sequentially
  • For a pair of episodes:
    • Run fpcalc and get the uncompressed fingerprint for both episodes by using -raw
    • Check if there is a region of similar audio in both episodes
      • Audio is marked similar when multiple fingerprint points with a low Hamming distance appear in proximity to each other
    • Find and store the longest contiguous range of similar audio
  • After completing analysis on a season, check for episodes that don't seem to have an intro or are statistical outliers
    • If any are found, reanalyze them against selected episodes from the same season

Open Discussion on Plugin Integration

๐Ÿ‘‹ Hi! I'm Anthony from the Jellyfin Core Team. As the plugin is getting to be more popular, we'd like to talk a bit about how we can best support you, or even bring the plugin/web changes to be part of the project.

Would you be interested in joining our chat to discuss this further? We're primarily on Matrix, but you can join via Discord too. One note is that if you join via Discord, then we wouldn't be able to DM/etc.

Our contact links are all here: https://jellyfin.org/contact/

Edit: I see you're in some of the rooms already! Send me a ping whenever you're around.

[Bug] Cant make plugin to work

Describe the bug
Run plugin and it return failed

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 1.8.0
  • Jellyfin installation method: native service
  • OS: Ubuntu 20.04

Jellyfin logs

[2022-06-19 22:41:27.929 +07:00] [INF] ExecuteQueuedTasks
[2022-06-19 22:41:28.934 +07:00] [INF] Executing "Analyze episodes"
[2022-06-19 22:41:28.936 +07:00] [ERR] Error
ConfusedPolarBear.Plugin.IntroSkipper.FingerprintException: No episodes to analyze: either no show libraries are defined or ffmpeg could not be found
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress`1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options)
[2022-06-19 22:41:28.937 +07:00] [INF] "Analyze episodes" Failed after 0 minute(s) and 0 seconds
[2022-06-19 22:41:28.939 +07:00] [INF] ExecuteQueuedTasks
[2022-06-19 22:41:29.400 +07:00] [INF] Executing "Analyze episodes"
[2022-06-19 22:41:29.401 +07:00] [ERR] Error
ConfusedPolarBear.Plugin.IntroSkipper.FingerprintException: No episodes to analyze: either no show libraries are defined or ffmpeg could not be found
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress`1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options)
[2022-06-19 22:41:29.402 +07:00] [INF] "Analyze episodes" Failed after 0 minute(s) and 0 seconds
[2022-06-19 22:41:29.403 +07:00] [INF] ExecuteQueuedTasks
[2022-06-19 22:41:29.579 +07:00] [INF] Executing "Analyze episodes"
[2022-06-19 22:41:29.581 +07:00] [ERR] Error

CleanShot 2022-06-19 at 22 52 44@2x

[Bug] Analyzing episodes fails

Describe the bug
Pressing "Analyze episodes" fails instantly
Screenshot 2022-07-05 at 15 12 02

System information

  • Plugin version: 0.1.5.0
  • Jellyfin version: 10.8.0-5
  • Jellyfin installation method: Jellyfin package from the SynCommunity repo (Chromeprint and ffmpeg is also installed)
  • OS: Synology

Jellyfin logs

[2022-07-05 15:07:47.143 +02:00] [INF] [14] Emby.Server.Implementations.ScheduledTasks.TaskManager: Executing "Analyze episodes"
[2022-07-05 15:07:47.195 +02:00] [ERR] [14] Emby.Server.Implementations.ScheduledTasks.TaskManager: Error
ConfusedPolarBear.Plugin.IntroSkipper.FingerprintException: No episodes to analyze: either no show libraries are defined or ffmpeg could not be found
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress`1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options) in /github/workspace/spk/jellyfin/work-aarch64-7.0/jellyfin-10.8.0/Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs:line 412
[2022-07-05 15:07:47.257 +02:00] [INF] [14] Emby.Server.Implementations.ScheduledTasks.TaskManager: "Analyze episodes" Failed after 0 minute(s) and 0 seconds

Analyzing the episodes worked the first time I installed the plugin, but now when I tried to press it again after adding some tv-shows, it fails.

[Bug] either no show libraries are defined or ffmpeg could not be found (linuxserver)

Describe the bug
The scanner does not launch.
The problem comes I think from the fact that I use the linuxserver image, but I do not know how to solve it
Thx

System information

  • Plugin version: v0.1.5.0
  • Jellyfin version: 10.8.0
  • Jellyfin installation method: Docker ( Linuxserver )
  • OS: OMV 6

Jellyfin logs

ConfusedPolarBear.Plugin.IntroSkipper.FingerprintException: No episodes to analyze: either no show libraries are defined or ffmpeg could not be found
   at ConfusedPolarBear.Plugin.IntroSkipper.FingerprinterTask.ExecuteAsync(IProgress`1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.ScheduledTasks.ScheduledTaskWorker.ExecuteInternal(TaskOptions options)

Log similar to #29

[Bug] Have to press skip button twice on iOS/iPadOS

Describe the bug
Using the intro skip button on the official iOS/iPadOS Jellyfin app works, but I have to tap it twice to skip the intro. Possibly caused by hover from this PR ConfusedPolarBear/jellyfin-web#91?

edit: This is probably more a bug more with the Expo Jellyfin app than this plugin. I noticed the PR mentioned above included @media (hover:hover) and (pointer:fine) so I tried it on Safari on my iPad and the button worked with a single tap like intended.

System information

  • Plugin version: 0.1.5.0
  • Jellyfin client: Official iOS/iPadOS Jellyfin app v1.5.0 (Native Video Player turned off)
  • Client OS: iOS/iPadOS 15.5
  • Jellyfin server version: 10.8
  • Jellyfin server installation method: ConfusedPolarBear docker image
  • Server OS: Debian 11

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.