Templates mit go-upper

go-upper kann nach jedem Upload automatisch Templates füllen (BBCode, Intelligen‑XML, eigene Textdateien usw.). Hier erfährst du, wie du sie aktivierst, welche Dateien als Beispiel dienen und welche Variablen verfügbar sind.

1) Template-Modul aktivieren

In config/upper.config.yml den Block template anpassen:

template:
  enabled: true                        # Templates generieren?
  templates:
    default:
      - '/pfad/zu/config/templates/bbcode/bbcode_movie_boerse07_hidecx.html'
      - '/pfad/zu/config/templates/intelligen/murat/movies.xml'
    movie: []                          # optional: eigene Liste nur für Movies
    game: []                           # optional: eigene Liste nur für Games
    tv: []                             # optional: eigene Liste nur für TV
    music: []                          # optional: eigene Liste nur für Music
    xxx: []                            # optional: eigene Liste nur für XXX
  saveTo: '/pfad/zum/result/'          # optional: Zielordner für fertige Templates
  contenttypes:                        # ordnet Scan-Pfade einem Typ zu
    - type: "movie"
      path: "/home/dev/Workspace/Gitlab/go-reupper/backup/"

So wählt go-upper die Templates:

  • default läuft immer.
  • Zusätzlich der Typen-Block (movie, game, tv, music, xxx), falls der Inhaltstyp erkannt wird (über contenttypes oder XRel).
  • Wenn saveTo leer ist, nutzt go-upper den Ergebnisordner aus result/. Bei aktivem result.json.seperated landet jedes Template im eigenen Unterordner des Releases.

2) Beispiel-Templates nutzen

Im Repo findest du fertige Beispiele:

  • BBCode: config/templates/bbcode/… (z. B. bbcode_movie_boerse07_hidecx.html)
  • Intelligen XML: config/templates/intelligen/… (z. B. intelligen/murat/movies.xml)

Du kannst diese Pfade direkt in template.templates eintragen oder als Vorlage für eigene Dateien kopieren.

3) Alle verfügbaren Template-Variablen

Alle Variablen in der Reihenfolge der JSON-Struktur (Quelle: config/templates/TEMPLATE-VARIABLES.txt):

Top-Level (UploadItem)

  • {{ .ID }} – interne Queue-ID (UUID)
  • {{ .Name }} – Release-Titel
  • {{ .OriginalName }} – ursprünglicher Ordnername
  • {{ .SourceDir }} – Quellpfad
  • {{ .WorkDir }} – Workdir
  • {{ .TargetDir }} – Zielpfad (falls gesetzt)
  • {{ .ToUpload }} – Liste der Upload-Dateien
  • {{ .ToUploadStream }} – Liste der Stream-Upload-Dateien
  • {{ .Links }} – Map: Hoster → Direktlinks
  • {{ .CryptedLinks }} – Map: Hoster → Crypter-Link
  • {{ .CryptedLinksBackup }} – Map nach Crypter-Service → Hosterlinks
  • {{ .CryptedLinksStream }} – Map: Streamhoster → Crypter-Link
  • {{ .CryptedLinksStreamBackup }} – Backup für Streamhoster
  • {{ .CryptedLinksStatus }} – Map: Hoster → Status-ID
  • {{ .Size }} – Größe in Bytes
  • {{ .SizeHuman }}, {{ .SizeHumanI }}, {{ .SizeHumanReal }}, {{ .SizeHumanRealI }} – Größen in SI/IEC
  • {{ .NFOPath }} – Pfad zur NFO (falls vorhanden)

General

  • {{ .General.Release }} – Release-Name
  • {{ .General.Name }} – bereinigter Name (z. B. „Avatar“)
  • {{ .General.Year }} – Jahr
  • {{ .General.Size }}, {{ .General.SizeI }}, {{ .General.SizeReal }}, {{ .General.SizeRealI }} – Größen wie oben
  • {{ .General.Type }} – erkannter Typ (movie, tv, game, music, xxx)
  • {{ .General.Plot }} – Beschreibung
  • {{ .General.Genre }} – Genre (kommagetrennt)
  • {{ .General.Cover }} – Cover-URL
  • {{ .General.IMDBID }} – IMDB-ID
  • {{ .General.IMDBLink }} – IMDB-Link

