diff --git a/.github/workflows/deploy-site.yml b/.github/workflows/deploy-site.yml
index 183deaba..7a7a5de7 100644
--- a/.github/workflows/deploy-site.yml
+++ b/.github/workflows/deploy-site.yml
@@ -43,6 +43,7 @@ on:
- "scripts/restore_large_files.py"
- "scripts/safeparse.py"
- "scripts/sect233r1.py"
+ - "scripts/sitediagrams.py"
- "scripts/siteexports.py"
- "scripts/siterender.py"
- "scripts/sitesources.py"
diff --git a/docs_assets/images-needed.md b/docs_assets/images-needed.md
new file mode 100644
index 00000000..4bc29a92
--- /dev/null
+++ b/docs_assets/images-needed.md
@@ -0,0 +1,71 @@
+# Images that need a real device
+
+These pictures show a real screen, so they are captured on a real install and
+never drawn as a mock-up. Each entry says what the capture must show, where it
+goes, and the alt text it carries. Folder layouts that follow from data are
+drawn by `scripts/sitediagrams.py` instead (the MinUI card tree is
+``).
+
+Captures: PNG or WebP, 1200 px wide at most, cropped tight, under 150 KB,
+personal paths and user names removed. Menu labels are checked against the
+current release of the software before the capture is used. Put each file in
+`docs_assets/screens/` and note the software version in the commit message.
+
+## RetroArch System/BIOS directory
+
+Settings, Directory in RetroArch (Ozone menu), with the System/BIOS row
+highlighted and its path visible. For the RetroArch pages on Windows, macOS,
+Linux and Android.
+
+**Alt text**: RetroArch Settings, Directory screen, with the System/BIOS line highlighted showing the folder path.
+
+## RetroArch firmware check
+
+Main Menu, Information, Core Information after loading a PlayStation core, with
+the firmware lines reading Present. For RetroArch and Lakka pages, "Done when".
+
+**Alt text**: RetroArch Core Information for a PlayStation core, each firmware line marked Present.
+
+## Steam Deck Desktop Mode and Konsole
+
+Two panels: the Steam Deck power menu with Switch to Desktop selected, then the
+desktop with Konsole open and the install command pasted. For the EmuDeck and
+RetroDECK pages.
+
+**Alt text**: Steam Deck power menu with Switch to Desktop selected, then the Konsole terminal open with the install command pasted.
+
+## Installer run, annotated
+
+A real installer run in a terminal with three marks: the detected BIOS folder
+line, the confirmation prompt, and the Done line. For First install and every
+setup page.
+
+**Alt text**: Installer output in a terminal, with marks on the detected folder, the install choice and the Done line.
+
+## Batocera network share from Windows
+
+Windows File Explorer with `\\BATOCERA\share\bios` in the address bar and the
+BIOS files listed. For the Batocera and KNULLI pages.
+
+**Alt text**: Windows File Explorer showing the Batocera bios folder opened over the network.
+
+## Batocera missing BIOS screen
+
+Batocera's main menu path to the missing BIOS check, and the result screen with
+no missing file for the consoles in use. For the Batocera page, "Done when".
+
+**Alt text**: Batocera missing BIOS check listing no missing files.
+
+## Recalbox BIOS manager
+
+Recalbox's BIOS checking screen with green, yellow and red entries visible. For
+the Recalbox page.
+
+**Alt text**: Recalbox BIOS manager listing files marked present, present with another version, and missing.
+
+## A multi-part pack extracted
+
+A file manager showing two downloaded parts and the single folder both were
+extracted into. For Get your files.
+
+**Alt text**: Two downloaded pack parts and the one folder both were extracted into.
diff --git a/docs_assets/logos/amberelec.png b/docs_assets/logos/amberelec.png
new file mode 100644
index 00000000..ddc713f4
Binary files /dev/null and b/docs_assets/logos/amberelec.png differ
diff --git a/docs_assets/logos/batocera.svg b/docs_assets/logos/batocera.svg
new file mode 100644
index 00000000..de36c9b4
--- /dev/null
+++ b/docs_assets/logos/batocera.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs_assets/logos/bizhawk.png b/docs_assets/logos/bizhawk.png
new file mode 100644
index 00000000..511597b2
Binary files /dev/null and b/docs_assets/logos/bizhawk.png differ
diff --git a/docs_assets/logos/emudeck.png b/docs_assets/logos/emudeck.png
new file mode 100644
index 00000000..408a9415
Binary files /dev/null and b/docs_assets/logos/emudeck.png differ
diff --git a/docs_assets/logos/emuelec.png b/docs_assets/logos/emuelec.png
new file mode 100644
index 00000000..1c432fc5
Binary files /dev/null and b/docs_assets/logos/emuelec.png differ
diff --git a/docs_assets/logos/knulli.png b/docs_assets/logos/knulli.png
new file mode 100644
index 00000000..fc8885f1
Binary files /dev/null and b/docs_assets/logos/knulli.png differ
diff --git a/docs_assets/logos/lakka.svg b/docs_assets/logos/lakka.svg
new file mode 100644
index 00000000..fc89ee3c
--- /dev/null
+++ b/docs_assets/logos/lakka.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs_assets/logos/minui.png b/docs_assets/logos/minui.png
new file mode 100644
index 00000000..cc59063a
Binary files /dev/null and b/docs_assets/logos/minui.png differ
diff --git a/docs_assets/logos/misterfpga.png b/docs_assets/logos/misterfpga.png
new file mode 100644
index 00000000..35821644
Binary files /dev/null and b/docs_assets/logos/misterfpga.png differ
diff --git a/docs_assets/logos/nextui.png b/docs_assets/logos/nextui.png
new file mode 100644
index 00000000..dd758331
Binary files /dev/null and b/docs_assets/logos/nextui.png differ
diff --git a/docs_assets/logos/recalbox.svg b/docs_assets/logos/recalbox.svg
new file mode 100644
index 00000000..b96d2dd1
--- /dev/null
+++ b/docs_assets/logos/recalbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs_assets/logos/retroarch.svg b/docs_assets/logos/retroarch.svg
new file mode 100644
index 00000000..a35b434a
--- /dev/null
+++ b/docs_assets/logos/retroarch.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs_assets/logos/retrobat.png b/docs_assets/logos/retrobat.png
new file mode 100644
index 00000000..2b4395ac
Binary files /dev/null and b/docs_assets/logos/retrobat.png differ
diff --git a/docs_assets/logos/retrodeck.svg b/docs_assets/logos/retrodeck.svg
new file mode 100644
index 00000000..185f9d63
--- /dev/null
+++ b/docs_assets/logos/retrodeck.svg
@@ -0,0 +1,53 @@
+
+
diff --git a/docs_assets/logos/retropie.png b/docs_assets/logos/retropie.png
new file mode 100644
index 00000000..e3885625
Binary files /dev/null and b/docs_assets/logos/retropie.png differ
diff --git a/docs_assets/logos/rocknix.png b/docs_assets/logos/rocknix.png
new file mode 100644
index 00000000..8158615d
Binary files /dev/null and b/docs_assets/logos/rocknix.png differ
diff --git a/docs_assets/logos/romm.png b/docs_assets/logos/romm.png
new file mode 100644
index 00000000..71d38413
Binary files /dev/null and b/docs_assets/logos/romm.png differ
diff --git a/docs_assets/logos/sources.json b/docs_assets/logos/sources.json
new file mode 100644
index 00000000..590c551d
--- /dev/null
+++ b/docs_assets/logos/sources.json
@@ -0,0 +1,124 @@
+{
+ "note": "Each platform's own logo, owned by its project and shown only to name that platform. Copied once by scripts/fetch_site_images.py.",
+ "images": [
+ {
+ "file": "amberelec.png",
+ "platform": "amberelec",
+ "source": "https://avatars.githubusercontent.com/u/102820909",
+ "owner": "AmberELEC",
+ "licence": "GitHub organisation avatar of AmberELEC"
+ },
+ {
+ "file": "batocera.svg",
+ "platform": "batocera",
+ "source": "https://raw.githubusercontent.com/batocera-linux/batocera-emulationstation/master/resources/splash_batocera.svg",
+ "owner": "Batocera",
+ "licence": "repository licence MIT"
+ },
+ {
+ "file": "bizhawk.png",
+ "platform": "bizhawk",
+ "source": "https://avatars.githubusercontent.com/u/11743303",
+ "owner": "TASVideos",
+ "licence": "GitHub organisation avatar of TASEmulators"
+ },
+ {
+ "file": "emudeck.png",
+ "platform": "emudeck",
+ "source": "https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/icons/EmuDeck.png",
+ "owner": "EmuDeck",
+ "licence": "repository licence GPL-3.0"
+ },
+ {
+ "file": "emuelec.png",
+ "platform": "emuelec",
+ "source": "https://avatars.githubusercontent.com/u/57574835",
+ "owner": "EmuELEC",
+ "licence": "GitHub organisation avatar of EmuELEC"
+ },
+ {
+ "file": "knulli.png",
+ "platform": "knulli",
+ "source": "https://avatars.githubusercontent.com/u/166268572",
+ "owner": "KNULLI",
+ "licence": "GitHub organisation avatar of knulli-cfw"
+ },
+ {
+ "file": "lakka.svg",
+ "platform": "lakka",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/src/xmb/flatui/lakka.svg",
+ "owner": "Lakka (libretro)",
+ "licence": "file from libretro/retroarch-assets, CC-BY-4.0"
+ },
+ {
+ "file": "minui.png",
+ "platform": "minui",
+ "source": "https://avatars.githubusercontent.com/u/225589",
+ "owner": "Shaun Inman",
+ "licence": "GitHub avatar of shauninman, the author of MinUI"
+ },
+ {
+ "file": "misterfpga.png",
+ "platform": "misterfpga",
+ "source": "https://avatars.githubusercontent.com/u/29345272",
+ "owner": "MiSTer FPGA",
+ "licence": "GitHub organisation avatar of MiSTer-devel"
+ },
+ {
+ "file": "nextui.png",
+ "platform": "nextui",
+ "source": "https://avatars.githubusercontent.com/u/202386615",
+ "owner": "LoveRetro",
+ "licence": "GitHub organisation avatar of LoveRetro"
+ },
+ {
+ "file": "recalbox.svg",
+ "platform": "recalbox",
+ "source": "https://raw.githubusercontent.com/homarr-labs/dashboard-icons/main/svg/recalbox.svg",
+ "owner": "Recalbox",
+ "licence": "file from homarr-labs/dashboard-icons, Apache-2.0"
+ },
+ {
+ "file": "retroarch.svg",
+ "platform": "retroarch",
+ "source": "https://raw.githubusercontent.com/libretro/RetroArch/master/media/retroarch-vector_invader-only.svg",
+ "owner": "libretro",
+ "licence": "repository licence GPL-3.0"
+ },
+ {
+ "file": "retrobat.png",
+ "platform": "retrobat",
+ "source": "https://raw.githubusercontent.com/RetroBat-Official/retrobat/main/system/resources/retrobat_logo_notext.png",
+ "owner": "RetroBat",
+ "licence": "repository states no licence"
+ },
+ {
+ "file": "retrodeck.svg",
+ "platform": "retrodeck",
+ "source": "https://raw.githubusercontent.com/RetroDECK/RetroDECK/main/res/icon.svg",
+ "owner": "RetroDECK",
+ "licence": "repository licence GPL-3.0"
+ },
+ {
+ "file": "retropie.png",
+ "platform": "retropie",
+ "source": "https://avatars.githubusercontent.com/u/11378204",
+ "owner": "RetroPie",
+ "licence": "GitHub organisation avatar of RetroPie"
+ },
+ {
+ "file": "rocknix.png",
+ "platform": "rocknix",
+ "source": "https://avatars.githubusercontent.com/u/163176886",
+ "owner": "ROCKNIX",
+ "licence": "GitHub organisation avatar of ROCKNIX"
+ },
+ {
+ "file": "romm.png",
+ "platform": "romm",
+ "source": "https://avatars.githubusercontent.com/u/164058018",
+ "owner": "RomM",
+ "licence": "GitHub organisation avatar of rommapp"
+ }
+ ]
+}
diff --git a/docs_assets/og/contribute.png b/docs_assets/og/contribute.png
new file mode 100644
index 00000000..88a40b47
Binary files /dev/null and b/docs_assets/og/contribute.png differ
diff --git a/docs_assets/og/explore.png b/docs_assets/og/explore.png
new file mode 100644
index 00000000..7e4c409d
Binary files /dev/null and b/docs_assets/og/explore.png differ
diff --git a/docs_assets/og/home.png b/docs_assets/og/home.png
new file mode 100644
index 00000000..3d2b7e17
Binary files /dev/null and b/docs_assets/og/home.png differ
diff --git a/docs_assets/og/reference.png b/docs_assets/og/reference.png
new file mode 100644
index 00000000..fc688a7a
Binary files /dev/null and b/docs_assets/og/reference.png differ
diff --git a/docs_assets/og/setup.png b/docs_assets/og/setup.png
new file mode 100644
index 00000000..84bd6f81
Binary files /dev/null and b/docs_assets/og/setup.png differ
diff --git a/docs_assets/og/start.png b/docs_assets/og/start.png
new file mode 100644
index 00000000..15245230
Binary files /dev/null and b/docs_assets/og/start.png differ
diff --git a/docs_assets/overrides/404.html b/docs_assets/overrides/404.html
new file mode 100644
index 00000000..59ad2c3d
--- /dev/null
+++ b/docs_assets/overrides/404.html
@@ -0,0 +1,37 @@
+{% extends "main.html" %}
+
+{#
+ The page a stale link lands on. Pages have moved before (file cards
+ refiled between manufacturers), so it offers the search, the two pages a
+ visitor most often wants, and the list a moved emulator, system or
+ platform page belongs to.
+#}
+{% block content %}
+
Page not found
+ This address has no page. It may have moved since the link was written.
+ Search the site
+
+
+
+{% endblock %}
diff --git a/docs_assets/overrides/main.html b/docs_assets/overrides/main.html
index 4348d78c..893d3b1e 100644
--- a/docs_assets/overrides/main.html
+++ b/docs_assets/overrides/main.html
@@ -9,25 +9,43 @@
taking on two image dependencies. The links get shared on Discord, Reddit and
forums, where a bare URL with no preview is the difference between a card and
a grey rectangle.
+
+ One sharing card per section (docs_assets/og, made by
+ scripts/make_og_cards.py). The section is the page's level when the
+ generator gives one, otherwise it follows from the URL.
#}
{% block extrahead %}
{% set page_title = page.meta.title if page and page.meta and page.meta.title else (page.title if page and page.title else config.site_name) %}
{% set page_description = page.meta.description if page and page.meta and page.meta.description else config.site_description %}
{% set page_url = page.canonical_url if page and page.canonical_url else config.site_url %}
- {% set preview_image = config.site_url ~ 'assets/images/logo.png' if config.site_url else '' %}
+ {% set url = page.url if page and page.url else '' %}
+ {% set level = page.meta.level if page and page.meta and page.meta.level else '' %}
+ {% if not url %}{% set section = 'home' %}
+ {% elif level in ['start', 'setup', 'explore', 'reference', 'contribute'] %}{% set section = level %}
+ {% elif url.startswith('which-pack') or url.startswith('wiki/first-install') or url.startswith('wiki/faq') or url.startswith('wiki/getting-started') %}{% set section = 'start' %}
+ {% elif url.startswith('platforms') %}{% set section = 'setup' %}
+ {% elif url.startswith('systems') or url.startswith('emulators') or url.startswith('files') %}{% set section = 'explore' %}
+ {% elif url.startswith('contributing') or url.startswith('wiki/adding') or url.startswith('wiki/profiling') or url.startswith('wiki/testing') or url.startswith('wiki/release') %}{% set section = 'contribute' %}
+ {% else %}{% set section = 'reference' %}{% endif %}
+ {% set preview_image = config.site_url ~ 'assets/og/' ~ section ~ '.png' if config.site_url else '' %}
-
+
{% if page_url %} {% endif %}
- {% if preview_image %} {% endif %}
+ {% if preview_image %}
+
+
+
+
+ {% endif %}
{# The sitemap, named from every page: a project site under /retrobios/
cannot serve the host-root robots.txt that would announce it. #}
{% if config.site_url %} {% endif %}
-
+
{% if preview_image %} {% endif %}
diff --git a/docs_assets/system-icons/APF - Imagination Machine.png b/docs_assets/system-icons/APF - Imagination Machine.png
new file mode 100644
index 00000000..555187b6
Binary files /dev/null and b/docs_assets/system-icons/APF - Imagination Machine.png differ
diff --git a/docs_assets/system-icons/Acorn - Archimedes.png b/docs_assets/system-icons/Acorn - Archimedes.png
new file mode 100644
index 00000000..2095ae00
Binary files /dev/null and b/docs_assets/system-icons/Acorn - Archimedes.png differ
diff --git a/docs_assets/system-icons/Acorn - BBC Micro.png b/docs_assets/system-icons/Acorn - BBC Micro.png
new file mode 100644
index 00000000..884d75b4
Binary files /dev/null and b/docs_assets/system-icons/Acorn - BBC Micro.png differ
diff --git a/docs_assets/system-icons/Amstrad - CPC.png b/docs_assets/system-icons/Amstrad - CPC.png
new file mode 100644
index 00000000..7f662b08
Binary files /dev/null and b/docs_assets/system-icons/Amstrad - CPC.png differ
diff --git a/docs_assets/system-icons/Apple - Macintosh.png b/docs_assets/system-icons/Apple - Macintosh.png
new file mode 100644
index 00000000..5ebf86fd
Binary files /dev/null and b/docs_assets/system-icons/Apple - Macintosh.png differ
diff --git a/docs_assets/system-icons/Aquaplus - PIECE.png b/docs_assets/system-icons/Aquaplus - PIECE.png
new file mode 100644
index 00000000..8175bd5d
Binary files /dev/null and b/docs_assets/system-icons/Aquaplus - PIECE.png differ
diff --git a/docs_assets/system-icons/Atari - 2600.png b/docs_assets/system-icons/Atari - 2600.png
new file mode 100644
index 00000000..7371a2ad
Binary files /dev/null and b/docs_assets/system-icons/Atari - 2600.png differ
diff --git a/docs_assets/system-icons/Atari - 5200.png b/docs_assets/system-icons/Atari - 5200.png
new file mode 100644
index 00000000..ab577ecd
Binary files /dev/null and b/docs_assets/system-icons/Atari - 5200.png differ
diff --git a/docs_assets/system-icons/Atari - 7800.png b/docs_assets/system-icons/Atari - 7800.png
new file mode 100644
index 00000000..14e55633
Binary files /dev/null and b/docs_assets/system-icons/Atari - 7800.png differ
diff --git a/docs_assets/system-icons/Atari - Jaguar.png b/docs_assets/system-icons/Atari - Jaguar.png
new file mode 100644
index 00000000..a97bc861
Binary files /dev/null and b/docs_assets/system-icons/Atari - Jaguar.png differ
diff --git a/docs_assets/system-icons/Atari - Lynx.png b/docs_assets/system-icons/Atari - Lynx.png
new file mode 100644
index 00000000..e41d17a1
Binary files /dev/null and b/docs_assets/system-icons/Atari - Lynx.png differ
diff --git a/docs_assets/system-icons/Atari - ST.png b/docs_assets/system-icons/Atari - ST.png
new file mode 100644
index 00000000..c1fc39ef
Binary files /dev/null and b/docs_assets/system-icons/Atari - ST.png differ
diff --git a/docs_assets/system-icons/Atari - XEGS.png b/docs_assets/system-icons/Atari - XEGS.png
new file mode 100644
index 00000000..13142d95
Binary files /dev/null and b/docs_assets/system-icons/Atari - XEGS.png differ
diff --git a/docs_assets/system-icons/Bally - Astrocade.png b/docs_assets/system-icons/Bally - Astrocade.png
new file mode 100644
index 00000000..3cdfe989
Binary files /dev/null and b/docs_assets/system-icons/Bally - Astrocade.png differ
diff --git a/docs_assets/system-icons/Bandai - WonderSwan.png b/docs_assets/system-icons/Bandai - WonderSwan.png
new file mode 100644
index 00000000..1a6466c4
Binary files /dev/null and b/docs_assets/system-icons/Bandai - WonderSwan.png differ
diff --git a/docs_assets/system-icons/Bit Corporation - Gamate.png b/docs_assets/system-icons/Bit Corporation - Gamate.png
new file mode 100644
index 00000000..e2e8d9b8
Binary files /dev/null and b/docs_assets/system-icons/Bit Corporation - Gamate.png differ
diff --git a/docs_assets/system-icons/Casio - Loopy.png b/docs_assets/system-icons/Casio - Loopy.png
new file mode 100644
index 00000000..041e2dc6
Binary files /dev/null and b/docs_assets/system-icons/Casio - Loopy.png differ
diff --git a/docs_assets/system-icons/Casio - PV-2000.png b/docs_assets/system-icons/Casio - PV-2000.png
new file mode 100644
index 00000000..eb77b978
Binary files /dev/null and b/docs_assets/system-icons/Casio - PV-2000.png differ
diff --git a/docs_assets/system-icons/Coleco - ColecoVision.png b/docs_assets/system-icons/Coleco - ColecoVision.png
new file mode 100644
index 00000000..d09b36be
Binary files /dev/null and b/docs_assets/system-icons/Coleco - ColecoVision.png differ
diff --git a/docs_assets/system-icons/Commodore - Amiga.png b/docs_assets/system-icons/Commodore - Amiga.png
new file mode 100644
index 00000000..c437d3b5
Binary files /dev/null and b/docs_assets/system-icons/Commodore - Amiga.png differ
diff --git a/docs_assets/system-icons/Commodore - VIC-20.png b/docs_assets/system-icons/Commodore - VIC-20.png
new file mode 100644
index 00000000..21b31423
Binary files /dev/null and b/docs_assets/system-icons/Commodore - VIC-20.png differ
diff --git a/docs_assets/system-icons/Entex - Adventure Vision.png b/docs_assets/system-icons/Entex - Adventure Vision.png
new file mode 100644
index 00000000..667ef134
Binary files /dev/null and b/docs_assets/system-icons/Entex - Adventure Vision.png differ
diff --git a/docs_assets/system-icons/Epoch - Super Cassette Vision.png b/docs_assets/system-icons/Epoch - Super Cassette Vision.png
new file mode 100644
index 00000000..c1587518
Binary files /dev/null and b/docs_assets/system-icons/Epoch - Super Cassette Vision.png differ
diff --git a/docs_assets/system-icons/Fairchild - Channel F.png b/docs_assets/system-icons/Fairchild - Channel F.png
new file mode 100644
index 00000000..cba04c4d
Binary files /dev/null and b/docs_assets/system-icons/Fairchild - Channel F.png differ
diff --git a/docs_assets/system-icons/Fujitsu - FM Towns.png b/docs_assets/system-icons/Fujitsu - FM Towns.png
new file mode 100644
index 00000000..69ab318b
Binary files /dev/null and b/docs_assets/system-icons/Fujitsu - FM Towns.png differ
diff --git a/docs_assets/system-icons/Fujitsu - FM-7.png b/docs_assets/system-icons/Fujitsu - FM-7.png
new file mode 100644
index 00000000..455a850d
Binary files /dev/null and b/docs_assets/system-icons/Fujitsu - FM-7.png differ
diff --git a/docs_assets/system-icons/GCE - Vectrex.png b/docs_assets/system-icons/GCE - Vectrex.png
new file mode 100644
index 00000000..56b2b9da
Binary files /dev/null and b/docs_assets/system-icons/GCE - Vectrex.png differ
diff --git a/docs_assets/system-icons/GamePark - GP32.png b/docs_assets/system-icons/GamePark - GP32.png
new file mode 100644
index 00000000..218bf89c
Binary files /dev/null and b/docs_assets/system-icons/GamePark - GP32.png differ
diff --git a/docs_assets/system-icons/Hartung - Game Master.png b/docs_assets/system-icons/Hartung - Game Master.png
new file mode 100644
index 00000000..95546412
Binary files /dev/null and b/docs_assets/system-icons/Hartung - Game Master.png differ
diff --git a/docs_assets/system-icons/Infocom - Z-Machine.png b/docs_assets/system-icons/Infocom - Z-Machine.png
new file mode 100644
index 00000000..e3b45c71
Binary files /dev/null and b/docs_assets/system-icons/Infocom - Z-Machine.png differ
diff --git a/docs_assets/system-icons/Magnavox - Odyssey2.png b/docs_assets/system-icons/Magnavox - Odyssey2.png
new file mode 100644
index 00000000..550cb1cd
Binary files /dev/null and b/docs_assets/system-icons/Magnavox - Odyssey2.png differ
diff --git a/docs_assets/system-icons/Mattel - Intellivision.png b/docs_assets/system-icons/Mattel - Intellivision.png
new file mode 100644
index 00000000..8f0b3c11
Binary files /dev/null and b/docs_assets/system-icons/Mattel - Intellivision.png differ
diff --git a/docs_assets/system-icons/Microsoft - MSX.png b/docs_assets/system-icons/Microsoft - MSX.png
new file mode 100644
index 00000000..02767eb8
Binary files /dev/null and b/docs_assets/system-icons/Microsoft - MSX.png differ
diff --git a/docs_assets/system-icons/Microsoft - Xbox.png b/docs_assets/system-icons/Microsoft - Xbox.png
new file mode 100644
index 00000000..8a43ff96
Binary files /dev/null and b/docs_assets/system-icons/Microsoft - Xbox.png differ
diff --git a/docs_assets/system-icons/NEC - PC-88.png b/docs_assets/system-icons/NEC - PC-88.png
new file mode 100644
index 00000000..3d25da4d
Binary files /dev/null and b/docs_assets/system-icons/NEC - PC-88.png differ
diff --git a/docs_assets/system-icons/NEC - PC-98.png b/docs_assets/system-icons/NEC - PC-98.png
new file mode 100644
index 00000000..baf2062f
Binary files /dev/null and b/docs_assets/system-icons/NEC - PC-98.png differ
diff --git a/docs_assets/system-icons/NEC - PC-FX.png b/docs_assets/system-icons/NEC - PC-FX.png
new file mode 100644
index 00000000..2669847e
Binary files /dev/null and b/docs_assets/system-icons/NEC - PC-FX.png differ
diff --git a/docs_assets/system-icons/Nintendo - Game Boy Advance.png b/docs_assets/system-icons/Nintendo - Game Boy Advance.png
new file mode 100644
index 00000000..a475840c
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Game Boy Advance.png differ
diff --git a/docs_assets/system-icons/Nintendo - Game Boy Color.png b/docs_assets/system-icons/Nintendo - Game Boy Color.png
new file mode 100644
index 00000000..aa33b387
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Game Boy Color.png differ
diff --git a/docs_assets/system-icons/Nintendo - Game Boy.png b/docs_assets/system-icons/Nintendo - Game Boy.png
new file mode 100644
index 00000000..3a7277b8
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Game Boy.png differ
diff --git a/docs_assets/system-icons/Nintendo - GameCube.png b/docs_assets/system-icons/Nintendo - GameCube.png
new file mode 100644
index 00000000..0ff194ea
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - GameCube.png differ
diff --git a/docs_assets/system-icons/Nintendo - Nintendo 64.png b/docs_assets/system-icons/Nintendo - Nintendo 64.png
new file mode 100644
index 00000000..472e841d
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Nintendo 64.png differ
diff --git a/docs_assets/system-icons/Nintendo - Nintendo 64DD.png b/docs_assets/system-icons/Nintendo - Nintendo 64DD.png
new file mode 100644
index 00000000..15e472ce
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Nintendo 64DD.png differ
diff --git a/docs_assets/system-icons/Nintendo - Nintendo DS.png b/docs_assets/system-icons/Nintendo - Nintendo DS.png
new file mode 100644
index 00000000..e1a6c595
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Nintendo DS.png differ
diff --git a/docs_assets/system-icons/Nintendo - Pokemon Mini.png b/docs_assets/system-icons/Nintendo - Pokemon Mini.png
new file mode 100644
index 00000000..e3fc20ed
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Pokemon Mini.png differ
diff --git a/docs_assets/system-icons/Nintendo - Satellaview.png b/docs_assets/system-icons/Nintendo - Satellaview.png
new file mode 100644
index 00000000..372bda66
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Satellaview.png differ
diff --git a/docs_assets/system-icons/Nintendo - Switch.png b/docs_assets/system-icons/Nintendo - Switch.png
new file mode 100644
index 00000000..b893522d
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Switch.png differ
diff --git a/docs_assets/system-icons/Nintendo - Wii U.png b/docs_assets/system-icons/Nintendo - Wii U.png
new file mode 100644
index 00000000..c9edbf32
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Wii U.png differ
diff --git a/docs_assets/system-icons/Nintendo - Wii.png b/docs_assets/system-icons/Nintendo - Wii.png
new file mode 100644
index 00000000..672080d8
Binary files /dev/null and b/docs_assets/system-icons/Nintendo - Wii.png differ
diff --git a/docs_assets/system-icons/Nokia - N-Gage.png b/docs_assets/system-icons/Nokia - N-Gage.png
new file mode 100644
index 00000000..7786f38b
Binary files /dev/null and b/docs_assets/system-icons/Nokia - N-Gage.png differ
diff --git a/docs_assets/system-icons/Philips - CD-i.png b/docs_assets/system-icons/Philips - CD-i.png
new file mode 100644
index 00000000..bc0811ad
Binary files /dev/null and b/docs_assets/system-icons/Philips - CD-i.png differ
diff --git a/docs_assets/system-icons/Philips - Videopac+.png b/docs_assets/system-icons/Philips - Videopac+.png
new file mode 100644
index 00000000..38e03916
Binary files /dev/null and b/docs_assets/system-icons/Philips - Videopac+.png differ
diff --git a/docs_assets/system-icons/Pioneer - LaserActive.png b/docs_assets/system-icons/Pioneer - LaserActive.png
new file mode 100644
index 00000000..5bcb3345
Binary files /dev/null and b/docs_assets/system-icons/Pioneer - LaserActive.png differ
diff --git a/docs_assets/system-icons/RCA - Studio II.png b/docs_assets/system-icons/RCA - Studio II.png
new file mode 100644
index 00000000..47c0914a
Binary files /dev/null and b/docs_assets/system-icons/RCA - Studio II.png differ
diff --git a/docs_assets/system-icons/SNK - Neo Geo CD.png b/docs_assets/system-icons/SNK - Neo Geo CD.png
new file mode 100644
index 00000000..e575a324
Binary files /dev/null and b/docs_assets/system-icons/SNK - Neo Geo CD.png differ
diff --git a/docs_assets/system-icons/SNK - Neo Geo Pocket.png b/docs_assets/system-icons/SNK - Neo Geo Pocket.png
new file mode 100644
index 00000000..ffa25ff5
Binary files /dev/null and b/docs_assets/system-icons/SNK - Neo Geo Pocket.png differ
diff --git a/docs_assets/system-icons/SNK - Neo Geo.png b/docs_assets/system-icons/SNK - Neo Geo.png
new file mode 100644
index 00000000..f7e28b61
Binary files /dev/null and b/docs_assets/system-icons/SNK - Neo Geo.png differ
diff --git a/docs_assets/system-icons/Sega - 32X.png b/docs_assets/system-icons/Sega - 32X.png
new file mode 100644
index 00000000..292b22dd
Binary files /dev/null and b/docs_assets/system-icons/Sega - 32X.png differ
diff --git a/docs_assets/system-icons/Sega - Beena.png b/docs_assets/system-icons/Sega - Beena.png
new file mode 100644
index 00000000..3deee872
Binary files /dev/null and b/docs_assets/system-icons/Sega - Beena.png differ
diff --git a/docs_assets/system-icons/Sega - Chihiro.png b/docs_assets/system-icons/Sega - Chihiro.png
new file mode 100644
index 00000000..6eab6438
Binary files /dev/null and b/docs_assets/system-icons/Sega - Chihiro.png differ
diff --git a/docs_assets/system-icons/Sega - Dreamcast.png b/docs_assets/system-icons/Sega - Dreamcast.png
new file mode 100644
index 00000000..739918a1
Binary files /dev/null and b/docs_assets/system-icons/Sega - Dreamcast.png differ
diff --git a/docs_assets/system-icons/Sega - Game Gear.png b/docs_assets/system-icons/Sega - Game Gear.png
new file mode 100644
index 00000000..169bbaa1
Binary files /dev/null and b/docs_assets/system-icons/Sega - Game Gear.png differ
diff --git a/docs_assets/system-icons/Sega - Saturn.png b/docs_assets/system-icons/Sega - Saturn.png
new file mode 100644
index 00000000..3c3a03c9
Binary files /dev/null and b/docs_assets/system-icons/Sega - Saturn.png differ
diff --git a/docs_assets/system-icons/Sharp - X1.png b/docs_assets/system-icons/Sharp - X1.png
new file mode 100644
index 00000000..055c9b95
Binary files /dev/null and b/docs_assets/system-icons/Sharp - X1.png differ
diff --git a/docs_assets/system-icons/Sharp - X68000.png b/docs_assets/system-icons/Sharp - X68000.png
new file mode 100644
index 00000000..fdc8380c
Binary files /dev/null and b/docs_assets/system-icons/Sharp - X68000.png differ
diff --git a/docs_assets/system-icons/Sinclair - ZX 81.png b/docs_assets/system-icons/Sinclair - ZX 81.png
new file mode 100644
index 00000000..db75644c
Binary files /dev/null and b/docs_assets/system-icons/Sinclair - ZX 81.png differ
diff --git a/docs_assets/system-icons/Sinclair - ZX Spectrum.png b/docs_assets/system-icons/Sinclair - ZX Spectrum.png
new file mode 100644
index 00000000..465ba9d5
Binary files /dev/null and b/docs_assets/system-icons/Sinclair - ZX Spectrum.png differ
diff --git a/docs_assets/system-icons/Sony - PlayStation 2.png b/docs_assets/system-icons/Sony - PlayStation 2.png
new file mode 100644
index 00000000..f32ab5ea
Binary files /dev/null and b/docs_assets/system-icons/Sony - PlayStation 2.png differ
diff --git a/docs_assets/system-icons/Sony - PlayStation 4.png b/docs_assets/system-icons/Sony - PlayStation 4.png
new file mode 100644
index 00000000..ac2577ff
Binary files /dev/null and b/docs_assets/system-icons/Sony - PlayStation 4.png differ
diff --git a/docs_assets/system-icons/Sony - PlayStation Portable.png b/docs_assets/system-icons/Sony - PlayStation Portable.png
new file mode 100644
index 00000000..6516ef4b
Binary files /dev/null and b/docs_assets/system-icons/Sony - PlayStation Portable.png differ
diff --git a/docs_assets/system-icons/Sony - PlayStation Vita.png b/docs_assets/system-icons/Sony - PlayStation Vita.png
new file mode 100644
index 00000000..81c5710d
Binary files /dev/null and b/docs_assets/system-icons/Sony - PlayStation Vita.png differ
diff --git a/docs_assets/system-icons/Sony - PlayStation.png b/docs_assets/system-icons/Sony - PlayStation.png
new file mode 100644
index 00000000..cb5cbc3c
Binary files /dev/null and b/docs_assets/system-icons/Sony - PlayStation.png differ
diff --git a/docs_assets/system-icons/Texas Instruments - TI-83.png b/docs_assets/system-icons/Texas Instruments - TI-83.png
new file mode 100644
index 00000000..7419784f
Binary files /dev/null and b/docs_assets/system-icons/Texas Instruments - TI-83.png differ
diff --git a/docs_assets/system-icons/Tiger - Game.com.png b/docs_assets/system-icons/Tiger - Game.com.png
new file mode 100644
index 00000000..3accb44a
Binary files /dev/null and b/docs_assets/system-icons/Tiger - Game.com.png differ
diff --git a/docs_assets/system-icons/Tomy - Tutor.png b/docs_assets/system-icons/Tomy - Tutor.png
new file mode 100644
index 00000000..81677a2d
Binary files /dev/null and b/docs_assets/system-icons/Tomy - Tutor.png differ
diff --git a/docs_assets/system-icons/VTech - CreatiVision.png b/docs_assets/system-icons/VTech - CreatiVision.png
new file mode 100644
index 00000000..9635d68a
Binary files /dev/null and b/docs_assets/system-icons/VTech - CreatiVision.png differ
diff --git a/docs_assets/system-icons/VTech - Socrates.png b/docs_assets/system-icons/VTech - Socrates.png
new file mode 100644
index 00000000..eb6c98ad
Binary files /dev/null and b/docs_assets/system-icons/VTech - Socrates.png differ
diff --git a/docs_assets/system-icons/VTech - V.Smile.png b/docs_assets/system-icons/VTech - V.Smile.png
new file mode 100644
index 00000000..c89421e9
Binary files /dev/null and b/docs_assets/system-icons/VTech - V.Smile.png differ
diff --git a/docs_assets/system-icons/Videoton - TVC.png b/docs_assets/system-icons/Videoton - TVC.png
new file mode 100644
index 00000000..77be9b45
Binary files /dev/null and b/docs_assets/system-icons/Videoton - TVC.png differ
diff --git a/docs_assets/system-icons/sources.json b/docs_assets/system-icons/sources.json
new file mode 100644
index 00000000..9e65327f
--- /dev/null
+++ b/docs_assets/system-icons/sources.json
@@ -0,0 +1,321 @@
+{
+ "note": "System icons from libretro/retroarch-assets (xmb/systematic), licensed CC-BY-4.0 by the libretro team. Resized to 48 px.",
+ "images": [
+ {
+ "file": "APF - Imagination Machine.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/APF%20-%20Imagination%20Machine.png"
+ },
+ {
+ "file": "Acorn - Archimedes.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Acorn%20-%20Archimedes.png"
+ },
+ {
+ "file": "Acorn - BBC Micro.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Acorn%20-%20BBC%20Micro.png"
+ },
+ {
+ "file": "Amstrad - CPC.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Amstrad%20-%20CPC.png"
+ },
+ {
+ "file": "Apple - Macintosh.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Apple%20-%20Macintosh.png"
+ },
+ {
+ "file": "Aquaplus - PIECE.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Aquaplus%20-%20PIECE.png"
+ },
+ {
+ "file": "Atari - 2600.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%202600.png"
+ },
+ {
+ "file": "Atari - 5200.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%205200.png"
+ },
+ {
+ "file": "Atari - 7800.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%207800.png"
+ },
+ {
+ "file": "Atari - Jaguar.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%20Jaguar.png"
+ },
+ {
+ "file": "Atari - Lynx.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%20Lynx.png"
+ },
+ {
+ "file": "Atari - ST.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%20ST.png"
+ },
+ {
+ "file": "Atari - XEGS.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Atari%20-%20XEGS.png"
+ },
+ {
+ "file": "Bally - Astrocade.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Bally%20-%20Astrocade.png"
+ },
+ {
+ "file": "Bandai - WonderSwan.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Bandai%20-%20WonderSwan.png"
+ },
+ {
+ "file": "Bit Corporation - Gamate.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Bit%20Corporation%20-%20Gamate.png"
+ },
+ {
+ "file": "Casio - Loopy.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Casio%20-%20Loopy.png"
+ },
+ {
+ "file": "Casio - PV-2000.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Casio%20-%20PV-2000.png"
+ },
+ {
+ "file": "Coleco - ColecoVision.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Coleco%20-%20ColecoVision.png"
+ },
+ {
+ "file": "Commodore - Amiga.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Commodore%20-%20Amiga.png"
+ },
+ {
+ "file": "Commodore - VIC-20.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Commodore%20-%20VIC-20.png"
+ },
+ {
+ "file": "Entex - Adventure Vision.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Entex%20-%20Adventure%20Vision.png"
+ },
+ {
+ "file": "Epoch - Super Cassette Vision.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Epoch%20-%20Super%20Cassette%20Vision.png"
+ },
+ {
+ "file": "Fairchild - Channel F.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Fairchild%20-%20Channel%20F.png"
+ },
+ {
+ "file": "Fujitsu - FM Towns.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Fujitsu%20-%20FM%20Towns.png"
+ },
+ {
+ "file": "Fujitsu - FM-7.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Fujitsu%20-%20FM-7.png"
+ },
+ {
+ "file": "GCE - Vectrex.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/GCE%20-%20Vectrex.png"
+ },
+ {
+ "file": "GamePark - GP32.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/GamePark%20-%20GP32.png"
+ },
+ {
+ "file": "Hartung - Game Master.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Hartung%20-%20Game%20Master.png"
+ },
+ {
+ "file": "Infocom - Z-Machine.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Infocom%20-%20Z-Machine.png"
+ },
+ {
+ "file": "Magnavox - Odyssey2.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Magnavox%20-%20Odyssey2.png"
+ },
+ {
+ "file": "Mattel - Intellivision.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Mattel%20-%20Intellivision.png"
+ },
+ {
+ "file": "Microsoft - MSX.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Microsoft%20-%20MSX.png"
+ },
+ {
+ "file": "Microsoft - Xbox.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Microsoft%20-%20Xbox.png"
+ },
+ {
+ "file": "NEC - PC-88.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/NEC%20-%20PC-88.png"
+ },
+ {
+ "file": "NEC - PC-98.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/NEC%20-%20PC-98.png"
+ },
+ {
+ "file": "NEC - PC-FX.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/NEC%20-%20PC-FX.png"
+ },
+ {
+ "file": "Nintendo - Game Boy Advance.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Game%20Boy%20Advance.png"
+ },
+ {
+ "file": "Nintendo - Game Boy Color.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Game%20Boy%20Color.png"
+ },
+ {
+ "file": "Nintendo - Game Boy.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Game%20Boy.png"
+ },
+ {
+ "file": "Nintendo - GameCube.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20GameCube.png"
+ },
+ {
+ "file": "Nintendo - Nintendo 64.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Nintendo%2064.png"
+ },
+ {
+ "file": "Nintendo - Nintendo 64DD.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Nintendo%2064DD.png"
+ },
+ {
+ "file": "Nintendo - Nintendo DS.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Nintendo%20DS.png"
+ },
+ {
+ "file": "Nintendo - Pokemon Mini.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Pokemon%20Mini.png"
+ },
+ {
+ "file": "Nintendo - Satellaview.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Satellaview.png"
+ },
+ {
+ "file": "Nintendo - Switch.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Switch.png"
+ },
+ {
+ "file": "Nintendo - Wii U.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Wii%20U.png"
+ },
+ {
+ "file": "Nintendo - Wii.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nintendo%20-%20Wii.png"
+ },
+ {
+ "file": "Nokia - N-Gage.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Nokia%20-%20N-Gage.png"
+ },
+ {
+ "file": "Philips - CD-i.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Philips%20-%20CD-i.png"
+ },
+ {
+ "file": "Philips - Videopac+.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Philips%20-%20Videopac%2B.png"
+ },
+ {
+ "file": "Pioneer - LaserActive.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Pioneer%20-%20LaserActive.png"
+ },
+ {
+ "file": "RCA - Studio II.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/RCA%20-%20Studio%20II.png"
+ },
+ {
+ "file": "SNK - Neo Geo CD.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/SNK%20-%20Neo%20Geo%20CD.png"
+ },
+ {
+ "file": "SNK - Neo Geo Pocket.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/SNK%20-%20Neo%20Geo%20Pocket.png"
+ },
+ {
+ "file": "SNK - Neo Geo.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/SNK%20-%20Neo%20Geo.png"
+ },
+ {
+ "file": "Sega - 32X.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%2032X.png"
+ },
+ {
+ "file": "Sega - Beena.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Beena.png"
+ },
+ {
+ "file": "Sega - Chihiro.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Chihiro.png"
+ },
+ {
+ "file": "Sega - Dreamcast.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Dreamcast.png"
+ },
+ {
+ "file": "Sega - Game Gear.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Game%20Gear.png"
+ },
+ {
+ "file": "Sega - Saturn.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sega%20-%20Saturn.png"
+ },
+ {
+ "file": "Sharp - X1.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sharp%20-%20X1.png"
+ },
+ {
+ "file": "Sharp - X68000.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sharp%20-%20X68000.png"
+ },
+ {
+ "file": "Sinclair - ZX 81.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sinclair%20-%20ZX%2081.png"
+ },
+ {
+ "file": "Sinclair - ZX Spectrum.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sinclair%20-%20ZX%20Spectrum.png"
+ },
+ {
+ "file": "Sony - PlayStation 2.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation%202.png"
+ },
+ {
+ "file": "Sony - PlayStation 4.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation%204.png"
+ },
+ {
+ "file": "Sony - PlayStation Portable.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation%20Portable.png"
+ },
+ {
+ "file": "Sony - PlayStation Vita.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation%20Vita.png"
+ },
+ {
+ "file": "Sony - PlayStation.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Sony%20-%20PlayStation.png"
+ },
+ {
+ "file": "Texas Instruments - TI-83.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Texas%20Instruments%20-%20TI-83.png"
+ },
+ {
+ "file": "Tiger - Game.com.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Tiger%20-%20Game.com.png"
+ },
+ {
+ "file": "Tomy - Tutor.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Tomy%20-%20Tutor.png"
+ },
+ {
+ "file": "VTech - CreatiVision.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/VTech%20-%20CreatiVision.png"
+ },
+ {
+ "file": "VTech - Socrates.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/VTech%20-%20Socrates.png"
+ },
+ {
+ "file": "VTech - V.Smile.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/VTech%20-%20V.Smile.png"
+ },
+ {
+ "file": "Videoton - TVC.png",
+ "source": "https://raw.githubusercontent.com/libretro/retroarch-assets/master/xmb/systematic/png/Videoton%20-%20TVC.png"
+ }
+ ]
+}
diff --git a/platforms/_registry.yml b/platforms/_registry.yml
index dcc12fd8..f10c54cb 100644
--- a/platforms/_registry.yml
+++ b/platforms/_registry.yml
@@ -665,7 +665,7 @@ platforms:
config: romm.yml
status: active
extract_to: library/bios/
- logo: https://avatars.githubusercontent.com/u/168586850
+ logo: https://avatars.githubusercontent.com/u/164058018
scraper: romm
source_url: https://raw.githubusercontent.com/rommapp/romm/master/backend/models/fixtures/known_bios_files.json
source_format: json
@@ -727,7 +727,7 @@ platforms:
config: rocknix.yml
status: active
extract_to: /storage/roms/bios/
- logo: https://avatars.githubusercontent.com/u/152618023
+ logo: https://avatars.githubusercontent.com/u/163176886
scraper: rocknix
schedule: weekly
target_scraper: rocknix_targets
@@ -897,7 +897,7 @@ platforms:
config: misterfpga.yml
status: active
extract_to: /media/fat/games/
- logo: https://avatars.githubusercontent.com/u/47264183
+ logo: https://avatars.githubusercontent.com/u/29345272
scraper: misterfpga
source_url: https://raw.githubusercontent.com/ajgowans/BiosDB_MiSTer/db/bios_db.json.zip
source_format: mister_downloader_db
@@ -980,7 +980,6 @@ platforms:
# minarch hands each core SDCARD_PATH/Bios/
# (workspace/all/minarch/minarch.c:3532).
extract_to: /
- logo: https://avatars.githubusercontent.com/u/10894566
scraper: myminui
# minarch hands each core a folder and names no file (workspace/all/minarch/minarch.c:3532):
# there is no BIOS list of its own to export corrected.
diff --git a/scripts/fetch_site_images.py b/scripts/fetch_site_images.py
new file mode 100644
index 00000000..410b0214
--- /dev/null
+++ b/scripts/fetch_site_images.py
@@ -0,0 +1,187 @@
+#!/usr/bin/env python3
+"""Download the platform logos and system icons the site shows, once.
+
+The site served these from other hosts: GitHub avatars and files on the
+``master`` branch of upstream repositories. A rename upstream broke an image
+in silence, and every page view hit third-party hosts. This tool copies them
+into ``docs_assets/logos/`` and ``docs_assets/system-icons/``, which are
+committed, and records where each came from in a ``sources.json`` beside
+them. The site build only reads those copies (``sitediagrams.localize_images``).
+
+Raster images are normalised to a square PNG (96 px for logos, 48 px for
+system icons) so every tile has the same weight; SVG is kept as published.
+Normalising needs Pillow. This is a maintenance tool run by hand when a
+logo changes, not a build step: the build stays on the standard library
+and PyYAML.
+
+ python scripts/fetch_site_images.py # logos and icons
+ python scripts/fetch_site_images.py --only logos
+"""
+
+from __future__ import annotations
+
+import argparse
+import io
+import json
+import sys
+import urllib.error
+import urllib.parse
+import urllib.request
+from pathlib import Path
+
+import yaml
+
+ROOT = Path(__file__).resolve().parent.parent
+sys.path.insert(0, str(ROOT / "scripts"))
+
+LOGO_DIR = ROOT / "docs_assets" / "logos"
+ICON_DIR = ROOT / "docs_assets" / "system-icons"
+LOGO_SIZE = 96
+ICON_SIZE = 48
+AVATAR_HOST = "avatars.githubusercontent.com"
+USER_AGENT = "retrobios-site-images"
+
+# Who owns each mark. Logos are shown to name the platform they belong to;
+# the note says so, and gives the licence of the repository the file was
+# taken from when that repository states one.
+OWNERS = {
+ "retroarch": ("libretro", "repository licence GPL-3.0"),
+ "lakka": ("Lakka (libretro)", "file from libretro/retroarch-assets, CC-BY-4.0"),
+ "batocera": ("Batocera", "repository licence MIT"),
+ "recalbox": ("Recalbox", "file from homarr-labs/dashboard-icons, Apache-2.0"),
+ "retrobat": ("RetroBat", "repository states no licence"),
+ "emudeck": ("EmuDeck", "repository licence GPL-3.0"),
+ "retrodeck": ("RetroDECK", "repository licence GPL-3.0"),
+ "romm": ("RomM", "GitHub organisation avatar of rommapp"),
+ "rocknix": ("ROCKNIX", "GitHub organisation avatar of ROCKNIX"),
+ "amberelec": ("AmberELEC", "GitHub organisation avatar of AmberELEC"),
+ "emuelec": ("EmuELEC", "GitHub organisation avatar of EmuELEC"),
+ "knulli": ("KNULLI", "GitHub organisation avatar of knulli-cfw"),
+ "retropie": ("RetroPie", "GitHub organisation avatar of RetroPie"),
+ "bizhawk": ("TASVideos", "GitHub organisation avatar of TASEmulators"),
+ "misterfpga": ("MiSTer FPGA", "GitHub organisation avatar of MiSTer-devel"),
+ "minui": ("Shaun Inman", "GitHub avatar of shauninman, the author of MinUI"),
+ "nextui": ("LoveRetro", "GitHub organisation avatar of LoveRetro"),
+}
+
+
+def fetch(url: str) -> bytes:
+ request = urllib.request.Request(url, headers={"User-Agent": USER_AGENT})
+ with urllib.request.urlopen(request, timeout=60) as response:
+ return response.read()
+
+
+def square_png(data: bytes, size: int) -> bytes:
+ try:
+ from PIL import Image
+ except ImportError as exc:
+ raise SystemExit("Pillow is needed to normalise raster images: pip install Pillow") from exc
+ image = Image.open(io.BytesIO(data)).convert("RGBA")
+ image.thumbnail((size, size), Image.LANCZOS)
+ tile = Image.new("RGBA", (size, size), (0, 0, 0, 0))
+ tile.paste(image, ((size - image.width) // 2, (size - image.height) // 2), image)
+ out = io.BytesIO()
+ tile.save(out, "PNG", optimize=True)
+ return out.getvalue()
+
+
+def is_svg(data: bytes) -> bool:
+ head = data[:512].lstrip().lower()
+ return head.startswith(b" bytes:
+ lowered = data.lower()
+ for token in (b"