Giter Club home page Giter Club logo

plexripper's Introduction

PlexRipper PlexRipper

Docker Pulls Docker Image Size (tag) Docker Image Size (tag) Lines of code GitHub issues

GitHub GitHub followers GitHub Repo stars

UNDER ACTIVE DEVELOPMENT - ALPHA STAGE => IT "WORKS", BUT NOT ALWAYS!

What is PlexRipper?

Tired of searching for media on different torrent websites or paying for Usenet server access? Well look no further! You can now use PlexRipper to download everything from the Plex servers you have access to and expand your collection that way!

PlexRipper is a cross-platform media downloader that indexes the Plex servers you have access to and allows you to download everything while adding it to your own Plex server.

Let others collect media for you and then just download everything!

Visit www.plexripper.rocks for more info!

JetBrains

Huge thank you to JetBrains JetBrains for supporting open source projects and providing us with free licenses of their great tools!

plexripper's People

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

plexripper's Issues

Does not appear to be able to connect to plex servers behind reverse proxies

When adding a server thats behind a reverse proxy, plexripper indicate it cant create SSL handshake, it then attempts to add a DNS entry for some IP:443, which also fails.

E.g if the plex server is behind an nginx reverse proxy and remote access is disabled, thus the server exposes itself via plex on https://somerandomdomain.com - Plexripper is unable to connect

If i in plexripper DB change the following values;
PlexServers
address -> https://somedomain.com
host -> somedomain.com

Then go to UI, pick the server and click "check server status" then plexripper indicate it successfully connects;
Request to https://somedomain/identity?X-Plex-Token=TOKEN was successful!

However since the server wasnt added through the "normal" process in plexripper, no libraries are detected or shown.

v0.9.0 RC3 (Dev) internal server error while trying to setup plex account

I get this when I click the "lookup account" button during account setup. If I can send any more pertinent info/logs, please let me know (dev container.)

Internal Server Error (500)
[
  {
    "reasons": []
  },
  {
    "reasons": []
  }
]

11:50:43 [Information] [PlexRipperHost.Setup] => Currently running on Linux

11:50:44 [Information] [Startup..ctor] => PlexRipper running in Production mode.

11:50:44 [Debug] [PlexRipperHost.Setup] => Setting up Autofac Containers

11:50:45 [Information] Default Quartz.NET properties loaded from embedded resource file

11:50:45 [Information] Initialized Scheduler Signaller of type: Quartz.Core.SchedulerSignalerImpl

11:50:45 [Information] Quartz Scheduler created

11:50:45 [Information] JobFactory set to: Autofac.Extras.Quartz.AutofacJobFactory

11:50:45 [Information] RAMJobStore initialized.

11:50:45 [Information] Scheduler meta-data: Quartz Scheduler (v3.4.0.0) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'Quartz.Core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'Quartz.Simpl.DefaultThreadPool' - with 10 threads.
  Using job-store 'Quartz.Simpl.RAMJobStore' - which does not support persistence. and is not clustered.


11:50:45 [Information] Quartz scheduler 'DefaultQuartzScheduler' initialized

11:50:45 [Information] Quartz scheduler version: 3.4.0.0

11:50:45 [Information] [Boot.WaitForStartAsync] => Initiating boot process

11:50:45 [Information] [ConfigManager.Setup] => Checking if "PlexRipperSettings.json" exists at "/Config"

11:50:45 [Information] [ConfigManager.Setup] => Config directory exists, will use "/Config"

11:50:45 [Information] [ConfigManager.LoadConfig] => Loading user config settings now.

11:50:45 [Information] [ConfigManager.LoadConfig] => UserSettings were loaded successfully!: 

11:50:45 [Information] [PlexRipperDatabaseService.SetupAsync] => Setting up the PlexRipper database

11:50:46 [Information] [PlexRipperDbContext.SetupAsync] => Attempting to migrate database

11:50:46 [Information] [PlexRipperDbContext.SetupAsync] => Database was successfully connected!

11:50:46 [Information] [PlexRipperDbContext.SetupAsync] => Database connected at: /Config/PlexRipperDB.db

11:50:46 [Information] [DownloadTracker.Setup] => Starting DownloadTrackerService

11:50:46 [Information] [FileMerger.ExecuteFileTasks] => Running FileTask executor

11:50:46 [Information] [SchedulerService.SetupAsync] => Starting Quartz Scheduler

11:50:46 [Information] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.

11:50:46 [Information] [Boot.WaitForStartAsync] => Finished Initiating boot process

11:50:46 [Information] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.

11:50:47 [Information] [Boot.OnStarted] => Boot.OnStarted has been called.

11:50:54 [Debug] [PlexAccountService.GetAllPlexAccountsAsync] => Returning all accounts

11:50:55 [Debug] [PlexAccountController.GetAllAccounts] => Returned 0 accounts

11:51:20 [Error] [PlexApiClient.GenerateResponseResult] => PlexApi Error: Error (BadRequest) on request to https://plex.tv/api/v2/users/signin - : 

11:51:20 [Error] [PlexApiClient.GenerateResponseResult] => : 

11:52:17 [Information] [ConfigManager.SaveConfig] => Saving user config settings now.

11:52:17 [Information] [ConfigManager.SaveConfig] => UserSettings were saved successfully!: 

11:52:27 [Information] [ConfigManager.SaveConfig] => Saving user config settings now.

11:52:27 [Information] [ConfigManager.SaveConfig] => UserSettings were saved successfully!: 

11:52:53 [Error] [PlexApiClient.GenerateResponseResult] => PlexApi Error: Error (BadRequest) on request to https://plex.tv/api/v2/users/signin - : 

11:52:53 [Error] [PlexApiClient.GenerateResponseResult] => : 

[Bug] - Incorrect file permissions are given to finished downloads

Example: "When your container brings the file in to my media folder for instance /plex/movies (does the same for tv.) it turns it in to root access only. Only the root member can make changes to this file. Only way to fix this is to run unraid's new permissions."

V0.9.0 (Stable) shows no libraries available

Sees my account/servers, but doesn't show any available libraries.

