]> git.rmz.io Git - dotfiles.git/blobdiff - flexget/config.yml
lazyvim: absorb snacks notifier
[dotfiles.git] / flexget / config.yml
index 05adfc790aa496008eb9f9ed087d16c8609b2cf1..d8485343cdbb5da2d64e90b66a11afbf7448ae8a 100644 (file)
@@ -1,49 +1,51 @@
-secrets: private.yml
+variables: private.yml
 
+web_server:
+  port: 8081
 
 templates: # {{{1
-  email: # {{{2
-    email:
-      from: flexget@tardis
-      to: ramsi@localhost
-
-
-  torrents: # {{{2
-    inputs:
-      - rss: { url: 'https://ezrss.it/feed/', silent: yes }
-      - rss: { url: 'http://publichd.se/rss.php', silent: yes }
-      - rss: { url: 'http://rss.bt-chat.com/?group=3', silent: yes }
-      - rss: { url: 'http://kickass.to/tv/?rss=1', silent: yes }
-      - rss: { url: 'http://showrss.info/feeds/all.rss', silent: yes }
-      # - rss: { url: 'http://www.torlock.com/television/rss.xml', silent: yes }
-      # - rss: { url: 'http://torrentz.eu/feed_verified?q=tv', silent: yes }
-      # - rss: { url: 'http://rss.thepiratebay.org/208', silent: yes }
-    transmission:
-      host: localhost
-      port: 9091
-      path: /mnt/Skaro/torrents/done
-      ratio: 0.0
+  anchors: # {{{2
+    _trakt: &trakt
+      account: '{?trakt.account?}'
+    _sonarr: &sonarr
+      base_url: '{?sonarr.url?}'
+      api_key:  '{?sonarr.api?}'
+      port: 8989
+    _trakt_movie_queue: &trakt_movie_queue
+      account: '{?trakt.account?}'
+      list: movie-queue
+    _newznab_series_search: &newznab_series_search
+      url: '{?ds.api?}&t=tvsearch&cat=5040&extended=1'
+      category: tv
+      query:
+        - tvdb_id
+        - series_name
+        - series_alternate_names
+    _newznab_movie_search: &newznab_movie_search
+      url: '{?ds.api?}&t=movie&cat=2040&extended=1'
+      category: movie
+    _series_settings: &series_settings
+      identified_by: ep
+      quality: 720p-1080p webrip+ h264+
+      exact: yes
 
 
   usenet: # {{{2
     sabnzbd:
-      key: '{{secrets.sabnzbd.key}}'
-      url: '{{secrets.sabnzbd.url}}'
+      key: '{?sabnzbd.key?}'
+      url: '{?sabnzbd.url?}'
 
 
-  usenet-movies: # {{{2
-    set:
-      category: 'movies'
+  usenet_movies_rss: # {{{2
     inputs:
-      - rss: { url: 'https://www.usenet-crawler.com/rss?t=2040&dl=1&num=100{{secrets.crawler.api}}', silent: yes } # Movies HD
+      - rss: { url: 'https://{?ds.rss?}&t=2040&dl=1&num=100', silent: yes } # Movies HD
+      - rss: { url: 'https://{?uc.rss?}&t=2040&dl=1&num=100', silent: yes } # Movies HD
 
 
-  usenet-tv: # {{{2
-    set:
-      category: 'tv'
+  usenet_series_rss: # {{{2
     inputs:
-      - rss: { url: 'https://www.usenet-crawler.com/rss?t=5030&dl=1&num=100{{secrets.crawler.api}}', silent: yes } # TV SD
-      - rss: { url: 'https://www.usenet-crawler.com/rss?t=5040&dl=1&num=100{{secrets.crawler.api}}', silent: yes } # TV HD
+      - rss: { url: 'https://{?ds.rss?}&t=5040&dl=1&num=100', silent: yes } # Series HD
+      - rss: { url: 'https://{?uc.rss?}&t=5040&dl=1&num=100', silent: yes } # Series HD
 
 
   filters: # {{{2
@@ -72,228 +74,579 @@ templates: # {{{1
         - \[facepalm\]:   {from: title}
         - \bASAP\b:       {from: title}
         - \b Go\):        {from: title} # filter those misplaced french only movies
