Skip to main content

Detail Page

The detail page is the full-screen view that opens when you click a game. It's composed of sections rendered in order. You define exactly which sections appear and how they extract data from the game's HTML detail page.


Structure

detail_page:
sections:
- type: hero
order: 1
config: ...

- type: text_content
order: 2
title: "Description"
icon: file-text
config: ...

- type: download_buttons
order: 3
config: ...

Sections are rendered in order ascending. title and icon appear as the section header.


Section types

hero

The top banner — background image, title, subtitle, and info badges.

- type: hero
order: 1
config:
background_image:
selector: "meta[property='og:image']"
attribute: content
title:
selector: "h1.game-title"
subtitle:
selector: ".release-date"
badges:
- label: "Version"
icon: package
selector: ".version-info"
contains: "Version:"
extract_after: ":"
style: primary

- label: "Players"
icon: users
selector: ".player-count"
extract_number: true
suffix: " players"
style: success

Badge fields:

FieldNotes
labelDisplay label in the badge
iconLucide icon
selectorCSS selector for the element
containsOnly use this element if its text contains this string
extract_afterExtract text after this character (e.g. :)
extract_numberExtract only the numeric value
suffixAppend to extracted value
styleprimary, success, warning, danger, info

video

Embed a YouTube or other video iframe.

- type: video
order: 2
title: "Trailer"
icon: play-circle
config:
selector: "iframe[src*='youtube']"
attribute: src
transform: youtube_embed # Converts watch URL to embed URL

transform: youtube_embed converts https://www.youtube.com/watch?v=IDhttps://www.youtube.com/embed/ID.


text_content

A block of text — description, notes, changelog, etc.

- type: text_content
order: 3
title: "Description"
icon: file-text
config:
selector: ".game-description"
extract: text # "text" or "html"
max_length: 1200
FieldNotes
selectorCSS selector
extracttext (plain text) or html (rendered HTML)
max_lengthTruncate at this many characters

metadata_grid

A two-column grid of labeled data points.

- type: metadata_grid
order: 4
title: "Game Info"
icon: info
config:
items:
- label: "Release Date"
icon: calendar
selector: ".release"

- label: "Developer"
icon: code
selector: ".dev-name"

- label: "Archive Password"
icon: lock
selector: ".password-box"
render_as: code # renders in monospace code box
style: highlighted # highlighted background

Item fields:

FieldNotes
labelLeft-column label
iconLucide icon
selectorCSS selector
attributeHTML attribute to extract (default: text content)
containsOnly match element if it contains this text
extract_afterExtract text after this separator
render_astext (default) or code
stylenormal or highlighted

numbered_steps

An ordered list of installation instructions.

- type: numbered_steps
order: 5
title: "Installation"
icon: list-ordered
config:
selector: ".install-guide"
extract_method: numbered_list # or "list_items" or "paragraphs"
start_after: "Installation steps:"
end_before: "Notes:"
extract_methodDescription
numbered_listParses "1. Step one\n2. Step two" format
list_itemsExtracts <li> elements
paragraphsSplits on <p> or double newlines

alert_box

A warning / info callout box — for important notes, warnings, or requirements.

- type: alert_box
order: 6
title: "Important Notes"
icon: alert-triangle
style: warning # "info", "warning", "danger", "success"
config:
selector: ".notes-box ul"
items_selector: li # extract each <li> as a separate note

download_buttons

Action buttons for downloading the game. Each button targets a link on the page.

- type: download_buttons
order: 7
title: "Download"
icon: download
config:
buttons:
- label: "Download"
selector: "a.download-btn"
icon: download
style: primary
action: open_link
smart_download: true

- label: "Mirror 1"
selector: "a[href*='/redirect/']"
icon: link
style: secondary
action: open_link
resolve_link: true
use_text_as_label: true

- label: "Hosters Page"
selector: "a[href*='/hosters/']"
icon: server
style: primary
action: open_link
resolver: my_hosters_path

Button fields:

FieldNotes
labelButton text (overridden by use_text_as_label)
selectorCSS selector for the link element
contains_textOnly match elements whose visible text contains this string
iconLucide icon
styleprimary, secondary, danger, success
actionopen_link
smart_downloadRun the link through host detection and smart download
resolve_linkResolve redirect chain via link_resolution first
use_text_as_labelUse the element's visible text as the button label
resolverName of a path in paths: to use for resolution
supportedSet to false to show the button locked ("Not yet supported")
warningAmber confirmation modal shown before the download proceeds

contains_text example — when one CSS selector matches multiple hosts, show only the one you want:

- label: "GoFile"
selector: "a.download-btn[href*='/ext/']"
contains_text: "GoFile" # only match the anchor whose text is "GoFile"
icon: cloud-download
style: secondary
smart_download: true

supported: false example — lock buttons for hosts you haven't configured yet:

- label: "RapidGator"
selector: "a[href*='rapidgator.net']"
icon: hard-drive
style: secondary
action: open_link
supported: false # shown but unclickable

warning example — show a confirmation before an unreliable download:

- label: "Mirror B"
selector: "a[href*='mirror-b']"
icon: cloud-download
style: primary
smart_download: true
warning: "This mirror is sometimes slow. If it fails, try again."

dynamic

A flexible section that renders arbitrary scraped HTML or text.

- type: dynamic
order: 8
title: "Additional Info"
icon: layers
config:
selector: ".extra-content"
render_as: html