Click to show log


12:00:03 [Debug] [AddOrUpdatePlexServersCommandHandler.Handle] => PlexAccount MYACCOUNT already has an association with PlexServer: FRIEND ACCOUNT, updating authentication token now.

12:00:03 [Information] [AddOrUpdatePlexServersCommandHandler.Handle] => Removing PlexAccount associations with PlexServers now that are not accessible anymore

12:00:03 [Information] [PlexAccountService.SetupAccountAsync] => Account was setup successfully!: 

12:00:03 [Debug] [InspectPlexServersJob.Execute] => Executing job: InspectPlexServersJob for plexAccountId: 1

12:00:03 [Information] [PlexServerService.InspectPlexServers] => Inspecting 3 PlexServers for PlexAccount: MYACCOUNT

12:00:13 [Warning] [PlexApiClient.SendRequestAsync] => Waiting 1 seconds before retrying again.

12:00:13 [Debug] [SignalRService.SendServerInspectStatusProgress] => InspectServerProgress => PlexRipper.Application.Common.WebApi.InspectServerProgress

12:00:13 [Warning] [PlexApiClient.SendRequestAsync] => Waiting 1 seconds before retrying again.

12:00:13 [Debug] [SignalRService.SendServerInspectStatusProgress] => InspectServerProgress => PlexRipper.Application.Common.WebApi.InspectServerProgress

12:00:13 [Error] [PlexApiClient.SendRequestAsync] => Error Response URI:  - (0)

12:00:13 [Error] [PlexApiClient.SendRequestAsync] => Error Message: The request timed-out.

12:00:13 [Warning] [PlexApiClient.SendRequestAsync] => Waiting 1 seconds before retrying again.

12:00:13 [Error] [PlexApiClient.SendRequestAsync] => Error Response URI:  - (0)

12:00:13 [Debug] [SignalRService.SendServerInspectStatusProgress] => InspectServerProgress => PlexRipper.Application.Common.WebApi.InspectServerProgress

12:00:13 [Error] [PlexApiClient.SendRequestAsync] => Error Message: The request timed-out.

12:00:13 [Error] [PlexApiClient.SendRequestAsync] => Error Response URI:  - (0)

12:00:13 [Error] [PlexApiClient.SendRequestAsync] => Error Message: The request timed-out.

12:00:24 [Error] [PlexApiClient.GenerateResult] => PlexApi Error: Error on request to  (0) - : 

12:00:24 [Error] [PlexApiClient.GenerateResult] => PlexApi Error: Error on request to  (0) - : 

12:00:24 [Error] [PlexApiClient.GenerateResult] => : 

12:00:24 [Error] [PlexApiClient.GenerateResult] => : 

12:00:24 [Error] [PlexApiClient.GenerateResult] => StatusCode - 0: 

12:00:24 [Error] [PlexApiClient.GenerateResult] => PlexApi Error: Error on request to  (0) - : 

12:00:24 [Error] [PlexApiClient.GenerateResult] => StatusCode - 0: 

12:00:24 [Debug] [SignalRService.SendServerInspectStatusProgress] => InspectServerProgress => PlexRipper.Application.Common.WebApi.InspectServerProgress

12:00:24 [Debug] [SignalRService.SendServerInspectStatusProgress] => InspectServerProgress => PlexRipper.Application.Common.WebApi.InspectServerProgress

12:00:24 [Error] [PlexApiClient.GenerateResult] => : 

12:00:24 [Error] [PlexApiClient.GenerateResult] => StatusCode - 0: 

12:00:24 [Debug] [SignalRService.SendServerInspectStatusProgress] => InspectServerProgress => PlexRipper.Application.Common.WebApi.InspectServerProgress

12:00:24 [Error] Job SyncGroup.SetupAccountJobKey threw an unhandled Exception: 
System.Collections.Generic.KeyNotFoundException: The given key 'StatusCode' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at PlexRipper.PlexApi.Api.PlexApi.GetServerStatusAsync(String authToken, String serverBaseUrl, Action`1 action) in /src/src/PlexApi/Api/PlexApi.cs:line 88
   at PlexRipper.Application.PlexServers.PlexServerService.CheckPlexServerStatusAsync(PlexServer plexServer, Int32 plexAccountId, Boolean trimEntries, Action`1 progressAction) in /src/src/Application/PlexServers/PlexServerService.cs:line 336
   at PlexRipper.Application.PlexServers.PlexServerService.<>c__DisplayClass12_0.<<InspectPlexServers>b__0>d.MoveNext() in /src/src/Application/PlexServers/PlexServerService.cs:line 248
--- End of stack trace from previous location ---
   at PlexRipper.Application.PlexServers.PlexServerService.InspectPlexServers(Int32 plexAccountId) in /src/src/Application/PlexServers/PlexServerService.cs:line 301
   at PlexRipper.Application.InspectPlexServersJob.Execute(IJobExecutionContext context) in /src/src/Application/Scheduler/Jobs/InspectPlexServersJob.cs:line 22
   at Quartz.Core.JobRunShell.Run(CancellationToken cancellationToken)

12:00:24 [Error] Job SyncGroup.SetupAccountJobKey threw an exception.
Quartz.SchedulerException: Job threw an unhandled exception.
 ---> System.Collections.Generic.KeyNotFoundException: The given key 'StatusCode' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at PlexRipper.PlexApi.Api.PlexApi.GetServerStatusAsync(String authToken, String serverBaseUrl, Action`1 action) in /src/src/PlexApi/Api/PlexApi.cs:line 88
   at PlexRipper.Application.PlexServers.PlexServerService.CheckPlexServerStatusAsync(PlexServer plexServer, Int32 plexAccountId, Boolean trimEntries, Action`1 progressAction) in /src/src/Application/PlexServers/PlexServerService.cs:line 336
   at PlexRipper.Application.PlexServers.PlexServerService.<>c__DisplayClass12_0.<<InspectPlexServers>b__0>d.MoveNext() in /src/src/Application/PlexServers/PlexServerService.cs:line 248