+        - 'nl.subs':      {from: title} # no dutch subtitles
+        - 'NIXON':        {from: title} # rubbish futurama releases, wrong season numbering
 
 
-  tv: # {{{2
+  series: # {{{2
+    set:
+      category: 'series'
+      priority: '0'  # normal
+    trakt_lookup: yes
+    thetvdb_lookup: yes
+    exists_series:
+      path:
+        - '/mnt/series/{{tvdb_series_name}}'
+      allow_different_qualities: better
+    content_size:
+      min:   100
+      max: 10000
+      strict: yes
+
+
+  newznab_series_queue:  # {{{2
+    domain_delay:
+      api.drunkenslug.com: 5 seconds
+    timeframe:
+      wait: 10 hours
+      # let series handle the accept
+      on_reached: do_nothing
+      target: 1080p webrip h264
+    configure_series:
+      from:
+         entry_list: trakt-series-queue
+      settings:
+        exact: yes
+        identified_by: ep
+        quality: 720p-1080p webrip+ h264+
+    sort_by:
+      field: quality
+      reverse: yes
+    discover:
+      interval: 50 minutes
+      release_estimations:
+        optimistic: 1 days
+      what:
+        - next_series_episodes:
+            from_start: yes
+      from:
+        - newznab: *newznab_series_search
+    max_reruns: 3
+    thetvdb_lookup: yes
     series:
-      normal:
-        - 8 out of 10 cats
-        - american dad
-        - archer 2009
-        - boardwalk empire
-        - breaking bad
-        - broadchurch
-        - burn notice
-        - chuck
-        - community
-        - danger 5: { quality: 720p+ }
-        - dexter
-        - doctor who 2005
-        - downton abbey
-        - eureka
-        - family guy
-        - foyle's war
-        - futurama
-        - game of thrones
-        - homeland
-        - how i met your mother
-        - last week tonight with john oliver
-        - master of sex
-        - my little pony
-        - mythbusters
-        - qi (xl)
-        - ray donovan
-        - red dwarf
-        - sherlock
-        - suits
-        - the big bang theory
-        - the blacklist
-        - the cleveland show
-        - the walking dead
-        - two and a half men
-        - the wire: { quality: 720p+ }
+      # this doesn't seem to override the timeframe set above
+      - Last Week Tonight with John Oliver: { timeframe: 8 hours }
+      - House of the Dragon: { timeframe: 8 hours }
+      - Anne Rice's Mayfair Witches:
+          alternate_name:
+            - mayfair witches
+
+
+  newznab_series_backfill: # {{{2
+    domain_delay:
+      api.drunkenslug.com: 5 seconds
+    configure_series:
+      from:
+        sonarr_list:
+          <<: *sonarr
+          only_monitored: yes
+          include_data: yes
+      settings:
+        exact: yes
+        identified_by: ep
+        # tracking: backfill
+        quality: 720p-1080p webrip+ h264+
+    discover:
+      interval: 10 minutes
+      what:
+        - next_sonarr_episodes:
+            <<: *sonarr
+            only_monitored: yes
+            include_ended: yes
+      from:
+        - newznab: *newznab_series_search
+    seen: local
+    series:
+      generated_series:
+        - money heist:
+            alternate_name: la casa de papel
+        - the ministry of time:
+            alternate_name:
+              - el ministerio del tiempo
+              - the department of time
+    sort_by:
+      field: quality
+      reverse: yes
 
 
   movies: # {{{2
-    imdb:
-      min_score: 7.5
-      min_votes: 30000
-    imdb_required: on
+    set:
+      category: 'movies'
+      priority: '-1'  # low
     exists_movie:
       path:
-        - '/mnt/Skaro/Movies'
+        - '/mnt/movies'
       allow_different_qualities: better
       type: files
