]> git.rmz.io Git - dotfiles.git/blobdiff - flexget/config.yml
lazyvim: absorb snacks notifier
[dotfiles.git] / flexget / config.yml
index cf45208103a1ab95638f45308782284dc0a0ec35..d8485343cdbb5da2d64e90b66a11afbf7448ae8a 100644 (file)
-email:
-  from: flexget@tardis
-  to: ramsi@localhost
+variables: private.yml
 
-tasks:
-  tv-shows:
+web_server:
+  port: 8081
+
+templates: # {{{1
+  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: '{?sabnzbd.key?}'
+      url: '{?sabnzbd.url?}'
+
+
+  usenet_movies_rss: # {{{2
+    inputs:
+      - 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_series_rss: # {{{2
     inputs:
-      - rss: { url: 'https://www.ezrss.it/feed/', 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.bt-chat.com/?group=3', silent: yes }
-      - rss: { url: 'http://showrss.karmorra.info/feeds/all.rss', silent: yes }
-#      - rss: { url: 'http://rss.thepiratebay.org/208', silent: yes }
+      - 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
     content_filter:
+      require:
+        - '*.mkv'
+        - '*.mp4'
       reject:
+        - 'filename.mkv'
         - '*.rar'
         - '*.r0*'
+        - '*.wmv'
+        - '*.exe'
+    regexp:
+      reject:
+        - \b3-?D\b:       {from: title}
+        - \btrailer\b:    {from: title} # I've gotten a few trailers that matched as movies. VERY annoying
+        - \bR5\b:         {from: title} # The following are poor quality types that somehow got through the quality
+        - \bWEBSCR\b:     {from: title} # features usually due to the title including a keyword like "720p" as well
+        - \bscreener\b:   {from: title}
+        - \bTS\b:         {from: title}
+        - \bCam\b:        {from: title}
+        - '{C_P}':        {from: title} # The following are groups with poor quality releases
+        - TrTd TeaM:      {from: title}
+        - \[TNTVillage\]: {from: title}
+        - \[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
+
 
+  series: # {{{2
+    set:
+      category: 'series'
+      priority: '0'  # normal
+    trakt_lookup: yes
+    thetvdb_lookup: yes
     exists_series:
-      - "/mnt/Skaro/Series"
-      - "/home/ramsi/Torrents"
+      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:
+      # 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:
-        normal:
-          upgrade: yes
-
-      normal:
-        - american dad
-        - burn notice
-        - chuck
-        - family guy
-        - futurama
-        - how i met your mother
-        - qi
-        - the big bang theory
-        - the cleveland show
-        - two and a half men
-      720p:
-        - dexter
-        - doctor who
-        - eureka
-        - game of thrones
-        - house
-        - my little pony
-        - red dwarf
-        - weeds
-
-    transmission:
-      host: localhost
-      port: 9091
-      path: /mnt/Skaro/Torrents.flex
-      removewhendone: yes
-      ratio: 0.0
-
-  move-episodes:
+        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
+    set:
+      category: 'movies'
+      priority: '-1'  # low
+    exists_movie:
+      path:
+        - '/mnt/movies'
+      allow_different_qualities: better
+      type: files
+
+
+  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
-    metainfo_series: 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}}"
+
 
-    find:
-      path: /mnt/Skaro/Torrents.flex
+  series_filesystem: # {{{2
+    filesystem:
+      path:
+        - '/mnt/series'
       recursive: yes
-      regexp: '.*\.(avi|mkv|mp4)$'
+      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
 
-    move:
-      to: "/mnt/Skaro/Series/{{series_name_tvdb}}/Season {{tvdb_season}}/"
-      filename: "{{tvdb_season}}x{{tvdb_episode|pad(2)}} {{ep_name|replace('/','-')}} ({{ep_air_date|formatdate('%Y')}}){{'{'}}{{quality|replace(' ','}{')}}{{'}'}}[en]{{location|pathext}}"
 
-  move-movies:
-    tmdb_lookup: yes
+tasks: # {{{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]
 
-    find:
-      path: /mnt/Skaro/Movies.carsten
+
+  dl-series: # {{{2
+    priority: 100
+    template:
+      - series
+      - newznab_series_queue
+      - filters
+      - usenet
+
+
+  backfill-series: # {{{2
+    priority: 110
+    template:
+      - series
+      - newznab_series_backfill
+      - filters
+      - usenet
+
+  dl-movies: # {{{2
+    priority: 100
+    template:
+      - movies
+      - newznab_movies_queue
+      - filters
+      - usenet
+
+
+  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
+
+
+  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]
+
+
+  _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]
+
+
+  move-series-usenet: # {{{2
+    manual: yes
+    template:
+      - move_series
+    filesystem:
+      path:
+        - /srv/usenet/done/series
       recursive: yes
-      regexp: '.*\.mkv$'
+      retrieve: files
+      regexp: '.*\.(avi|mkv|mp4|mpg|divx|webm|flv)$'
 
-    move:
-      to: "/mnt/Skaro/Movies.flexed"
-      filename: "{{tmdb_name}} ({{tmdb_year}}){{'{'}}{{quality|replace(' ','}{')}}{{'}'}}[en][de].mkv"
+
+  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)$'
+
+
+  move-movies-usenet: # {{{2
+    manual: yes
+    template:
+      - move_movies
+      - trakt_remove_movie_queue
+    filesystem:
+      path:
+        - /srv/usenet/done/movies
+      recursive: yes
+      regexp: '.*\.(mkv|avi|mp4)$'
+
+
+  move-movies-torrents: # {{{2
+    manual: yes
+    template:
+      - move_movies
+      - trakt_remove_movie_queue
+    filesystem:
+      path:
+        - /srv/torrents/done
+      recursive: yes
+      regexp: '.*\.(mkv|avi|mp4)$'
+
+
+  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-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
+
+
+  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
+
+
+  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: ['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