Skip to content

Commit 077c947

Browse files
committed
Merge branch 'add-retroarch-frontend' of https://github.com/SineSwiper/skyscraper into SineSwiper--add-retroarch-frontend
2 parents 73cf3cb + 971069d commit 077c947

53 files changed

Lines changed: 2399 additions & 1205 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

VERSION.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION="3.19.0-dev"
1+
VERSION="3.19.0"

docs/CHANGELOG.md

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,73 @@
33
This page summarizes the changes of each Skyscraper release, a [changlog for
44
humans](https://keepachangelog.com).
55

6-
### Version 3.19.0 (2026-TBA)
7-
6+
### Version 3.19.0 (2026-03-16)
7+
8+
- Added: BBC Micro is now supported out-of-the-box as
9+
[platform](https://github.com/Gemba/skyscraper/blob/23ca6fda9402513df45febe0e21e6041b116b067/peas.json#L369).
10+
Spin up your BBC emulator, like
11+
[b-em](https://github.com/FollyMaddy/RetroPie-Share/blob/main/00-scriptmodules-00/emulators/b-em-a5.sh)
12+
or [libretro
13+
b2](https://github.com/Gemba/RetroPie-BSides/blob/main/docs/Libretro_bbcmicro.md)
14+
(since 3.18.4)
15+
- Added: Ability to [disable colored terminal
16+
output](CLIHELP.md#disable-terminal-colors) by setting the environment
17+
variable `NO_COLOR=1`. Coloring will now automagically disabled when using
18+
file redirection of stdout or running Skyscraper via a serial link.
19+
- Added: [JSON
20+
Schema](https://github.com/Gemba/skyscraper/blob/master/supplementary/scraperdata/peas-schema.json)
21+
file for platform definition file of Skyscraper and a [Python
22+
script](https://github.com/Gemba/skyscraper/blob/master/supplementary/scraperdata/peas_validate_with_json_schema.py)
23+
to validate your `peas_local.json` file against it. _RetroPie users_: Please
24+
update the skyscraper scriptmodule in the RetroPie-Setup first before updating
25+
Skyscraper.
26+
- Added: Workaround for ES-DE's potential invalid gamelist: ES-DE places in some
27+
conditions an `<alternativeEmulator/>` as second root element to a
28+
`gamelist.xml` file. Any serious XML parser will refuse this file as non
29+
standard-conformant XML, so did Skyscraper/Qt. Thanks for reporting in the
30+
first place and testing on macOS @DFelten
31+
- Added: Mitigation of Screenscraper.fr long running responses on some games
32+
causing games not to be scraped (since 3.18.4), thanks for reporting
33+
@saitamasahil, @ZacharyFoxx and @therealpxc
34+
- Added: CLI option [`--stderr`](CLIHELP.md#--stderr) which explicitly prints a
35+
one liner to stderr when Skyscraper runs into an error condition in addition
36+
to the stdout output. Parsing this single line makes integrations into other
37+
programs more convenient (leaning towards
38+
[Scappy](https://github.com/gabrielfvale/scrappy)).
39+
- Added: Build evaluates
40+
[`SYSCONFDIR`](https://github.com/Gemba/skyscraper/blob/23ca6fda9402513df45febe0e21e6041b116b067/skyscraper.pro#L33)
41+
environment variable to allow [filesystem hierarchy
42+
standard](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)
43+
compliant builds and packaging (since 3.18.3). Thanks @Newchair2644.
44+
- Changed: Add ellipsis (...) on truncated text description, when
45+
[`maxlength`](CONFIGINI.md#maxlength) is reached.
46+
- Changed: Initially implemented logic from 2019 which removes cache files when
47+
either parameter (m _or_ t) of `--cache purge:m=...,t=...` are matched. Updated
48+
implementation removes resource if and only if both parameters (m _and_ t) are
49+
matched, cf. thread in [RetroPie Forum](https://retropie.org.uk/forum/post/306255) (since 3.18.3)
50+
- Changed: More pleasant replacement for colons (:) in texts for Pegasus frontend.
51+
Now uses the Unicode counterpart (Modifier Letter Colon, 0xa789) (since 3.18.3). Thanks
52+
@LeeBigelow
53+
- Changed: Changes in The GamesDB API implied some re-write of Skyscraper's TGDB
54+
scraper module. See paragraphs on changed [API limits and private key
55+
usage](https://gemba.github.io/skyscraper/SCRAPINGMODULES/#thegamesdb-tgdb)
56+
(since 3.18.5), thanks to the reporters @rudism, @saitamasahil and
57+
@BrandonShega!
58+
- Updated: Docker container can now digest a host provided `config.ini` and
59+
[several improvements](https://github.com/Gemba/skyscraper/pull/221). Kudos to
60+
@rudism
61+
- Updated: Stricter `--cache` command validation to avoid invalid combinations.
862
- Updated: ZXInfo scraper now checks first for file hash match, allow overriding
963
with query parameter or hinting with release year in parenthesis in filename or
1064
via `aliasMap.csv` (since 3.18.2)
11-
- Changed: More pleasant replacement for colons in texts for Pegasus frontend.
12-
Now uses the Unicode counterpart (Modifier Letter Colon, 0xa789). Thanks
13-
@LeeBigelow.
14-
- Fixed: Filename output name of cache operations, thanks @SineSwiper (since
15-
3.18.2)
65+
- Fixed: Some glitches by cache commands which can operate without a platform
66+
given (since 3.18.4). These cache features were added in 3.15.0.
67+
- Fixed: Reverted logic to ignore media during esgamelist ingest, unless they
68+
are explicitly set (e.g., `--flags video`) (since 3.18.3); regression from
69+
3.18.0, cf. thread in [RetroPie Forum](https://retropie.org.uk/forum/post/306218), thanks for reporting
70+
@s1eve-mcdichae1
71+
- Fixed: Filename output name of cache operations (since
72+
3.18.2), thanks @SineSwiper
1673
- Fixed: A set of edgecase bugs, thanks to all reporters.
1774

1875
### Version 3.18.1 (2025-12-23)
@@ -153,8 +210,7 @@ the place to put ideas or to table Skyscraper puzzles.
153210
report:missing](CLIHELP.md#-cache-reportmissingall-textual-artwork-media-or-resource1resource2),
154211
[cache validate](CLIHELP.md#-cache-validate), [cache
155212
vacuum](CLIHELP.md#-cache-vacuum) and [cache
156-
purge](CLIHELP.md#-cache-purgekeywordmodule-andor-type). Thanks #2, @Leukhos
157-
the addition is very appreciated.
213+
purge](CLIHELP.md#-cache-purgekeywordmodule-andor-type). Thanks #2, @Leukhos.
158214
- Fixed: Improvements to the Pegasus frontend, to avoid inconsistency with
159215
existing aliases in the frontend output for the keywords `command/launch` and
160216
`workdir/cwd`. Thanks, @Leukhos for your third submission.

docs/CLIHELP.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ On _non_ RaspiOS-based RetroPie-Installments put the file from
2323

2424
In either case: Open a new bash and press ++tab++ key twice to see it in action.
2525

26+
### Disable Terminal Colors
27+
28+
By default Skyscraper will use ANSI terminal colors. However, colors will be not
29+
be used in the output when you run Skyscraper via a serial console or you apply
30+
file redirection e.g., `Skyscraper ... > out.log`. In any case you can manually
31+
enforce no color output by setting the environment variable `NO_COLOR` to a
32+
non-zero value (a value of zero will show colors). For example:
33+
34+
```bash
35+
NO_COLOR=1 Skyscraper ...
36+
```
37+
38+
The [no-color.org](https://no-color.org) website has additional information.
39+
2640
## Short Options
2741

2842
The most prevalent short options you will use are most likely [`-s`](#-s-module)

docs/FRONTENDS.md

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ Skyscraper will preserve the following metadata when re-generating a game list f
2525

2626
Folder data is not cached by Skyscraper, thus if you delete your `gamelist.xml`, Skyscraper cannot restore the edited folder elements from cache.
2727

28-
Automatic addition of folder elements if [`addFolder`](CONFIGINI.md#addfolders) is true:
28+
Automatic addition of folder elements if [`addFolder`](CONFIGINI.md#addfolders) is true:
2929
If at least one ROM is within a subfolder and this subfolder is not yet part of the `gamelist.xml` file, it will be added with two mandatory subelements:
3030

31-
- `<path/>` reflects the relative subpath from the system folder and
31+
- `<path/>` reflects the relative subpath from the system folder and
3232
- `<name/>`, which represents the direct parent folder of a ROM by default. However, you may edit this to any name which should be shown in EmulationStation.
3333

3434
!!! example
@@ -81,7 +81,7 @@ files into the `downloaded_media` folder (e.g.
8181
`~/ES-DE/downloaded_media/<PLATFORM>/screenshots/` for screenshots) from where
8282
ES-DE will pick them up. ES-DE does not support textures currently. Any manual
8383
or fanart data present in the cache will be put automagically into
84-
`~/ES-DE/downloaded_media/<PLATFORM>` where ES-DE will load it.
84+
`~/ES-DE/downloaded_media/<PLATFORM>` where ES-DE will load it.
8585
This frontend automatically enables the output of backcovers, fanart and manuals
8686
during gamelist creation, whenever cached data is present for a game.
8787

@@ -116,7 +116,7 @@ Over time the fork of EmulationStation in Batocera has diverted stark from the
116116
initial EmulationStation. Thus, the gamelist format is somewhat different, but
117117
the textual scraping elements are still the same. Most notably Batocera
118118
EmulationStation stores a lot of additional information in the gamelist, and the
119-
set of information may differ for each game.
119+
set of information may differ for each game.
120120
Skyscraper aims to cover the most frequent used elements for scraping, currently
121121
fanarts, manuals and videos. See the [scraping
122122
modules](SCRAPINGMODULES.md#capabilities-of-scrapers) for support of these
@@ -143,7 +143,7 @@ every `<PLATFORM>` you scrape.
143143
- Default media file location: `/userdata/roms/<PLATFORM>/{images,videos,manuals}`
144144

145145
If you set a game list location and do not specifiy the ROM folder (input
146-
folder) and media folder, then these are set relatively to the game list folder.
146+
folder) and media folder, then these are set relatively to the game list folder.
147147
This frontend automatically enables the output of backcovers, fanart and manuals
148148
whenever cached data is present for a game.
149149

@@ -217,7 +217,7 @@ Windows desktop users can use SMB shares and can adapt the following steps.
217217
```
218218
You may also set the default [frontend in the
219219
configuration](CONFIGINI.md#frontend), then you can even drop the `-f` CLI
220-
parameter.
220+
parameter.
221221
If you want to use your existing Batocera gamelist and mediafiles (to save
222222
some online scrape cycles), you can do so by using the
223223
[esgamelist](SCRAPINGMODULES.md#emulationstation-style-gamelists) scraping
@@ -283,9 +283,46 @@ You need to add the individual platform rom directories to Pegasus (if they are
283283

284284
!!! info
285285

286-
If you are generating game lists for Pegasus, it is highly recommended to disable third-party game list data sources! Otherwise you will have a mish-mash or different sources showing up in Pegasus. Start the Pegasus frontend, press ESC on the keyboard and choose _Settings_ -> _Enable/disable data sources_ and disable everything in that submenu.
286+
If you are generating game lists for Pegasus, it is highly recommended to disable third-party game list data sources! Otherwise you will have a mish-mash or different sources showing up in Pegasus. Start the Pegasus frontend, press ESC on the keyboard and choose _Settings_ -> _Enable/disable data sources_ and disable everything in that submenu.
287287
Then reload the game lists or restart Pegasus, and all of the platforms should show up with media and game information generated by Skyscraper.
288288

289289
#### Metadata preservation
290290

291-
Skyscraper will preserve any metadata key-value pairs added to the header and / or individual game list entries.
291+
Skyscraper will preserve any metadata key-value pairs added to the header and / or individual game list entries.
292+
293+
### RetroArch
294+
295+
- Default game list location: `/opt/retropie/configs/all/retroarch/playlists`
296+
- Default game list filename: `<DB_NAME>.lpl` (using its own platform name format)
297+
- Default media dir location: `/opt/retropie/configs/all/retroarch/thumbnails/<DB_NAME>/Named_*`
298+
299+
Despite the presence of all of these other fancy frontends, the lower-level RetroArch layer that manages most of your emulator cores has a perfectly-capable GUI in the form of a playlist creator/viewer. The playlists contain each platform's game list, and the playlist viewer has support for covers, screenshots, and logos for each ROM.
300+
301+
#### Configuration
302+
303+
When generating for RetroArch, Skyscraper uses a built-in mapping of platform names to RetroArch database names (e.g., `nes``Nintendo - Nintendo Entertainment System`). If we don't have it in our system, this can be easily added in `platforms_idmap.csv`.
304+
305+
You can optionally use the `-e` parameter with `frontendExtra="<CORE_PATH>;<CORE_NAME>"` to set a default core path/name for the playlist. Or set it in `config.ini`:
306+
307+
```ini
308+
[retroarch]
309+
frontendExtra="<CORE_PATH>;<CORE_NAME>"
310+
```
311+
312+
#### Media Support
313+
314+
RetroArch supports the following media types:
315+
316+
| Media Type | RetroArch Directory |
317+
| :---------- | :-------------- |
318+
| Covers (Box Art) | `Named_Boxarts` |
319+
| Screenshots | `Named_Snaps` |
320+
| Marquees/Wheels (Logos) | `Named_Logos` |
321+
322+
All media files are matched to games by their sanitized game title, not by ROM filename. Title screenshots (`Named_Titles`) are not currently supported.
323+
324+
Media may not all be in PNG formats. You should turn on the _Settings_ -> _Playlists_ -> _Allow All Supported Image Types for Thumbnails_ option in your RetroArch config to support JPEG image displays.
325+
326+
#### Metadata preservation
327+
328+
Skyscraper will preserve existing game titles and paths when re-generating a game list for RetroArch. If an existing playlist file is found and you choose to skip existing entries, Skyscraper will use the old game list as a reference.

hints.xml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,17 @@
3333
<hint>Skyscraper supports the ES-DE frontend gamelist format.</hint>
3434
<hint>You can add new platforms (i.e., systems to scrape) by editing configuration files. See https://gemba.github.io/skyscraper/PLATFORMS</hint>
3535
<hint>You can scrape data from GameBase DB files with Skyscraper. GameBase DBs are a well of information especially for indie or homebrew games for retro systems.</hint>
36-
<hint>Skyscraper supports ten scraping modules: 7 for online sources and 3 for local sources.</hint>
36+
<hint>Skyscraper supports ten scraping modules: Seven for online sources and three for local sources.</hint>
3737
<hint>Pizza and beer go well together.</hint>
3838
<hint>Skyscraper debuted at June, 11th 2017.</hint>
3939
<hint>Skyscraper runs on Linux, macOS and Windows.</hint>
4040
<hint>You can use relative paths for almost every path related option. See https://gemba.github.io/skyscraper/PATHHANDLING</hint>
4141
<hint>For a file extension/suffix option value like '*.ext', you can use the shorter forms '.ext' or even only 'ext'.</hint>
42-
<hint>The supplementary/ folder contains helper scripts to support you in the advanced Skyscraper configuration.</hint>
42+
<hint>The supplementary/scraperdata folder contains helper scripts to support you in the advanced Skyscraper configuration.</hint>
4343
<hint>You can scrape fanart and backcovers with Skyscraper, check the respective options.</hint>
4444
<hint>The flag --buildinfo provides useful information when reporting an issue.</hint>
4545
<hint>Default built-in extensions for game files are: *.m3u, *.ml, *.zip and *.7z</hint>
46+
<hint>You can disable the colored terminal output by setting NO_COLOR=1 as environment variable.</hint>
47+
<hint>You can validate your platforms definition file (peas_local.json) with the script peas_validate_with_json_schema.py of Skyscraper.</hint>
48+
<hint>Albet Einstein's birthdate was on the pi day (3/14/1879), Karl Marx died on the pi day of 1883.</hint>
4649
</hints>

0 commit comments

Comments
 (0)