-      lookup: imdb
+
+
+  newznab_movies_queue:  # {{{2
+    plugin_priority:  # NOTE: currently not verified
+      est_released_movies: 200  # prefer using tmdb release date
+      est_movies_bluray: 100    # over bluray releases
+    discover:
+      interval: 1 hours
+      what:
+        - movie_list: trakt-movies-queue
+      from:
+        - newznab: *newznab_movie_search
+      release_estimations:
+        optimistic: 30 days
+
+    quality: 720p-1080p webrip+ h264+
+    timeframe:
+      wait: 1 day
+      on_reached: accept
+      target: 1080p webrip h264
+    best_quality:
+      on_best: do_nothing
+      on_lower: reject
+    tmdb_lookup: true
+    list_match:
+      from:
+        - movie_list: trakt-movies-queue
+
+
+  trakt_add_collection: # {{{2
+    list_add:
+      - trakt_list:
+          account: '{?trakt.account?}'
+          list: collection
+
+
+  trakt_remove_movie_queue: # {{{2
+    # removes movie from queue and watchlist
+    list_remove:
+      - trakt_list:
+          <<: *trakt
+          list: movies-queue
+          type: movies
+      - trakt_list:
+          <<: *trakt
+          list: watchlist
+          type: movies
+
+
+  move_series: # {{{2
+    manual: yes
+    template:
+      - trakt_add_collection
+    disable:
+      - retry_failed
+      - seen
+      - seen_info_hash
+    no_entries_ok: yes
+    parsing:
+      series: guessit
+    regexp: { reject: ['[Ss]ample'] }
+    all_series:
+      parse_only: yes
+    accept_all: yes
+    thetvdb_lookup: yes
+    require_field:
+      - tvdb_season
+      - tvdb_episode
+    set:
+      destination: '/mnt/series'
+      folder: "{{tvdb_series_name}}/{% if tvdb_season == 0 %}Specials{% else %}Season {{tvdb_season}}{% endif %}"
+      filename: "{{tvdb_season}}x{{tvdb_episode|pad(2)}} {{tvdb_ep_name|replace('/','-')}} ({{tvdb_ep_air_date|formatdate('%Y')}}){{'{'}}{{quality|replace(' ','}{')}}{{'}'}}[{{tvdb_language}}]"
+    move:
+      to: "/mnt/series/{{folder}}"
+      rename: "{{filename}}"
+      clean_source: 100   # removes dir if < [N] MB
+      along:
+        extensions: [sub, srt]
+        subdirs:    [Subs]
+    exec:
+      - echo "<<<{{folder}}/{{filename}}>>>"
+      - touch "{{destination}}/{{folder}}/{{filename}}{{location|pathext}}"
+
+
+  move_movies: # {{{2
+    manual: yes
+    template:
+      - trakt_add_collection
+    disable:
+      - retry_failed
+      - seen
+      - seen_info_hash
+    no_entries_ok: yes
+    regexp: { reject: ['[Ss]ample'] }
+    parsing:
+      movie: guessit
+    tmdb_lookup: true
+    accept_all: yes
+    require_field:
+      - tmdb_name
+      - tmdb_year
+    set:
+      destination: '/mnt/movies'
+      filename: "{{tmdb_name}} ({{tmdb_year}}){{'{'}}{{quality|replace(' ','}{')}}{{'}'}}[en]"
+    move:
+      to: "/mnt/movies"
+      rename: "{{filename}}"
+      clean_source: 100   # removes dir if < [N] MB
+      along:
+        extensions: [sub, srt]
+        subdirs:    [Subs]
+    exec:
+      - echo "<<<{{filename}}>>>"
+      - touch "{{destination}}/{{filename}}{{location|pathext}}"
+
+
+  series_filesystem: # {{{2
+    filesystem:
+      path:
+        - '/mnt/series'
+      recursive: yes
+      retrieve: files
+      regexp: '.*\.(avi|mkv|mp4|webm|m4v)$'
+    log_filter:  # {{{3
+      - message: "Test mode"
+        plugin: filesystem
+      - message: "Title:"
+        plugin: filesystem
+      - message: "URL:"
+        plugin: filesystem
+      - message: "Filename:"
+        plugin: filesystem
+      - message: "Timestamp:"
+        plugin: filesystem
+      - message: ""
+        plugin: manipulate
+      - message: ""
+        plugin: assume_quality
+        level: verbose #}}}
+    manipulate:
+      - title:
+          from: location
+          replace:
+            regexp: '.*/([^/]+)/[^/]+/(\d+)(?:x(\d+))+([^/]*?)(?:\[.*\])?\.[^.]+$'
+            format: '\1 S\2E\3\4'
+      - title:
+          replace:
+            regexp: '[][(){}]'
+            format: ' '
+    set:
+      collected_at: "{{created}}"
+    parsing:
+      series: guessit
+    metainfo_series: yes
+    require_field:
+      - series_name
+    assume_quality: 480p
+
+
+  movies_filesystem: # {{{2
+    filesystem:
+      path:
+        - '/mnt/movies'
+      recursive: yes
+      retrieve: files
+      regexp: '.*\.(avi|mkv|mp4|webm|m4v)$'
+    tmdb_lookup: true
+    require_field:
+      - tmdb_id
+
+
+  sync_series_trakt: # {{{2
+    plugin_priority: # thetvdb_lookup before set
+      thetvdb_lookup: 110
+      set: 100
+    all_series:
+      parse_only: yes
+    # lookup tvdb info
+    thetvdb_lookup: yes
+    no_entries_ok: yes
+    # replace title with tvdb_series_name
+    set:
+      title:       "{{tvdb_series_name}}"
+      series_name: "{{tvdb_series_name}}"
+      name:        "{{tvdb_series_name}}"
+    accept_all: yes
+    disable: seen
 
 
 tasks: # {{{1
