{"id":19411781,"url":"https://github.com/nickheap2/retroarch-asset-server","last_synced_at":"2025-02-25T02:29:44.361Z","repository":{"id":128963885,"uuid":"476793661","full_name":"NickHeap2/retroarch-asset-server","owner":"NickHeap2","description":"RetroArch asset server - serve custom assets to RetroArch content downloader","archived":false,"fork":false,"pushed_at":"2023-02-12T02:46:50.000Z","size":3437,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-07T15:23:42.110Z","etag":null,"topics":["asset","content","emulation","retroarch","server"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NickHeap2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-01T16:27:15.000Z","updated_at":"2024-09-05T13:26:27.000Z","dependencies_parsed_at":"2023-06-14T23:30:20.632Z","dependency_job_id":null,"html_url":"https://github.com/NickHeap2/retroarch-asset-server","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickHeap2%2Fretroarch-asset-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickHeap2%2Fretroarch-asset-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickHeap2%2Fretroarch-asset-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickHeap2%2Fretroarch-asset-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NickHeap2","download_url":"https://codeload.github.com/NickHeap2/retroarch-asset-server/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240589076,"owners_count":19825295,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asset","content","emulation","retroarch","server"],"created_at":"2024-11-10T12:23:07.956Z","updated_at":"2025-02-25T02:29:44.341Z","avatar_url":"https://github.com/NickHeap2.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RetroArch asset server\n\nThis is an implementation of the Online Updater Content Downloader that is built into RetroArch.  \nYou can use it to serve up your ROMs, and their required BIOS files, from a full rom set to your devices running RetroArch.  \nMy use case is I have a PC with the MAME 0.78 ROM set that I want to be able to easily get select games onto my switchrooted Nintendo Switch without faffing around with memory cards.  \n\n[![Node.js CI](https://github.com/NickHeap2/retroarch-asset-server/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/NickHeap2/retroarch-asset-server/actions/workflows/main.yml)\n[![Standardjs](https://github.com/NickHeap2/retroarch-asset-server/actions/workflows/lint.yml/badge.svg?branch=main)](https://github.com/NickHeap2/retroarch-asset-server/actions/workflows/lint.yml)\n[![CodeQL](https://github.com/NickHeap2/retroarch-asset-server/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/NickHeap2/retroarch-asset-server/actions/workflows/codeql-analysis.yml)\n\n### Features\n* Browse ROMs by Description, Manufacturer, ROM Name and Year\n* Download your ROM plus any required BIOS to your device\n\n### Start your server where your ROMs are  \n![Asset Server](/resources/start.png \"Asset Server\")  \n### Download your ROMs to your device  \n![Content Downloader](/resources/asset-server.gif \"Content Downloader\")\n\n## First Run the server\nDownload the server executable for your platform from https://github.com/NickHeap2/retroarch-asset-server/releases\n``` text\nUsage: retroarch-asset-server [options]\n\nOptions:\n  -V, --version                 output the version number\n  -d, --dat-file \u003cdatfile\u003e      MAME dat file to serve\n  -r, --rom-folder \u003cromfolder\u003e  ROM folder for roms defined in dat file\n  -p, --port \u003cport\u003e             Port for server to listen on (default: 5050)\n  -v, --verbose                 Verbose logging (default: false)\n  -h, --help                    display help for command\n```\n\n### Run server on default port 5050 with required options\n``` text\nretroarch-asset-server --dat-file \"./MAME 078.dat\" --rom-folder ./roms\n```\n\n### Run server on port 6000 with verbose request logging\n``` text\nretroarch-asset-server --dat-file \"./MAME 078.dat\" --rom-folder ./roms --port 6000 --verbose\n```\n\n## Then Configure your RetroArch install\nIn your `retroarch.cfg` change the line below:\n``` ini\ncore_updater_buildbot_assets_url = \"http://buildbot.libretro.com/assets/\"\n```\nto\n``` ini\ncore_updater_buildbot_assets_url = \"http://localhost:5050/assets/\"\n```\n\nYou can also use ngrok to allow the content downloader to work over the internet.\n\n## The pattern that the Online Updater Content Downloader uses\nThe calls below are what we implement in our content downloader.\n\n### `GET /assets/cores/.index-dirs`\nThis should return a \\n delimited list of directories.  \nFor my case atm I just return Arcade.\n\n### `GET /assets/cores/Arcade`\nThis has to return a 301 permanent redirect to the location /assets/cores/Arcade/.\n\n### `GET /assets/cores/Arcade/.index`\nThis should return a \\n delimited list of zip files.  \nIn our case though we return a file name with the ROM description, manufacturer and year included.  \ne.g. `1943 - The Battle of Midway (US)        [Capcom 1987]--1943.zip`  \nLuckily the selected file name in RetroArch has a scrolling preview if it doesn't fit on screen.\n\n### `GET /assets/cores/Arcade/.index-dirs`\nThis should return a list of sub-directories.\nAs there currently aren't any sub-directories this returns a 404.\n\n### `GET /assets/cores/Arcade/1943%20-%20The%20Battle%20of%20Midway%20%28US%29%20%20%20%20%20%20%20%20%5BCapcom%201987%5D--1943.zip`\nThis should return the zip file that is selected.  \nIn our case we create an in memory zip file with that name, add a directory of Arcade and add the actual `1943.zip` into that directory.  \nThis then gets extracted into the downloads directory in RetroArch as Arcade/1943.zip.  \nWe also now attach any needed bios file that the rom needs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickheap2%2Fretroarch-asset-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickheap2%2Fretroarch-asset-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickheap2%2Fretroarch-asset-server/lists"}