Templates in go-upper
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:
defaultläuft immer.- Zusätzlich der Typen-Block (
movie,game,tv,music,xxx), falls der Inhaltstyp erkannt wird (übercontenttypesoder XRel). - Wenn
saveToleer ist, nutzt go-upper den Ergebnisordner ausresult/. Bei aktivemresult.json.seperatedlandet 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 wenncontentgrabber.steam.languagemehrere 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}}