-  dl-tv: # {{{2
-    priority: 1
+  parse-series: # {{{2
+    # This is used by flexget.py to get the series/episode id
+    manual: yes
+    all_series:
+      parse_only: yes
+    accept_all: yes
+    disable: [seen]
+
+
+  dl-series: # {{{2
+    priority: 100
     template:
-      - email
-      - tv
+      - series
+      - newznab_series_queue
       - filters
       - usenet
-      - usenet-tv
-    series:
-      settings:
-        normal:
-          timeframe: 12 hours
-          target: 1080p webdl
-          quality: 480p+
-          upgrade: yes
-    exists_series:
-      path: '/mnt/Skaro/Series/{{tvdb_series_name}}'
-      allow_different_qualities: better
-    content_size:
-      min:  100
-      max: 6000
-      strict: yes
 
 
-  dl-movies-1080p: # {{{2
-    priority: 1
+  backfill-series: # {{{2
+    priority: 110
     template:
-      - email
-      - movies
+      - series
+      - newznab_series_backfill
       - filters
       - usenet
-      - usenet-movies
-    quality: 1080p webdl+
-    content_size:
-      min:  3000
-      max: 15000
-      strict: yes
-
 
-  dl-movies-720p: # {{{2
-    priority: 2
+  dl-movies: # {{{2
+    priority: 100
     template:
-      - email
       - movies
+      - newznab_movies_queue
       - filters
       - usenet
-      - usenet-movies
-    quality: 720p hdrip+
-    delay: 7 days
-    content_size:
-      min:  1000
-      max: 10000
-      strict: yes
 
 
-  move-tv: # {{{2
+  sync-watchlist-series-episodes: # {{{2
+    # get episodes from trakt watchlist and adds them to trakt queue
+    # and sets the series_begin to the given episode.
+    priority: 1
+    disable: seen
+    template:
+      - sync_series_trakt
+    trakt_list:
+      <<: *trakt
+      list: watchlist
+      type: episodes
+    set_series_begin: yes
+    list_remove:
+      - trakt_list:
+          <<: *trakt
+          list: watchlist
+          type: episodes
+    list_add:
+      - trakt_list:
+          <<: *trakt
+          list: series-queue
+          type: shows
+      - trakt_list:
+          <<: *trakt
+          list: watchlist
+          type: shows
+
+
+  sync-watchlist-series: # {{{2
+    # get series from trakt watchlist and queue, and adds them to trakt queue and entry list
     priority: 2