ExternalInfo – XRel

  • {{ .ExternalInfo.XRel.XRelID }}
  • {{ .ExternalInfo.XRel.Release }}
  • {{ .ExternalInfo.XRel.ReleaseLink }}
  • {{ .ExternalInfo.XRel.NFOLink }}
  • {{ .ExternalInfo.XRel.Group }}
  • {{ .ExternalInfo.XRel.Type }}
  • {{ .ExternalInfo.XRel.Title }}
  • {{ .ExternalInfo.XRel.MediaLink }}
  • {{ .ExternalInfo.XRel.Uris }}
  • {{ .ExternalInfo.XRel.ExtInfo.Cover }}
  • {{ .ExternalInfo.XRel.ExtInfo.Plot }}
  • {{ .ExternalInfo.XRel.ExtInfo.IMDBID }}
  • {{ .ExternalInfo.XRel.ExtInfo.IMDBLink }}
  • {{ .ExternalInfo.XRel.ExtInfo.Genre }}
  • {{ .ExternalInfo.XRel.ExtInfo.VideoType }}
  • {{ .ExternalInfo.XRel.ExtInfo.AudioType }}
  • {{ .ExternalInfo.XRel.ExtInfo.ExtInfoRaw }}

Beispielansicht der XRel-Daten im Ergebnis-JSON:

ExternalInfo – IMDB

  • {{ .ExternalInfo.IMDB.ID }}
  • {{ .ExternalInfo.IMDB.Title }}
  • {{ .ExternalInfo.IMDB.Plot }}
  • {{ .ExternalInfo.IMDB.Rating }}
  • {{ .ExternalInfo.IMDB.RatingCount }}
  • {{ .ExternalInfo.IMDB.Year }}
  • {{ .ExternalInfo.IMDB.CoverURLs.Small }}
  • {{ .ExternalInfo.IMDB.CoverURLs.Medium }}
  • {{ .ExternalInfo.IMDB.CoverURLs.Big }}

ExternalInfo – TMDB

  • {{ .ExternalInfo.TMDB.ID }}
  • {{ .ExternalInfo.TMDB.Title }}
  • {{ .ExternalInfo.TMDB.OriginalTitle }}
  • {{ .ExternalInfo.TMDB.Plot }}
  • {{ .ExternalInfo.TMDB.Rating }}
  • {{ .ExternalInfo.TMDB.RatingCount }}
  • {{ .ExternalInfo.TMDB.RunTime }}
  • {{ .ExternalInfo.TMDB.IMDBID }}
  • {{ .ExternalInfo.TMDB.PosterPath }}
  • {{ .ExternalInfo.TMDB.BackdropPath }}
  • {{ .ExternalInfo.TMDB.CoverURLs.Small }}
  • {{ .ExternalInfo.TMDB.CoverURLs.Medium }}
  • {{ .ExternalInfo.TMDB.CoverURLs.Big }}
  • {{ .ExternalInfo.TMDB.Trailer.Name }}
  • {{ .ExternalInfo.TMDB.Trailer.WatchURL }}

ExternalInfo – Steam

  • {{ .ExternalInfo.Steam.ID }}
  • {{ .ExternalInfo.Steam.Name }}
  • {{ .ExternalInfo.Steam.Image }}
  • {{ .ExternalInfo.Steam.Genres }}
  • {{ .ExternalInfo.Steam.Developers }}
  • {{ .ExternalInfo.Steam.Publishers }}
  • {{ .ExternalInfo.Steam.SupportedLanguageSubtitle }}
  • {{ .ExternalInfo.Steam.SupportedLanguageAudio }}
  • {{ .ExternalInfo.Steam.ReleaseDate }}
  • {{ .ExternalInfo.Steam.ShortDescription }}
  • {{ .ExternalInfo.Steam.AdditionalLanguages }} – Map: Sprache → lokalisierte Steam‑Details (nur wenn contentgrabber.steam.language mehrere Codes wie "DE,EN" enthält)

Beispiel: zweite Sprache (EN) im Template nutzen:

{{- with (index .ExternalInfo.Steam.AdditionalLanguages "EN") }}
EN Titel: {{ .Name }}
EN Beschreibung: {{ .ShortDescription }}
{{- end}}