--- End of stack trace from previous location ---
   at PlexRipper.Application.PlexServers.PlexServerService.InspectPlexServers(Int32 plexAccountId) in /src/src/Application/PlexServers/PlexServerService.cs:line 301
   at PlexRipper.Application.InspectPlexServersJob.Execute(IJobExecutionContext context) in /src/src/Application/Scheduler/Jobs/InspectPlexServersJob.cs:line 22
   at Quartz.Core.JobRunShell.Run(CancellationToken cancellationToken)
   --- End of inner exception stack trace --- [See nested exception: System.Collections.Generic.KeyNotFoundException: The given key 'StatusCode' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at PlexRipper.PlexApi.Api.PlexApi.GetServerStatusAsync(String authToken, String serverBaseUrl, Action`1 action) in /src/src/PlexApi/Api/PlexApi.cs:line 88
   at PlexRipper.Application.PlexServers.PlexServerService.CheckPlexServerStatusAsync(PlexServer plexServer, Int32 plexAccountId, Boolean trimEntries, Action`1 progressAction) in /src/src/Application/PlexServers/PlexServerService.cs:line 336
   at PlexRipper.Application.PlexServers.PlexServerService.<>c__DisplayClass12_0.<<InspectPlexServers>b__0>d.MoveNext() in /src/src/Application/PlexServers/PlexServerService.cs:line 248
--- End of stack trace from previous location ---
   at PlexRipper.Application.PlexServers.PlexServerService.InspectPlexServers(Int32 plexAccountId) in /src/src/Application/PlexServers/PlexServerService.cs:line 301
   at PlexRipper.Application.InspectPlexServersJob.Execute(IJobExecutionContext context) in /src/src/Application/Scheduler/Jobs/InspectPlexServersJob.cs:line 22
   at Quartz.Core.JobRunShell.Run(CancellationToken cancellationToken)]

2FA not working.

When adding a Plex account from a brand new instance I get the following:

When I use my normal password I get this error and it never asks for 2FA code.

11:17:14 [Debug] [PlexApi.PlexSignInAsync] => Requesting PlexToken for account *

11:17:14 [Debug] [PlexApiClient.SendRequestAsync] => Sending request to: https://plex.tv/api/v2/users/signin

11:17:15 [Error] [RestSharpExtensions.GenerateResponseResult] => Request to https://plex.tv/api/v2/users/signin failed with status code: 0 - : 

11:17:15 [Error] [RestSharpExtensions.GenerateResponseResult] => StatusCode - 0: 

11:17:15 [Error] [RestSharpExtensions.GenerateResponseResult] => ErrorMessage - No error message found: 

11:17:15 [Error] [RestSharpExtensions.GenerateResponseResult] => {"errors":[{"code":1029,"message":"Please enter the verification code","status":401}]}: 

When I put in my password+2fa code in the password field It then asks me for a 2FA code and I get an email saying new device logged in from plex. but when I put in the 2FA code on the gui I get this:

Before 2FA code entered:

11:17:26 [Debug] [PlexApi.PlexSignInAsync] => Requesting PlexToken for account *

11:17:26 [Debug] [PlexApiClient.SendRequestAsync] => Sending request to: https://plex.tv/api/v2/users/signin

11:17:27 [Debug] [RestSharpExtensions.GenerateResponseResult] => Created: 

11:17:27 [Debug] [RestSharpExtensions.GenerateResponseResult] => StatusCode - 201: 

11:17:27 [Information] [PlexApiService.PlexSignInAsync] => Successfully retrieved the PlexAccount data for user CB from the PlexApi

11:17:27 [Debug] [PlexAccountService.ValidatePlexAccountAsync] => The PlexAccount with displayName CB has been validated

After 2FA code is entered in web gui:

11:17:32 [Debug] [PlexApi.PlexSignInAsync] => Requesting PlexToken for account *

11:17:32 [Debug] [PlexApiClient.SendRequestAsync] => Sending request to: https://plex.tv/api/v2/users/signin

11:17:32 [Error] [RestSharpExtensions.GenerateResponseResult] => Request to https://plex.tv/api/v2/users/signin failed with status code: 0 - : 

11:17:32 [Error] [RestSharpExtensions.GenerateResponseResult] => StatusCode - 0: 

11:17:32 [Error] [RestSharpExtensions.GenerateResponseResult] => ErrorMessage - No error message found: 

11:17:32 [Error] [RestSharpExtensions.GenerateResponseResult] => {"errors":[{"code":1031,"message":"User could not be authenticated. This IP appears to be having trouble signing in to an account (detected repeated failures)","status":401}]}: 

[FEATURE] - Add option to mass export download url's for use in third party downloaders

so taking a look at "https://github.com/PlexRipper" i can see in the description after the word "everything" it has a "*" but i dont think think it is explained as to what that means, however the reason am making this post is to find out if the is a option to download everything not because am trying to abuse or anything but because i want to create a starting point from a friend plex server and then continue with radarr and sonarr, thank you in advance.

auth plex w/ cloudflare tunnel option

I don't know how much work it is, but as my plex is under cloudflare (using cloudflared package for tunneling) and so it cannot connect directly to the public IP. Any way to get around that?

EDIT: perhaps via URL would work?

Memory leak

I left this running on my synology for a few days. My synology started throwing errors and the logs show plexripper crashed. Once this happened. My synology was normal again. I know this because of several log messages on my device:

Docker container plexripper-plexripper stopped unexpectedly. Please select plexripper-plexripper on the Container page, click the Details button, and go to the Log tab for details.

Error | System | 12/06/2022 09:30:47 am | SYSTEM | [dotnet] stopped running because the system is out of memory.

Event detected at
2022/10/17 12:01
 
Reason and effect
Some services such as SAN Manager or Snapshot Replication may be affected if the storage capacity runs out.

Download runs super fast. Resulting file is the right size, but is empty/contains no data

I am running PlexRipper V0.8.7.

Using the UI I selected a movie and went to download it. It was queued. The UI reported a download speed in excess of 300 MB/s - my internet connection caps out at 200 Mbps (MB/s and Mbps are noted as intentional differences). The resulting file does not open in any movie player and reports as corrupted, but it is the right size.