+    template:
+      - sync_series_trakt
+    list_clear:
+      what:
+        - entry_list: trakt-series-queue
+    inputs:
+      - trakt_list:
+          <<: *trakt
+          list: watchlist
+          type: shows
+      - trakt_list:
+          <<: *trakt
+          list: series-queue
+          type: shows
+    if:
+      # if series name contains special characters
+      - trakt_series_name|asciify|strip_symbols != trakt_series_name:
+            set:
+              # set alternate_name with special chars removed
+              configure_series_alternate_name: "{{trakt_series_name|asciify|strip_symbols}}"
+              #FIXME doesn't work for discover, no search is emited for alternate_name
+              # worth a patch?
+              # Maybe that's a newznab search plugin functionality, I've patched it in there for now.
+    disable: seen
+    list_add:
+      - trakt_list:
+          <<: *trakt
+          list: series-queue
+          type: shows
+      - entry_list: trakt-series-queue
+
+  sync-series-begin: # {{{2
+    priority: 3
+    disable: seen
+    template:
+      - sync_series_trakt
+    configure_series:
+      from:
+        filesystem:
+          path:
+            - '/mnt/series'
+          retrieve: dirs
+    next_trakt_episodes:
+      <<: *trakt
+      list: collection
+      context: collected
+    accept_all: yes
+    set_series_begin: yes
 
-    seen: local
-    disable:
-      - retry_failed
-    no_entries_ok: yes
 
-    find:
-      path:
-        - /mnt/Skaro/usenet/done
-        - /mnt/Skaro/torrents/done
-      recursive: yes
-      regexp: '.*\.(avi|mkv|mp4|mpg|divx|webm)$'
+  sync-watchlist-movies: # {{{2
+    # get movies from trakt watchlist and adds them to flexget movie queue
+    priority: 1
+    list_clear:
+      what:
+        - movie_list: trakt-movies-queue
+    inputs:
+      - trakt_list:
+          <<: *trakt
+          list: watchlist
+          type: movies
+      - trakt_list:
+          <<: *trakt
+          list: movies-queue
+          type: movies
+    accept_all: yes
+    list_add:
+      - movie_list: trakt-movies-queue
+      - trakt_list:
+          <<: *trakt
+          list: movies-queue
+          type: movies
+    disable: [seen]
 
-    regexp:
-      reject:
-        - '[Ss]ample'
 
-    thetvdb_lookup: yes
-    all_series:
-      parse_only: yes
+  _sync-movies-collected-trakt: # {{{2
+    # this is expensive, don't run often
+    manual: yes
+    priority: 1
+    list_clear:
+      what:
+        - movie_list: movies-collected-trakt
+    trakt_list:
+      account: '{?trakt.account?}'
+      list: collection
+      type: movies
+    list_add:
+      - movie_list: movies-collected-trakt
     accept_all: yes
+    disable: [seen]
 
-    set:
-      destination: '/mnt/Skaro/Series'
-      folder: "{{tvdb_series_name}}/{% if tvdb_season == 0 %}Specials{% else %}Season {{tvdb_season}}{% endif %}"
-      filename: "{{tvdb_season}}x{{tvdb_episode|pad(2)}} {{tvdb_ep_name|replace('/','-')}} ({{tvdb_ep_air_date|formatdate('%Y')}}){{'{'}}{{quality|replace(' ','}{')}}{{'}'}}[en]"
-    move:
-      to: "/mnt/Skaro/Series/{{folder}}"
-      filename: "{{filename}}"
-      clean_source: 100   # removes dir if < [N] MB
 
-    exec: echo "<<<{{folder}}/{{filename}}>>>"
-    email:
-      from: flexget@tardis
-      to: ramsi@localhost
-      template: move
+  move-series-usenet: # {{{2
+    manual: yes
+    template:
+      - move_series
+    filesystem:
+      path:
+        - /srv/usenet/done/series
+      recursive: yes
+      retrieve: files
+      regexp: '.*\.(avi|mkv|mp4|mpg|divx|webm|flv)$'
 
 
-  move-movies: # {{{2
-    priority: 3
+  move-series-torrents: # {{{2
+    manual: yes
+    template:
+      - move_series
+    filesystem:
+      path:
+        - /srv/torrents/done
+      recursive: yes
+      retrieve: files
+      regexp: '.*\.(avi|mkv|mp4|mpg|divx|webm|flv)$'
 
