├── .env ├── .github └── workflows │ └── lint.yml ├── .gitignore ├── .vscode └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── eslint.config.mjs ├── filters ├── classics │ ├── arcade-classics.js │ ├── atari-classic.js │ ├── c64-classic.js │ ├── genesis-classic.js │ ├── neogeo-classic.js │ ├── nes-classic.js │ ├── playstation-classic.js │ ├── snes-classic.js │ └── turbografx-classic.js ├── donkeykong.json ├── horror-games │ ├── horror-arcade.js │ ├── horror-atari2600.js │ ├── horror-gb.js │ ├── horror-gba.js │ ├── horror-gbc.js │ ├── horror-genesis.js │ ├── horror-n64.js │ ├── horror-nes.js │ ├── horror-psp.js │ ├── horror-psx.js │ └── horror-snes.js ├── mario.json ├── nintendolife │ ├── gb-top50.js │ ├── gba-top50.js │ ├── gbc-top50.js │ ├── n3ds-top50.js │ ├── nes-top50.js │ └── snes-top50.js ├── pokemon.json ├── retro-sanctuary │ ├── 3do-top40.js │ ├── dreamcast-top100.js │ ├── gc-top100.js │ ├── genesis-top100.js │ ├── mastersystem-top100.js │ ├── n64-top100.js │ ├── nes-top100.js │ ├── psx-top100.js │ ├── saturn-top100.js │ ├── snes-top100.js │ ├── tg-cd-top50.js │ ├── tg16-top100.js │ └── zxspectrum-top100.js ├── rg351p │ ├── n64-compat.js │ └── psp-compat.js ├── top35-gb.json ├── top35-gba.json ├── top35-gc.json ├── top35-n64.json ├── top35-nes.json ├── top35-psx.json └── top35-snes.json ├── package-lock.json ├── package.json ├── skraper ├── mix3.xml └── screenshot.xml ├── src ├── actions │ ├── backup.ts │ ├── collection.ts │ ├── copy.ts │ ├── duplicates.ts │ ├── es-de.ts │ ├── folder.ts │ ├── image-resize.ts │ ├── image-type.ts │ ├── lock.ts │ ├── marquee.ts │ ├── playlists.ts │ ├── retroarch.ts │ ├── simplemenu.ts │ ├── simplify.ts │ ├── thumbnail.ts │ ├── unlock.ts │ └── video.ts ├── assets │ └── folder.png ├── cli.ts ├── gamelist-types.ts ├── index.ts └── utils │ ├── env.ts │ ├── filter.ts │ ├── gamelist.ts │ └── system.ts └── tsconfig.json /.env: -------------------------------------------------------------------------------- 1 | # These are all environment variables that allow you to override the default values 2 | 3 | # Directory where metadata media files are stored 4 | GAMELIST_MEDIA="media" 5 | # Subdirectory containing 2D boxart images 6 | GAMELIST_BOX2D="box2d" 7 | # Subdirectory containing 3D boxart images 8 | GAMELIST_BOX3D="box3d" 9 | # Subdirectory containing mixed images 10 | # For example, screenshot with 3d boxart and marquee together 11 | GAMELIST_MIXED="mixed" 12 | # Subdirectory containing screenshot images 13 | GAMELIST_SCREENSHOT="screenshot" 14 | # Subdirectory containing title screen images 15 | GAMELIST_TITLE="title" 16 | # Subdirectory containing marquee images 17 | GAMELIST_MARQUEE="wheel" 18 | # Subdirectory containing thumbnail images 19 | GAMELIST_THUMBNAIL="thumbnail" 20 | # Subdirectory containing video snaps 21 | GAMELIST_SNAP="snap" 22 | # Subdirectory containing manual pdf files 23 | GAMELIST_MANUAL="manual" 24 | # Subdirectory containing folder images 25 | GAMELIST_FOLDERS="folders" 26 | # Files & Directories to ignore when generating playlists (semicolon separated) 27 | GAMELIST_PLAYLIST_IGNORE="media;hacks;bios.zip;astrocde.zip;astrocdl.zip;astrocdw.zip;a2diskiing.zip;apple2.zip;d2fdc.zip;cdimono1.zip;neogeo.zip" 28 | # EmulationStation-DE user config subdirectory containing system media 29 | ESDE_MEDIA="downloaded_media" 30 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | # Triggers the workflow on push or pull request events 7 | on: [push, pull_request] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - uses: actions/setup-node@v4 15 | with: 16 | node-version: 'lts/*' 17 | cache: 'npm' 18 | - run: npm ci 19 | - run: npm run lint 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env.test 73 | 74 | # parcel-bundler cache (https://parceljs.org/) 75 | .cache 76 | 77 | # Next.js build output 78 | .next 79 | 80 | # Nuxt.js build / generate output 81 | .nuxt 82 | dist 83 | 84 | # Gatsby files 85 | .cache/ 86 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 87 | # https://nextjs.org/blog/next-9-1#public-directory-support 88 | # public 89 | 90 | # vuepress build output 91 | .vuepress/dist 92 | 93 | # Serverless directories 94 | .serverless/ 95 | 96 | # FuseBox cache 97 | .fusebox/ 98 | 99 | # DynamoDB Local files 100 | .dynamodb/ 101 | 102 | # TernJS port file 103 | .tern-port 104 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "**/logs": true, 4 | "**/*.log": true, 5 | "**/npm-debug.log*": true, 6 | "**/yarn-debug.log*": true, 7 | "**/yarn-error.log*": true, 8 | "**/lerna-debug.log*": true, 9 | "**/report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json": true, 10 | "**/pids": true, 11 | "**/*.pid": true, 12 | "**/*.seed": true, 13 | "**/*.pid.lock": true, 14 | "**/lib-cov": true, 15 | "**/coverage": true, 16 | "**/*.lcov": true, 17 | "**/.nyc_output": true, 18 | "**/.grunt": true, 19 | "**/bower_components": true, 20 | "**/.lock-wscript": true, 21 | "build/Release": true, 22 | "**/node_modules/": true, 23 | "**/jspm_packages/": true, 24 | "**/typings/": true, 25 | "**/*.tsbuildinfo": true, 26 | "**/.npm": true, 27 | "**/.eslintcache": true, 28 | "**/.rpt2_cache/": true, 29 | "**/.rts2_cache_cjs/": true, 30 | "**/.rts2_cache_es/": true, 31 | "**/.rts2_cache_umd/": true, 32 | "**/.node_repl_history": true, 33 | "**/*.tgz": true, 34 | "**/.yarn-integrity": true, 35 | "**/.env.test": true, 36 | "**/.cache": true, 37 | "**/.next": true, 38 | "**/.nuxt": true, 39 | "**/dist": true, 40 | "**/.cache/": true, 41 | ".vuepress/dist": true, 42 | "**/.serverless/": true, 43 | "**/.fusebox/": true, 44 | "**/.dynamodb/": true, 45 | "**/.tern-port": true 46 | } 47 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes will be documented in this file. 4 | 5 | ## 1.4.0 - 2021-09-18 6 | 7 | * Added support for `folder` action, which can add and remove directory `` entries and their contained games. Supports customizing name, description and icon for folder entries themselves. 8 | 9 | ## 1.3.0 - 2021-09-14 10 | 11 | * Added support for `thumbnail` action, which works similar to `marquee` and `video` actions, but with the added ability to generate the thumbnail images from an existing asset image type and scale it down into thumbnail size. 12 | 13 | ## 1.2.0 - 2021-09-05 14 | 15 | * Added `collection` action which generates EmulationStation `.cfg` collection files, with support for filters. 16 | * Added `marquee` action which adds or removes `` image metadata. 17 | * Updated `copy` action to support `--no-marquee` option. 18 | * Updated `copy` and `convert` action to support filters. 19 | * Renamed `remove-video` action to `video` and now supports both adding or removing `