Beispielansicht der Steam-Daten im Ergebnis-JSON:

ExternalInfo – YouTube

  • {{ .ExternalInfo.Youtube.Title }}
  • {{ .ExternalInfo.Youtube.Channel }}
  • {{ .ExternalInfo.Youtube.PublishedAt }}
  • {{ .ExternalInfo.Youtube.Score }}
  • {{ .ExternalInfo.Youtube.WatchURL }}
  • {{ .ExternalInfo.Youtube.EmbedURL }}

Emule

  • {{ .Emule.File }}
  • {{ .Emule.HashLink }}
  • {{ .Emule.Size }}

MediaInfo / FFProbe

  • {{ .MediaInfo.FFProbe.FFProbeFirstVideoSteam }}
  • {{ .MediaInfo.FFProbe.FFProbeFirstAudioStream }}
  • {{ .MediaInfo.FFProbe.FFProbeRAWData }}
  • {{ .MediaInfo.MediaInfo.MediaInfoFirstVideoSteam }}
  • {{ .MediaInfo.MediaInfo.MediaInfoFirstAudioStream }}
  • {{ .MediaInfo.MediaInfo.MediaInfoRAWData }}
  • {{ .MediaInfo.MediaInfo.MediaInfoData }}
  • {{ .MediaInfo.MediaInfo.MediaInfoData.RAWString }}
  • {{ .MediaInfo.MediaInfo.HumanValues.VideoRuntime }}
  • {{ .MediaInfo.MediaInfo.HumanValues.VideoFormat }}
  • {{ .MediaInfo.MediaInfo.HumanValues.VideoCodec }}
  • {{ .MediaInfo.MediaInfo.HumanValues.VideoWidth }}
  • {{ .MediaInfo.MediaInfo.HumanValues.VideoHeight }}
  • {{ .MediaInfo.MediaInfo.HumanValues.VideoBitrate }}
  • {{ .MediaInfo.MediaInfo.HumanValues.AudioLanguages }}
  • {{ .MediaInfo.MediaInfo.HumanValues.AudioFormat }}
  • {{ .MediaInfo.MediaInfo.HumanValues.AudioBitrate }}
  • {{ .MediaInfo.MediaInfo.HumanValues.AudioChannel }}
  • {{ .MediaInfo.MediaInfo.HumanValues.SubtitleLanguages }}

MovieThumbnail

  • {{ .MovieThumbnail.ThumbnailPath }}
  • {{ .MovieThumbnail.ThumbnailLink }}
  • {{ .MovieThumbnail.InfoTXT }}

NFO / Crypter / Cover (top-level)

  • {{ .NFO }} – kompletter NFO-Inhalt
  • {{ .Crypter }} – aktiver Crypter-Name
  • {{ .Cover }} – Cover-URL (Fallback auf .General.Cover)

4) Praktische Beispiele

BBCode-Template (Boerse):

template:
  enabled: true
  templates:
    default:
      - '/home/dev/Workspace/Gitlab/go-reupper/config/templates/bbcode/bbcode_movie_boerse07_hidecx.html'
  saveTo: '/home/dev/Workspace/Gitlab/go-reupper/result/'

Intelligen-Template:

template:
  enabled: true
  templates:
    movie:
      - '/home/dev/Workspace/Gitlab/go-reupper/config/templates/intelligen/murat/movies.xml'
  saveTo: '/home/dev/Workspace/Gitlab/go-reupper/result/'
  contenttypes:
    - type: "movie"
      path: "/home/dev/Workspace/Gitlab/go-reupper/backup/"

Variablen nutzen (Mini-Ausschnitt):

[B]Titel:[/B] {{ .Name }}
[B]Größe:[/B] {{ .SizeHuman }}
[B]Hoster:[/B]
{{- range $hoster, $link := .CryptedLinks }}
- {{ $hoster }} → {{ $link }}
{{- end}}

Tipp: Immer mit if/with prüfen, ob Werte existieren, damit die Template-Ausgabe nicht abbricht:

{{- if .ExternalInfo.Youtube.WatchURL }}
Trailer: [url={{ .ExternalInfo.Youtube.WatchURL }}]{{ .ExternalInfo.Youtube.Title }}[/url]
{{- end}}