-    seen: local
-    disable:
-      - retry_failed
-    no_entries_ok: yes
 
-    find:
+  move-movies-usenet: # {{{2
+    manual: yes
+    template:
+      - move_movies
+      - trakt_remove_movie_queue
+    filesystem:
       path:
-        - /mnt/Skaro/usenet/done
-        - /mnt/Skaro/torrents/done
+        - /srv/usenet/done/movies
       recursive: yes
       regexp: '.*\.(mkv|avi|mp4)$'
 
-    regexp:
-      reject:
-        - '[Ss]ample'
 
-    imdb_lookup: yes
-    accept_all: yes
+  move-movies-torrents: # {{{2
+    manual: yes
+    template:
+      - move_movies
+      - trakt_remove_movie_queue
+    filesystem:
+      path:
+        - /srv/torrents/done
+      recursive: yes
+      regexp: '.*\.(mkv|avi|mp4)$'
 
-    set:
-      destination: '/mnt/Skaro/Movies'
-      filename: "{{imdb_name}} ({{imdb_year}}){{'{'}}{{quality|replace(' ','}{')}}{{'}'}}[en]"
-    move:
-      to: "/mnt/Skaro/Movies"
-      filename: "{{filename}}"
-      clean_source: 100   # removes dir if < [N] MB
 
-    exec: echo "<<<{{filename}}>>>"
-    email:
-      from: flexget@tardis
-      to: ramsi@localhost
-      template: move
+  seed-series-db: # {{{2
+    manual: yes
+    seen: local
+    template:
+      - series_filesystem
+    configure_series:
+      from:
+        # entry_list: series-trakt
+        sonarr_list:
+          <<: *sonarr
+          only_monitored: yes
+      settings:
+        # tracking: no
+        identified_by: ep
+    accept_all: yes
 
 
-  seed-tv-db: # {{{2
+  seed-series-trakt: # {{{2
+    # can also be used to learn and seed local db
+    # since adding to trakt doesn't work that is the only usage atm
     manual: yes
+    seen: local
+    configure_series:
+      from:
+        filesystem:
+          path:
+            - '/mnt/series'
+          retrieve: dirs
+    template:
+      - series_filesystem
+      # currently doesn't work and times out, need to patch to send in batches
+      # - trakt_add_collection
+    accept_all: yes
 
-    find:
-      path: '/mnt/Skaro/Series'
-      regexp: '.*\.(avi|mkv|mp4|webm)$'
-      recursive: yes
 
-    manipulate:
-      - title:
-          from: location
-          replace:
-            regexp: '.*/([^/]+)/[^/]+/(\d+)x(\d+)([^/]*)\.[^.]+$'
-            format: '\1 S\2E\3\4'
-      - title:
-          replace:
-            regexp: '\[.*\]'
-            format: ''
-      - title:
-          replace:
-            regexp: '[\(\)\{\}]'
-            format: ' '
+  seed-movies-trakt: # {{{2
+    # this will result in an error since the request is soo long
+    # but it seems that the data is still uploaded fully and updated
+    manual: yes
+    seen: local
+    template:
+      - movies_filesystem
+      - trakt_add_collection
+    accept_all: yes
 
-    all_series: yes
-    assume_quality: 480p
 
-    require_field:
-      - series_name
+  trakt-copy-list: # {{{2
+    manual: yes
+    trakt_list:
+      <<: *trakt
+      list: series-queue
+      type: shows
+    accept_all: yes
+    list_add:
+      - trakt_list:
+          <<: *trakt
+          list: series-queue-backup
+          type: shows
+
 
 
 schedules: # {{{1
-  - tasks: ['dl-*']
-    schedule:
-      hour: '*'
-      minute: '48'
+  - tasks: ['sync-watchlist-series*', 'dl-series']
+    interval:
+      hours: 1
+      jitter: 120  # seconds
+  - tasks: ['dl-movies']
+    interval:
+      hours: 2
+      jitter: 120  # seconds
+  - tasks: ['sync-watchlist-movies']
+    interval:
+      hours: 3  # needs to be 2h+ to avoid trakt_list cache
+      jitter: 120  # seconds
 
 # vim: sts=2 ts=2 sw=2 et