This doesn't happen all the time. It seems to happen with larger files (movies) and less so with smaller files (TV show episodes).

Here is an excerpt from the debug logs.

17:37:07 [Debug] [PlexDownloadTaskFactory.GenerateMovieDownloadTasksAsync] => Creating 1 movie download tasks.

17:37:07 [Debug] [PlexDownloadTaskFactory.GenerateMovieDownloadTasksAsync] => Created download task(s) for movie: SOURCEFILETITLE

17:37:07 [Debug] [DownloadManager.AddToDownloadQueueAsync] => Attempt to add 1 DownloadTasks

17:37:07 [Debug] [DownloadManager.ValidateDownloadTasks] => Checking DownloadTask 1 of 1 with title SOURCEFILETITLE

17:37:07 [Information] [DownloadManager.ValidateDownloadTasks] => DownloadTask 1 of 1 with title SOURCEFILETITLE was valid

17:37:07 [Debug] [DownloadManager.AddToDownloadQueueAsync] => Successfully added all 1 DownloadTasks

17:37:07 [Debug] [DownloadManager.CheckDownloadQueue] => Checking for download tasks which can be processed.

17:37:07 [Information] [DownloadQueue.ExecuteDownloadQueue] => Starting the check of 1 PlexServers.

17:37:07 [Debug] [DownloadManager.UpdateDownloadTaskAsync] => [Status: Queued] - (5 - 0 ) + (6 - 0 ) + (7 - 0 ) + (8 - 0 ) = ( - 0)

17:37:07 [Debug] [DownloadQueue.ExecuteDownloadQueue] => Starting the next Queued downloadTask with id 2 - SOURCEFILETITLE for server SOURCE_SERVER

17:37:07 [Debug] [PlexDownloadClient.Start] => Start downloading SOURCEFILEPATH.avi from IP:PORT/libary/parts/ID/ID/file.avi?X-Plex_Token=TOKENHERE

17:37:07 [Debug] [DownloadWorker.Start] => Download worker 5 start for SOURCEFILEPATH.part1.avi

17:37:07 [Debug] [DownloadWorker.SetDownloadWorkerTaskChanged] => Download worker 5 with SOURCEFILEPATH.part1.avi changed status to Downloading

17:37:07 [Debug] [DownloadWorker.Start] => Download worker 6 start for SOURCEFILEPATH.part2.avi

17:37:07 [Debug] [DownloadWorker.SetDownloadWorkerTaskChanged] => Download worker 6 with SOURCEFILEPATH.part2.avi changed status to Downloading

17:37:07 [Debug] [DownloadWorker.Start] => Download worker 7 start for SOURCEFILEPATH.part3.avi

17:37:07 [Debug] [DownloadWorker.SetDownloadWorkerTaskChanged] => Download worker 7 with SOURCEFILEPATH.part3.avi changed status to Downloading

17:37:07 [Debug] [DownloadWorker.Start] => Download worker 8 start for SOURCEFILEPATH.part4.avi

17:37:07 [Debug] [DownloadWorker.SetDownloadWorkerTaskChanged] => Download worker 8 with SOURCEFILEPATH.part4.avi changed status to Downloading

17:37:07 [Debug] [DownloadWorker.SetDownloadWorkerTaskChanged] => Download worker 5 with SOURCEFILEPATH.part1.avi changed status to Completed

17:37:07 [Debug] [DownloadWorker.SetDownloadWorkerTaskChanged] => Download worker 8 with SOURCEFILEPATH.part4.avi changed status to Completed

17:37:07 [Debug] [DownloadWorker.SetDownloadWorkerTaskChanged] => Download worker 6 with SOURCEFILEPATH.part2.avi changed status to Completed

17:37:07 [Debug] [DownloadWorker.SetDownloadWorkerTaskChanged] => Download worker 7 with SOURCEFILEPATH.part3.avi changed status to Completed

17:37:08 [Debug] [DownloadManager.UpdateDownloadTaskAsync] => [Status: Completed] - (5 - 0 ) + (6 - 0 ) + (7 - 0 ) + (8 - 0 ) = ( - 0)

17:37:08 [Debug] [DownloadManager.UpdateDownloadTaskAsync] => [Status: Merging] - (5 - 0 ) + (6 - 0 ) + (7 - 0 ) + (8 - 0 ) = ( - 0)

17:37:08 [Debug] [FileMerger.AddFileTaskFromDownloadTask] => Adding DownloadTask SOURCEFILETITLE to a FileTask to be merged

17:37:08 [Debug] [DownloadManager.CleanUpDownloadClient] => Cleaning-up downloadClient with id 2

17:37:08 [Debug] [PlexDownloadClient.ClearDownloadWorkers] => DownloadWorkers have been disposed for /downloads/SOURCEFILEPATH

17:37:08 [Debug] [DownloadManager.CleanUpDownloadClient] => Cleaned-up PlexDownloadClient with id 2 from the DownloadManager

17:37:08 [Debug] [FileMerger.ExecuteFileTasks] => Executing FileTask 2

17:37:08 [Information] [DownloadManager.OnDownloadFileCompleted] => The download of SOURCEFILETITLE has completed!

17:37:08 [Debug] [DownloadManager.CheckDownloadQueue] => Checking for download tasks which can be processed.

17:37:08 [Debug] [FileMerger.ExecuteFileTasks] => Combining 4 into a single file

17:37:08 [Information] [DownloadQueue.ExecuteDownloadQueue] => Starting the check of 1 PlexServers.

17:37:08 [Information] [DownloadQueue.ExecuteDownloadQueue] => There are no available downloadTasks remaining for PlexServer: SOURCE_SERVER

17:37:09 [Debug] [StreamExtensions.CopyMultipleToAsync] => The file at /downloads/SOURCEFILEPATH.part1.avi has been combined into

17:37:09 [Debug] [DownloadManager.OnFileMergeProgress] => Merge Progress: 469153280 / 1551783936 - 30.23 - 446.75 MB/s

17:37:10 [Debug] [StreamExtensions.CopyMultipleToAsync] => The file at /downloads/SOURCEFILEPATH.part2.avi has been combined into

17:37:10 [Debug] [DownloadManager.OnFileMergeProgress] => Merge Progress: 809982976 / 1551783936 - 52.2 - 387.07 MB/s

17:37:11 [Debug] [StreamExtensions.CopyMultipleToAsync] => The file at /downloads/SOURCEFILEPATH.part3.avi has been combined into

17:37:11 [Debug] [DownloadManager.OnFileMergeProgress] => Merge Progress: 1214153216 / 1551783936 - 78.24 - 385.48 MB/s

17:37:12 [Debug] [StreamExtensions.CopyMultipleToAsync] => The file at /downloads/SOURCEFILEPATH.part4.avi has been combined into

17:37:12 [Debug] [DownloadManager.OnFileMergeProgress] => Merge Progress: 1551783936 / 1551783936 - 100 - 369.45 MB/s

17:37:12 [Debug] [DownloadManager.UpdateDownloadTaskAsync] => [Status: Completed] - (5 - 0 ) + (6 - 0 ) + (7 - 0 ) + (8 - 0 ) = ( - 0)

17:37:12 [Information] [FileMerger.ExecuteFileTasks] => Finished combining 4 files into SOURCEFILEPATH.avi

17:37:53 [Information] [UserSettings.Save] => Saving UserSettings now.

17:37:53 [Information] [UserSettings.Save] => UserSettings were saved successfully!: 

First setup redirects to setup screen after finishing

The error I get:

23:09:49 [Debug] [PlexAccountService.GetAllPlexAccountsAsync] => Returning all accounts                                              
                                                                                                                                     
23:09:49 [Debug] [PlexAccountController.GetAllAccounts] => Returned 1 accounts                                                       
                                                                                                                                     
23:09:52 [Error] [RestSharpExtensions.GenerateResponseResult] => Request to http://IPHERE/identity failed with status code: 0
 - The request was canceled due to the configured HttpClient.Timeout of 10 seconds elapsing.:                                        
                                                                                                                                     
23:09:52 [Error] [RestSharpExtensions.GenerateResponseResult] => StatusCode - 0:                                                     
                                                                                                                                     
23:09:52 [Error] [RestSharpExtensions.GenerateResponseResult] => ErrorMessage - The request was canceled due to the configured HttpCl
ient.Timeout of 10 seconds elapsing.:                                                                                                
                                                                                                                                     
23:09:52 [Error] [RestSharpExtensions.GenerateResponseResult] => :                                                                   
                                                                                                                                     
23:09:52 [Debug] [CreatePlexServerStatusCommandHandler.Handle] => Creating a new PlexServerStatus in the DB                          
                                                                                                                                     
23:09:52 [Warning] [PlexServerService.InspectPlexServer] => Server DNS Fix did not help with server RadMatt - http://IPHERE:8
0                                                                                                                                    
                                                                                                                                     
23:09:52 [Debug] [SignalRService.SendServerInspectStatusProgress] => InspectServerProgress => PlexRipper.Application.InspectServerPro
gress                                                                                                                                
                                                                                                                                     
23:09:55 [Debug] [PlexAccountService.GetAllPlexAccountsAsync] => Returning all accounts                                              
                                                                                                                                     
23:09:55 [Debug] [PlexAccountController.GetAllAccounts] => Returned 1 accounts

Video: https://i.imgur.com/akbAsbl.mp4

It looks like it's trying to connect to a server and not able to, so it's staying on the setup screen for some reason.

Error while opening library

Hi,

I am using plexripper and when I try to open a library about tv shows it says "Refreshing library" and stops at 25%. It then shows an error popup screen. message: "Failed to retrieve episodes for library with key 2"

02:00:46 [Warning] [PlexApiClient.SendRequestAsync] => Waiting 1 seconds before retrying again.
02:00:46 [Error] [PlexApiClient.SendRequestAsync] => Error Response URI:  - (0)
02:00:46 [Error] [PlexApiClient.SendRequestAsync] => Error Message: There is an error in XML document (1, 2).
02:00:48 [Warning] [PlexApiClient.SendRequestAsync] => Waiting 2 seconds before retrying again.
02:00:48 [Error] [PlexApiClient.SendRequestAsync] => Error Response URI:  - (0)
02:00:48 [Error] [PlexApiClient.SendRequestAsync] => Error Message: There is an error in XML document (1, 2).
02:00:50 [Error] [PlexApiClient.GenerateResult] => PlexApi Error: Error on request to  (0) - : 
02:00:50 [Error] [PlexApiClient.GenerateResult] => : 
02:00:50 [Error] [PlexApiClient.GenerateResult] => StatusCode - 0: 
02:00:50 [Error] [PlexServerService.SyncPlexServer] => Some libraries failed to sync in PlexServer: vmPlex: 
02:00:50 [Error] [PlexServerService.SyncPlexServer] => --Failed to retrieve episodes for library with key 2: 
02:00:50 [Error] [PlexServerService.SyncPlexServers] => Some libraries failed to sync: 
02:00:50 [Error] [PlexServerService.SyncPlexServers] => --Some libraries failed to sync in PlexServer: vmPlex: 
02:00:50 [Error] [PlexServerService.SyncPlexServers] => ----Failed to retrieve episodes for library with key 2: 

Can anybody tell me what's going wrong or how to troubleshoot this?

Slow speeds?

I am getting 5.39 KB/s when trying to download a 327 MB file. Is this intentional or is there something I need to do to unlock faster speeds? The server it's coming from is capable of at least 50 Mb/s up.

validate to plex account error

Hello!
The first congratz for the update!

I see error when I try login with my user.

Add log console.
image
The user and password is writed in the form.

Thanks so much!

Unable to download via the interface

Very cool concept!

I tried several times to download a movie from my Friend's plex server.
This friend has Fiber internet (1GB up/down) i thought it was weird that the movie was only downloading at around 2kb/s.
The download eventually errored out.
I refreshed everything and restarted the download.. it seems to stay stuck in "initialize" for a little bit but eventually starts, but still very slow.

However, to my surprise, when I clicked on the details icon next to the movie (under actions) it shows me the download URL along with a button to click. With this. I was able to download the entire 8Gb file in about 30 seconds.

So it seems that it can work, but via the GUI there's something wrong.
my first thought was the destination folders, but I double-checked them and they seem right.
Where are the logs for this app? I'm sure I can find useful information there.

For PlexServer owners - Preventing PlexRipper abuse discussion

I have gotten several questions from Plex server owners about how to counteract the use of PlexRipper and or at least prevent abuse. To be honest, I have no definite answer and as the creator of PlexRipper I'm also quite biased in wanting to make PlexRipper always work.

However, there should definitely be a balance. I don't condone abuse and support the right of Plex server owners to kick anyone who uses PlexRipper in a way they don't approve of. My answer below is what I send someone who asked about this but I would really appreciate any input, concerns or ideas.

Question:

I see you're Dutch :) I'm in Den Haag right now.

My team has noticed your project and while its exciting work we have concerns that it'll burn through a lot of bandwidth and probably impact the plex server if its doing tons and tons of calls getting the guids.

One of the bad things I see is that the plex server owners don't have a way of preventing abuse. Say my plex is running on a VPS with a 2TB traffic allocation, someone comes in with your app and pulls those 2TBs in short order and now I'm stuck with high traffic overages or that it's querying of the database tanks plex for everyone else. I can't watch shows because my 'friend' is sucking down my content.

I don't want to stop people from downloading but I do want to stop people from abusing and impacting me either watching or financially if I have to pay for the traffic.

Could we discuss ways to prevent the abuse? I was thinking we might have to come up with some way to filter it by the headers. If you added a 'plexripper' header then we can filter that out or we can try to rate limit it.

As I said, I'm not opposed to people downloading content but I am opposed to it impacting my own personal usage or other friends usage and if I get a bill for 200 euros because my friend decided to download all the 4K content on my server and blow my transfer limits out of the water.

Would you be willing to come up with a way for the plex admins to control its usage?

Thanks!

End of Question

Answer:
Thank you for your very fair and well put e-mail!

This is quite a complicated issue due to multiple factors in play:

  • PlexRipper is open source, so any limitations I put in place can be removed just as easily. Someone could make a limitations free fork of PlexRipper, which would make putting it in place in the first place almost useless. And having spent nearly 2000 hours over a period of almost 2 years developing this, I would not like to see alternative versions pop-up.

  • Although I would like to be a neutral arbiter between PlexRipper users and PSO's (Plex Server Owners), since I'm both, I do tend to lean towards PlexRipper reaching its full potential, which in turn might negatively impact PSO's. My feeling is that most don't want to be a download server for users, which is their right, or will soon implement tactics to just auto ban any account that has a PlexRipper header.

  • The ultimate power does lie with PSO's, PlexRipper can only download if it has access granted by a PSO. If a user commits abuse, then he can be banned from the server with no way in. Which is a good thing and I would also not approve of PlexRipper becoming a hacking tool to gain unauthorized access by exploiting vulnerabilities.

Having said that, I also strongly oppose abuse which would lead to huge bills for Plex Server owners. Most of us do it as a hobby, which is already expensive enough and abuse would understandably suck all the fun out of it.

These are my ideas which I think are reasonable:

  • Functionality to limit the download speed, which is per server configurable by the user. The default value could be 8mb/s, or however much it is to stream 1080p/4k content as not to suck up all the bandwidth. This is a high priority and I hope to have this in one of the next releases.

  • Plex server owners could place a config file somewhere on their server, which is retrieved by PlexRipper and would contain the abuse limitations. Things like, maximum download speed, which times of day to preferably download, maximum allotted download size a day, or just straight up "no downloading" etc. This config would be presented to the user to either automatically configure PlexRipper based on those settings or the user could choose to ignore that config. However, if the user chooses to ignore that config then the Plex server owner could receive a notification that this particular user is ignoring the config. The Plex server owner could then decide to ban that user. Again, this could be easily removed by anyone due to the open source nature of PlexRipper.

  • Retrieving all the metadata is I think one of the biggest database performance costs. This would ideally be only done once, after which PlexRipper will check once a day if there is any new content which is a very small request.

  • Caching of the thumbnails and banners is also one of the ideas I had, any image requested from the Plex server is stored locally and retrieved from there. This is a double win, less traffic for PSO's and faster loading for PlexRipper users at the cost of storage space for the user.

To answer your last question, I am absolutely willing to help out where I can and make it fair for PSO's as well.

I also think this is an important discussion to be had, so if you're willing you could copy you initial mail in the GitHub issues. I will respond with my answer and pin the thread to see what others think.

The above are just some of my ideas and any feedback or own ideas are of course very welcome!

End of answer

What do you guys think?

[Bug] - Slow download speeds compared to direct downloads

It has been reported several times that certain servers have a much slower download speed when using PlexRipper, compared to direct downloading through a browser. I have been able to reproduce this so I will investigate this, I hope to have a fix in the next release as this is a high priority one.

image

Workaround:

Downloading something will show a "graph icon" next to it on the download page. Click it and it will open some details which include a direct download link:

image

Cant see finish setup button

Half the interface is cut off and there is no way to scroll

Google Chrome
MacBook Pro 13 inch 2011

Regular
PlexRipper

Zoom at 80%
PlexRipper (1)

sort the list or decide which values to see

Hello

  1. I saw already that someone requested the function to sort by name, year, size, etc...
    would it be also possible to add a function that a user can decide which value they want to see.
    for example:
    show me only name and year, and hide size, added date, updated date.

  2. Add IMDB-ID for movies

  3. Add TBDV-ID for Series

  4. Add the function to export the list as excel or *.txt file.

Deploying a new setup button do not work

When you create a new setup and try to click the buttons they do not do anything but an error is shown in the browser console

TypeError: Cannot read properties of undefined (reading 'replace')

once you have gone past the initial setup stage then clicking the options in the left menu like paths, ui, advanced this does not do anything apart from change the path nothing is displayed in the right hand pane

Y NO UPDATES!?!?!?

TL;DR; I have been very busy but I am working on the v0.9.0 version (extra 24.000 lines of code so far) => See here

Hi there,

So for those asking "why no updates", this is what's been happening. I've had a big renovation for 3 weeks but in between I have been continuing to work on version 0.9.0 which I hope to release "soon". Doing several smaller updates to fix many things was not really possible so it will be a big update with many improvements!

Please note, unfortunately, I have a full-time job so unless someone can donate 1.000.000 in crypto I'm forced to work instead of spending all my time on developing PlexRipper, which I honestly would rather do.

Sneak peak of features:

  • Complete rewrite and refactor of the download process, this will fix several major issues
    • Certain downloads being very slow due to a certain bug
    • Downloaded files having root permissions
    • The download progress shown not being accurate
    • Multi-part media downloading
    • A download speed limit configurable per server

It's tempting to include more features and fixes in this update but those will be worked on after this. Namely fixing connection and syncing issues with Plex servers.

I can guarantee that I have not abandoned PlexRipper and I am still working on it in my spare time!

Keep your feedback coming, I am reading and tracking everything!

Error Synching/Refreshing huge Libraries - Internal Server Error 500

Large libraries do not appear to refresh or become visible. Several smaller libraries on the same server work but the primary libraries seem to be timing out from reviewing the logs. This results in an internal server error popup message on failure.

I tried to manually synch from the server commands menu and was receiving the same error.

LOGS:
20:14:45 [Debug] [PlexApiClient.GenerateResult] => Request to http://X:12400/library/sections?X-Plex-Token=TOKEN (OK) was successful!:

20:14:46 [Debug] [PlexApiClient.GenerateResult] => Ok successful:

20:14:46 [Debug] [PlexApiClient.GenerateResult] => StatusCode - 200:

20:14:46 [Debug] [PlexApiClient.GenerateResult] => Request to http://X:12400/library/sections/7/all?X-Plex-Token=TOKEN (OK) was successful!:

20:14:50 [Debug] [CreateUpdateOrDeletePlexMoviesCommandHandler.Handle] => Starting adding or updating movies in library: 4K Movies DolbyVision

20:14:52 [Debug] [PlexApi.GetLibrarySectionsAsync] => GetLibrarySectionsAsync => http://X:12400/library/sections

20:14:52 [Debug] [PlexApiClient.GenerateResult] => Ok successful:

20:14:52 [Debug] [PlexApiClient.GenerateResult] => StatusCode - 200:

20:14:52 [Debug] [PlexApiClient.GenerateResult] => Request to http://X:12400/library/sections?X-Plex-Token=TOKEN (OK) was successful!:

20:15:02 [Warning] [PlexApiClient.SendRequestAsync] => Waiting 1 seconds before retrying again.

20:15:02 [Error] [PlexApiClient.SendRequestAsync] => Error Response URI: - (0)

20:15:02 [Error] [PlexApiClient.SendRequestAsync] => Error Message: The request timed-out.

20:15:13 [Warning] [PlexApiClient.SendRequestAsync] => Waiting 2 seconds before retrying again.

20:15:13 [Error] [PlexApiClient.SendRequestAsync] => Error Response URI: - (0)

20:15:13 [Error] [PlexApiClient.SendRequestAsync] => Error Message: The request timed-out.

20:15:25 [Error] [PlexApiClient.GenerateResult] => PlexApi Error: Error on request to (0) - :

20:15:25 [Error] [PlexApiClient.GenerateResult] => :

20:15:25 [Error] [PlexApiClient.GenerateResult] => StatusCode - 0:

[FEATURE] - Be able to choose which version of the media to download

When looking at titles, most have various file versions per title. The highest bitrate versions are usually version 2 or 3 of a title but I can't figure out how to choose from them. It always defaults to the first file version that is bit starved and doesn't download other HQ versions. How do I choose which file version of a title to download?

Downloading episodes out of a season is buggy

  1. Went to a show
  2. Selected episode 1 of a season --> downloads fine
  3. Go back to show, pick another episode out of the same season, hit download --> The below happens:
                                                                                                                                     
19:53:38 [Debug] [PlexDownloadService.DownloadMediaAsync] => Attempting to add download task orders: System.Collections.Generic.List`
1[PlexRipper.Application.DownloadMediaDTO]                                                                                           
                                                                                                                                     
19:53:39 [Debug] [DownloadTaskValidator.ValidateDownloadTasks] => Validating DownloadTask 1 of 1 with title Rick and Morty           
                                                                                                                                     
19:53:39 [Information] [DownloadTaskValidator.ValidateDownloadTasks] => DownloadTask 1 of 1 with title Rick and Morty was valid      
  1. Went into Downloads, selected the episode that was completed, and hit CLEAR COMPLETED.
  2. Attempted to download 2 episodes out of the same season again, they queued up but DID NOT start until I hit the Play button next to the episode.
  3. 1 EP downloaded, the other errored:

image

20:03:09 [Error] [DownloadWorker.DownloadProcessAsync] => The response ended prematurely, with at least 84734207 additional bytes exp
ected.:                                                                                                                              
                                                                                                                                     
20:03:09 [Error] [DownloadWorker.DownloadProcessAsync] => Exception:                                                                 
                                                                                                                                     
20:03:09 [Error] [DownloadWorker.DownloadProcessAsync] => --The response ended prematurely, with at least 84734207 additional bytes e
xpected. - System.Net.Http:                                                                                                          
                                                                                                                                     
20:03:09 [Error] [DownloadWorker.SendDownloadWorkerError] => Download worker 7 with Rick and Morty - S06E02 - Rick - A Mort Well Live
d WEBRip-720p.part3.mkv had an error! 
20:03:13 [Error] [DownloadWorker.DownloadProcessAsync] => The response ended prematurely, with at least 82149188 additional bytes exp
ected.:                                                                                                                              
                                                                                                                                     
20:03:13 [Error] [DownloadWorker.DownloadProcessAsync] => Exception:                                                                 
                                                                                                                                     
20:03:13 [Error] [DownloadWorker.DownloadProcessAsync] => --The response ended prematurely, with at least 82149188 additional bytes e
xpected. - System.Net.Http:                                                                                                          
                                                                                                                                     
20:03:13 [Error] [DownloadWorker.SendDownloadWorkerError] => Download worker 6 with Rick and Morty - S06E02 - Rick - A Mort Well Live
d WEBRip-720p.part2.mkv had an error!                                                                                                
                                                                                                                                     
20:03:13 [Error] [DownloadWorker.DownloadProcessAsync] => The response ended prematurely, with at least 82390410 additional bytes exp
ected.:                                                                                                                              
                                                                                                                                     
20:03:13 [Error] [DownloadWorker.DownloadProcessAsync] => Exception:                                                                 
                                                                                                                                     
20:03:13 [Error] [DownloadWorker.DownloadProcessAsync] => --The response ended prematurely, with at least 82390410 additional bytes e
xpected. - System.Net.Http:
0:14:54 [Debug] [DownloadSubscriptions.OnFileMergeCompleted] => FileTask has completed                                              
                                                                                                                                     
20:14:54 [Error] [DownloadSubscriptions.OnFileMergeCompleted] => Fluent Validation Pipeline Failed.:                                 
                                                                                                                                     
20:14:54 [Error] [DownloadSubscriptions.OnFileMergeCompleted] => StatusCode - 400:                                                   
                                                                                                                                     
20:14:54 [Error] [DownloadSubscriptions.OnFileMergeCompleted] => --'Id' must be greater than '0'.:                                   
                                                                                                                                     
20:14:55 [Debug] [DownloadSubscriptions.OnFileMergeProgress] => Merge Progress: 351192411 / 351192411 - 100 - 334.92 MB/s            
                                                                                                                                     
20:16:04 [Debug] [PlexDownloadService.DownloadMediaAsync] => Attempting to add download task orders: System.Collections.Generic.List`
1[PlexRipper.Application.DownloadMediaDTO]                                                                                           
                                                                                                                                     
20:16:04 [Debug] [DownloadTaskValidator.ValidateDownloadTasks] => Validating DownloadTask 1 of 1 with title Rick and Morty           
                                                                                                                                     
20:16:04 [Information] [DownloadTaskValidator.ValidateDownloadTasks] => DownloadTask 1 of 1 with title Rick and Morty was valid      
                                                                                                                                     
20:16:29 [Debug] [PlexAccountService.GetAllPlexAccountsAsync] => Returning all accounts                                              
                                                                                                                                     
20:16:29 [Debug] [PlexAccountController.GetAllAccounts] => Returned 1 accounts                                                       
                                                                                                                                     
20:18:14 [Debug] [DownloadProgressScheduler.TrackDownloadProgress] => Download progress job has been sending out the same 200 updates
, will stop now.                                                                                                                     
                                                                                                                                     
20:18:14 [Information] [DownloadProgressScheduler.StopDownloadProgressJob] => DownloadProgressJob for PlexServer 3 was stopped       

TOOLTIPS

Tooltips when you hover over icons would be a big help. For instance, on the downloads tab, I have some downloads going and there is an icon that has three vertical bars in a box, and I want to click it, but I don't want it to cancel the downloads. I feel like its a status icon, but, not sure. Hence, tooltips when you hover and icon would be nice.

refreshing library stuck on 25%

Any ideas why it gets stuck on refreshing a TV Show library, stuck at 25% and then never moves further.
Try Movies and it gets info easily enough.

Selecting "Confirm" on the download dialog does not dismiss the dialog

I am running PlexRipper V0.8.7.

I browse to a server, find something I want to download, and select it. The "Are you sure" dialog appears, and I have an option to "Cancel" and "Confirm." When I select Confirm, the "Downloads" on the left side menu updates to show a new download is in progress... but the dialog stays up. I have to click outside of the dialog to dismiss it.

Error: Not enough space available

I just updated to the latest non development version on Unraid. Downloads are broken with a not enough disk space available error in the log. There is clearly enough space and I can copy other, much larger files to that directory too.

500 internal server error

Getting 500 internal server error when attempting to check server status or sync libraries. The IP and port are both valid from what's listed in Remote Access page on Plex.

Originally I had Secure Connection set to Required and Strict TLS enabled, however PlexRipper is still failing even after setting Secure Connection to Preferred and disabling Strict TLS and restarting Plex.

Running the latest version of PlexRipper as of today (image ID 1785072563, v0.8.7) and the latest version of Plex (1.25.1.5286). This is running in Docker on Unraid 6.9.2. A friend's server that I don't manage is on 1.24.5.5173 and also has the same issue, so I feel like it's likely something to do with my configuration and not a Plex update.

Any idea what could cause this or tips on where I should start troubleshooting?

plex_ripper_issue_cropped_stripped

Release of v0.9.0!

Hi guys,

Thank you very much for your patience!

After a ridiculous amount of work over the past month, after already a year of no releases but a lot of work behind the scenes, PlexRipper is finally ready for a new release! This fixes many things, including the slow downloads and the login issues. For a “full” list of changes and fixes, please see the Release

This massive release (#158) has almost 350 commits and almost 120.000 lines of code changed!

Many things have changed behind the scenes and although several features have been added, the main focus was bringing stability to PlexRipper. A lot of code rewriting went on but above all, many, many automatic tests to ensure stability. From here on I can finally make incremental updates and add more features due to finally having a stable code infrastructure, this doesn’t mean it can’t be improved but you get the idea.

There are still some issues but it is mostly working so instead of waiting longer I will continue working on fixing things and adding even more features! I will go through all the open issues now and respond on the current status.

PlexRipper now also has an awesome website! https://www.plexripper.rocks/

The plan is to have the website be the place for guides, questions, contribution guidelines and announcements. If you can please take a look at Contributing overview and see how you can help out!

Final note:

Make sure to clear the config folder before updating, or if you already updated, then just clear the config folder and restart PlexRipper.

Thanks as always for the support!

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.