mirror of
https://github.com/mihawk-99/PS5_RetroArch.git
synced 2026-10-22 00:22:29 -05:00
The WebUI's new SMB page signs in to one server (guest or a user and password), lists its shares, checks a share and folder and saves them in config/smb.cfg on the console; the password is never answered back. RetroArch's file browser shows the share as SMB, after INTERNAL and EXTERNAL. smb:// paths go through RetroArch's VFS to src/ps5_smb_vfs.c (patches/series 0136), read-only and only on the saved server: a core that reads through the VFS streams the file, one that opens paths itself gets a copy in /app0/smb-cache, removed when the content closes. libsmb2 is pinned at the master revision itsPLK/ps5-pkg-manager runs on the PS5 (LGPL-2.1-or-later), built by tools/build-libsmb2.sh for the PS5 and the host and listed in tooling/notices/components.json: RetroArch 1.22.2 has no SMB client. In a title, getaddrinfo is bound to the platform layer's, which resolves nothing, so libsmb2's resolver calls go to RetroArch's own (src/platform_wraps.c); readv, writev, getlogin_r and getprotobyname are wrapped, so libsmb2 adds no import. SMB sockets set SO_NOSIGPIPE. Evidence: evidence/smb-load-content (python3 tools/evidence.py compare evidence/): on the Base PS5 the console's WebUI listed the PC's guest share and saved share/smb-test; Load Content > SMB listed it and a homebrew NES ROM on it ran under FCEUmm, read through the VFS (build a2c7800a, retroarch.log read back over FTP). Gates: tools/verify.sh (format, unit 214, build, integration, evidence 140) with PS5_REUSE_STAGED_CORES=ps5sx2: in this worktree the SDK's prospero-lld wrapper adds -pie to ps5sx2's link (clang passes its long object list in a response file the wrapper cannot read), so ps5sx2 is the main checkout's build of the same pinned revision. Host tests run a Samba server of their own (tests/smb_server.py, no root). Co-Authored-By: Claude <noreply@anthropic.com>
83 lines
36 KiB
HTML
83 lines
36 KiB
HTML
<!doctype html>
|
||
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="theme-color" content="#37184a"><title>RetroArch · PS5</title><link rel="stylesheet" href="app.css"><script src="icons.js" defer></script><script src="settings-guide.js" defer></script><script src="i18n.js" defer></script><script src="app.js" defer></script><script src="add-game.js" defer></script><script src="forwarders.js" defer></script><script src="smb.js" defer></script></head><body>
|
||
<a class="skip-link" href="#main">Skip to content</a>
|
||
|
||
<aside class="sidebar"><a class="brand" href="#overview"><img src="assets/retroarch.svg" width="64" height="43" alt=""><span><strong>RetroArch</strong><small>PS5</small></span></a><nav aria-label="Main navigation"><a href="#overview" data-page="overview" aria-current="page"><span data-ui-icon="layout-dashboard" class="icon "></span><span>Overview</span></a><a href="#content" data-page="content"><span data-ui-icon="folder-open" class="icon "></span><span>Content</span></a><a href="#games" data-page="games"><span data-ui-icon="library-big" class="icon "></span><span>Games</span></a><a href="#forwarders" data-page="forwarders"><span data-ui-icon="gamepad-2" class="icon "></span><span>Game Forwarder</span></a><a href="#smb" data-page="smb"><span data-ui-icon="hard-drive" class="icon "></span><span>SMB</span></a><a href="#media" data-page="media"><span data-ui-icon="download" class="icon "></span><span>Download Media</span></a><a href="#transfers" data-page="transfers"><span data-ui-icon="arrow-up-down" class="icon "></span><span>Transfers</span></a><a href="#settings" data-page="settings"><span data-ui-icon="settings-2" class="icon "></span><span>Settings</span></a></nav><a class="credit" href="https://github.com/mihawk-99" target="_blank" rel="noopener noreferrer"><img src="assets/mihawk.png" width="77" height="80" alt="Mihawk's portrait"><span>made by Mihawk</span></a><a class="icon-credit" href="assets/ICON-CREDITS.txt" target="_blank" rel="noopener">Artwork credits</a></aside>
|
||
<div class="workspace"><header class="release-bar"><span data-ui-icon="info" class="icon release-icon"></span><div class="release-status" role="status"><strong id="release-title">Development build</strong><span id="release-summary">Checking releases…</span></div><button id="show-notes" class="text-button" aria-expanded="false" aria-controls="release-details" hidden>What’s new</button><button id="download-update" class="primary compact" disabled>Update RetroArch</button><button id="check-release" class="secondary compact">Check again</button><a href="https://github.com/mihawk-99/PS5_RetroArch" target="_blank" rel="noopener noreferrer" class="repository">View repository <span data-ui-icon="external-link" class="icon "></span></a><div id="language-header" class="language-slot"></div></header>
|
||
<main id="main" tabindex="-1"><noscript><p class="notice">Enable JavaScript in your browser to upload files and change settings.</p></noscript>
|
||
<section id="release-details" class="panel release-details" hidden aria-labelledby="notes-title"><div class="section-toolbar"><h2 id="notes-title">What’s new</h2><button id="close-notes" class="secondary">Close</button></div><p id="release-date"></p><pre id="release-notes"></pre><a id="release-link" class="primary" target="_blank" rel="noopener noreferrer">View release on GitHub</a></section>
|
||
<section id="update-panel" class="panel update-panel" hidden aria-labelledby="update-title"><div class="section-toolbar"><h2 id="update-title">Update RetroArch</h2><span id="update-tag" class="muted"></span></div><p id="update-message" role="status"></p><progress id="update-progress" aria-label="Preparing update" hidden></progress><p class="help-text">Downloads go directly to your console. Your content, saves, BIOS files and settings are kept. Save your game before installing, wait for RetroArch to close, then reopen it from your launcher.</p><p id="update-development-note" class="help-text" hidden>This replaces your development build with a published release. Features not yet released may be removed.</p><button id="install-update" class="primary" hidden>Install and close RetroArch</button><p id="update-error" class="inline-error" role="alert" hidden></p></section>
|
||
<div id="restart-notice" class="notice restart-notice" hidden role="status"><span><strong>PS5 RetroArch was updated while this page’s server kept running.</strong> Close PS5 RetroArch on the console, wait about 20 seconds, then open it again: some features need it.</span></div><div id="connection-notice" class="notice" hidden><span>Start RetroArch on your PS5, then reconnect.</span> <button id="reconnect" class="secondary">Reconnect</button></div><p id="announcement" class="announcement" role="status" aria-live="polite"></p><div class="page-heading"><h1 id="page-title">Overview</h1><p class="connection" id="connection"><span class="status-dot"></span><span>Connecting to RetroArch…</span></p></div>
|
||
<section id="overview" class="page"><section class="panel alerts-panel" aria-labelledby="alerts-title"><div class="section-toolbar"><div><h2 id="alerts-title">Alerts <span id="alerts-count" class="alert-count" hidden></span></h2><p id="alerts-summary" role="status">Checking required BIOS and system files…</p></div><button id="refresh-alerts" class="secondary">Recheck</button></div><details id="alerts-details" hidden><summary>Review alerts</summary><p class="help-text">Some files are only needed for a particular region or type of content. This checks for files, not whether their contents are valid. Paths starting with /app0 refer to your RetroArch installation folder.</p><div id="alerts-list"></div></details></section><div class="overview-top"><section class="panel upload-panel" aria-labelledby="upload-title"><header class="panel-heading"><span data-ui-icon="cloud-upload" class="icon section-icon"></span><div><h2 id="upload-title">Upload content</h2><p>Add games, ROMs or other files to your PS5</p></div></header>
|
||
<label for="destination" class="destination-label">System</label><select id="destination" disabled><option value="">Content folder</option></select>
|
||
<button class="dropzone" id="dropzone" type="button" disabled><span data-ui-icon="file-text" class="icon "></span><strong>Drop files here</strong><span>or click to browse</span></button><input id="file-input" type="file" multiple hidden><button id="browse-files" disabled class="primary browse-files"><span data-ui-icon="folder-open" class="icon "></span>Browse files</button></section>
|
||
<section class="panel library-panel" aria-labelledby="library-title"><header class="panel-heading"><span data-ui-icon="library-big" class="icon section-icon"></span><div><h2 id="library-title">Your library</h2><p>Browse and manage content on your PS5</p></div></header><div class="library-folders" id="library-folders"><p class="list-message">Loading your library…</p></div></section></div>
|
||
<section class="panel transfers-panel" aria-labelledby="transfers-title"><header class="panel-heading"><span data-ui-icon="arrow-up-down" class="icon section-icon"></span><div><h2 id="transfers-title">Recent transfers</h2><p>Track transfers from this browser session</p></div></header><div class="transfer-list" id="recent-transfers"><div class="empty-state"><span data-ui-icon="file-text" class="icon "></span><p>Your transfers will appear here.</p></div></div></section>
|
||
<section class="panel quick-panel" aria-labelledby="quick-title"><header class="panel-heading"><span data-ui-icon="settings-2" class="icon section-icon"></span><div><h2 id="quick-title">Settings</h2><p>Saved changes apply the next time you open RetroArch</p></div></header><div class="quick-settings"><div class="quick-field"><label for="quick-volume"><span data-ui-icon="volume-2" class="icon "></span>Audio volume</label><div class="range-field"><input id="quick-volume" type="range" min="-80" max="12" value="0" disabled><output for="quick-volume">—</output></div></div><div class="quick-field"><label for="quick-rumble"><span data-ui-icon="gamepad-2" class="icon "></span>Rumble strength</label><div class="range-field"><input id="quick-rumble" type="range" min="0" max="100" value="100" disabled><output for="quick-rumble">—</output></div></div><div class="quick-field"><label for="quick-frontend"><span data-ui-icon="panels-top-left" class="icon "></span>Start with</label><select id="quick-frontend" disabled><option value="ask">Ask every time</option><option value="retroarch">RetroArch</option><option value="es-de">EmulationStation</option></select></div><div class="quick-field"><label for="theme"><span data-ui-icon="moon" class="icon "></span><span id="theme-label">WebUI theme</span></label><select id="theme"><option value="light">Light</option><option value="dark">Dark</option></select></div><a class="primary settings-open" href="#settings"><span data-ui-icon="settings-2" class="icon "></span>Open settings</a></div></section></section>
|
||
|
||
<section id="content" class="page panel" hidden aria-labelledby="content-heading"><div class="section-toolbar"><div><h2 id="content-heading">Your content</h2><p id="storage-info">Games and files stored on your PS5</p></div><button id="refresh-content" class="secondary">Refresh</button></div>
|
||
<nav id="breadcrumbs" aria-label="Content folders"></nav><div class="content-tools"><label class="search-field" for="file-search">Find in this folder<input id="file-search" type="search" placeholder="Search by filename" autocomplete="off"></label><button id="upload-here" class="primary">Upload here</button></div>
|
||
<form id="folder-form" class="folder-form"><label for="folder-name">New folder</label><input id="folder-name" name="folder" placeholder="Folder name" maxlength="255" required><button class="secondary" type="submit">Create folder</button></form><p id="content-error" class="inline-error" role="alert" hidden></p><p id="folder-caption" class="muted"></p><div id="content-list" class="content-list"></div></section>
|
||
<section id="games" class="page" hidden aria-labelledby="games-heading">
|
||
<section class="panel games-panel"><div class="section-toolbar"><div><h2 id="games-heading">Your games</h2><p id="games-summary">Covers, screenshots and details shared by RetroArch, EmulationStation and every frontend</p></div><button id="refresh-games" class="secondary">Refresh</button></div>
|
||
<div class="games-tools"><label>System<span class="system-select"><span id="games-system-icon"></span><select id="games-system"><option value="">All systems</option></select></span></label><label class="search-field">Find a game<input id="games-search" type="search" placeholder="Search by name" autocomplete="off"></label><label class="check-inline"><input id="games-missing" type="checkbox"> Only games missing media</label><button id="add-game-open" class="primary add-game-cta"><span data-ui-icon="plus"></span>Add Game</button></div>
|
||
<div class="games-view"><span>Show</span><div class="segmented" role="radiogroup" aria-label="Picture on each card"><label><input type="radio" name="games-view" value="cover" checked><span data-view-icon="cover">Box art (front)</span></label><label><input type="radio" name="games-view" value="box3d"><span data-view-icon="box3d">3D box</span></label><label><input type="radio" name="games-view" value="logo"><span data-view-icon="logo">Logo</span></label><label><input type="radio" name="games-view" value="physical"><span data-view-icon="physical">Cartridge or disc</span></label></div></div>
|
||
<div class="games-sort"><label>Sort by <select id="games-sort" aria-describedby="games-sort-hint"><option value="name">Alphabetical order</option><option value="released">Release date</option><option value="system">System</option><option value="genre">Genre</option><option value="developer">Developer</option><option value="publisher">Publisher</option><option value="rating">Rating</option></select></label><button id="games-direction" class="secondary" type="button" data-direction="asc">Ascending</button><span id="games-results" class="muted" role="status"></span></div>
|
||
<p id="games-sort-hint" class="help-text" hidden>Missing details appear last. Download game details to fill them in.</p>
|
||
<div id="games-letters" class="chips games-letters" role="group" aria-label="Filter games by first letter"></div>
|
||
<p id="games-selection" class="muted" role="status"></p><div id="games-grid" class="games-grid" aria-live="polite"><p class="list-message">Loading your games…</p></div></section>
|
||
</section>
|
||
<section id="smb" class="page" hidden aria-labelledby="smb-heading">
|
||
<section class="panel smb-panel"><div class="section-toolbar"><div><h2 id="smb-heading">Shared folder (SMB)</h2><p>Play games kept in a shared folder on your computer or NAS: they appear under SMB in RetroArch’s file browser.</p></div></div>
|
||
<form id="smb-form" class="smb-fields" novalidate><label>Server<input id="smb-server" type="text" maxlength="255" autocomplete="off" spellcheck="false" placeholder="192.168.1.10"></label><label>User name<input id="smb-user" type="text" maxlength="127" autocomplete="username" spellcheck="false"></label><label>Password<input id="smb-password" type="password" maxlength="255" autocomplete="current-password"></label><label>Workgroup<input id="smb-workgroup" type="text" maxlength="127" autocomplete="off" spellcheck="false" placeholder="Optional"></label>
|
||
<p class="help-text">Leave the user name empty to sign in as a guest. The password stays on your PS5.</p><div class="form-actions"><button type="button" id="smb-test" class="secondary">Test connection</button></div>
|
||
<label>Share<select id="smb-share" disabled><option value="">Test the connection to list the shares</option></select></label><label>Folder<input id="smb-folder" type="text" maxlength="511" autocomplete="off" spellcheck="false" placeholder="Optional, for example Games"></label>
|
||
<p id="smb-status" class="help-text" role="status"></p><p id="smb-error" class="inline-error" role="alert" hidden></p><div class="form-actions"><button type="submit" id="smb-save" class="primary" disabled>Save</button><button type="button" id="smb-forget" class="secondary" hidden>Forget this server</button></div></form></section>
|
||
</section>
|
||
<section id="forwarders" class="page" hidden aria-labelledby="forwarders-heading">
|
||
<section class="panel forwarders-panel"><div class="section-toolbar"><div><h2 id="forwarders-heading">Home screen tiles</h2><p>Each tile opens one game in RetroArch, right from the PS5 home screen.</p></div><div class="forwarder-tools"><button id="refresh-forwarders" class="secondary">Refresh</button><button id="forwarder-new" class="primary" disabled><span data-ui-icon="plus"></span>New tile</button></div></div>
|
||
<p id="forwarders-status" class="help-text" role="status"></p><div id="forwarders-list" class="forwarder-list" aria-live="polite"><p class="list-message">Loading your tiles…</p></div></section>
|
||
<section id="forwarder-editor" class="panel forwarder-editor" hidden aria-labelledby="forwarder-editor-title"><form id="forwarder-form" novalidate><div class="section-toolbar"><h2 id="forwarder-editor-title">New tile</h2><button type="button" id="forwarder-cancel" class="secondary">Cancel</button></div>
|
||
<div class="forwarder-form"><div class="forwarder-picture"><canvas id="forwarder-canvas" width="512" height="512" role="img" aria-label="Tile picture"></canvas><label class="check-inline"><input id="forwarder-fill" type="checkbox" checked> Fill the square</label><label class="check-inline"><input id="forwarder-badge" type="checkbox"> System icon in the bottom right corner</label></div>
|
||
<div class="forwarder-fields"><div class="forwarder-row"><span id="forwarder-system-label">System</span><div class="system-picker"><button type="button" id="forwarder-system" class="system-button" aria-haspopup="listbox" aria-expanded="false" aria-controls="forwarder-systems" aria-labelledby="forwarder-system-label forwarder-system"></button><ul id="forwarder-systems" class="system-list" role="listbox" aria-labelledby="forwarder-system-label" hidden></ul></div></div><label>Game<select id="forwarder-game"></select></label>
|
||
<div class="forwarder-row"><span id="forwarder-media-label">Picture</span><div id="forwarder-media" class="segmented forwarder-media" role="radiogroup" aria-labelledby="forwarder-media-label"><label><input type="radio" name="forwarder-media" value="current"><span>Current picture</span></label><label><input type="radio" name="forwarder-media" value="cover"><span data-view-icon="cover">Box art (front)</span></label><label><input type="radio" name="forwarder-media" value="box3d"><span data-view-icon="box3d">3D box</span></label><label><input type="radio" name="forwarder-media" value="logo"><span data-view-icon="logo">Logo</span></label><label><input type="radio" name="forwarder-media" value="physical"><span data-view-icon="physical">Cartridge or disc</span></label><label><input type="radio" name="forwarder-media" value="screenshot"><span data-view-icon="screenshot">Screenshot</span></label><label><input type="radio" name="forwarder-media" value="title"><span data-view-icon="title">Title</span></label><label><input type="radio" name="forwarder-media" value="fanart"><span data-view-icon="fanart">Fan art</span></label><label><input type="radio" name="forwarder-media" value="retroarch"><span>RetroArch icon</span></label></div>
|
||
<p id="forwarder-media-hint" class="muted" hidden>A greyed-out picture is not on your PS5 yet: Download Media can get it.</p></div><label>Name on the home screen<input id="forwarder-name" type="text" maxlength="128" autocomplete="off"></label><label>Core<select id="forwarder-core"></select></label><label class="check-inline"><input id="forwarder-exit" type="checkbox" checked> Close RetroArch when the game ends</label><p class="help-text">Otherwise your frontend opens after the game. A new tile, name or picture reaches the home screen once RetroArch closes.</p><p id="forwarder-error" class="inline-error" role="alert" hidden></p><div class="form-actions"><button type="submit" id="forwarder-save" class="primary">Create tile</button></div></div></div></form></section>
|
||
</section>
|
||
<section id="media" class="page media-page" hidden aria-labelledby="media-heading">
|
||
<section class="panel media-setup"><div class="media-head"><div><h2 id="media-heading" class="visually-hidden">Download media</h2><p>Box art, screenshots and more for your games, kept on your PS5 and shared by RetroArch, EmulationStation and this page. Nothing you already have is downloaded again.</p></div></div>
|
||
<div class="media-row"><span class="media-label">Download from</span><div class="segmented" role="radiogroup" aria-label="Download from"><label><input type="radio" name="scrape-method" value="ps5"><span data-icon="ps5">PS5</span></label><label><input type="radio" name="scrape-method" value="pc"><span data-icon="pc-to-ps5">This PC → PS5</span></label></div><p id="scrape-method-hint" class="media-hint"></p></div>
|
||
<div class="media-row"><span class="media-label">Sources, in order</span><ol id="scrape-sources" class="source-list" aria-label="Media sources, in the order they are asked"></ol><p id="scrape-source-hint" class="media-hint"></p><p id="scrape-account" class="account-line" hidden><span id="scrape-account-text"></span><button type="button" id="scrape-account-manage" class="text-button">Manage</button></p></div>
|
||
<div class="media-row media-row-kinds"><span class="media-label">Media</span><div class="kinds-area"><div class="chips quick-chips"><button type="button" id="kinds-recommended" class="chip">Recommended</button><button type="button" id="kinds-all" class="chip">All available</button><button type="button" id="kinds-none" class="chip">None</button></div><div id="scrape-kinds" class="kind-tiles"></div><div id="scrape-details-box" class="details-box"></div><p id="scrape-kind-hint" class="media-hint" aria-live="polite"></p></div></div>
|
||
<div class="media-row"><span class="media-label">Games</span><div class="segmented" role="radiogroup" aria-label="Games"><label><input type="radio" name="scrape-scope" value="selected"><span id="scrape-scope-selected">Selected</span></label><label><input type="radio" name="scrape-scope" value="system"><span>One system</span></label><label><input type="radio" name="scrape-scope" value="all" checked><span>Everything</span></label></div><select id="scrape-system" aria-label="System" hidden></select></div>
|
||
<div class="media-row"><span class="media-label">Options</span><div class="media-options"><div class="region-pick"><span>Region</span><div class="segmented" role="radiogroup" aria-label="Preferred region"><label><input type="radio" name="scrape-region" value="us"><span data-icon="flag-us">USA</span></label><label><input type="radio" name="scrape-region" value="eu"><span data-icon="flag-eu">Europe</span></label><label><input type="radio" name="scrape-region" value="jp"><span data-icon="flag-jp">Japan</span></label><label><input type="radio" name="scrape-region" value="wor"><span data-icon="globe">World</span></label></div></div><label id="scrape-language-pick" class="language-pick" hidden>Details in<select id="scrape-language"><option value="en">English</option><option value="fr">Français</option><option value="de">Deutsch</option><option value="es">Español</option><option value="it">Italiano</option><option value="pt">Português</option><option value="nl">Nederlands</option><option value="ja">日本語</option></select></label></div></div>
|
||
<div class="media-row"><span class="media-label">Media you have</span><div class="segmented" role="radiogroup" aria-label="Media you already have"><label><input type="radio" name="scrape-existing" id="scrape-keep" value="keep" checked><span>Download only what’s missing</span></label><label><input type="radio" name="scrape-existing" id="scrape-overwrite" value="replace"><span>Replace everything</span></label></div><p id="scrape-existing-hint" class="media-hint"></p></div>
|
||
<div class="media-bar"><p id="scrape-summary" role="status"></p><span id="scrape-result" role="status" class="inline-error"></span><button id="scrape-start" class="primary">Start</button></div></section>
|
||
<section id="scrape-job" class="panel scrape-job" hidden aria-labelledby="job-title"><div class="job-head"><div><h2 id="job-title">Downloading media</h2><p id="job-summary" role="status"></p></div><div class="job-actions"><button id="job-resume" class="secondary" hidden>Resume</button><button id="job-cancel" class="secondary">Cancel</button></div></div>
|
||
<ol id="job-passes" class="job-passes" hidden aria-label="Sources, in order"></ol><div class="job-stats"><div class="stat"><strong id="stat-done">0</strong><span>complete</span></div><div class="stat"><strong id="stat-partial">0</strong><span>partly</span></div><div class="stat"><strong id="stat-kept">0</strong><span>already had media</span></div><div class="stat attention"><strong id="stat-attention">0</strong><span>need you</span></div><div class="stat"><strong id="stat-files">0</strong><span id="stat-files-label">files</span></div></div>
|
||
<div class="job-bars"><label>Games<progress id="job-identified" max="100" value="0"></progress><span id="job-identified-text"></span></label><label>Downloaded<progress id="job-downloaded" max="100" value="0"></progress><span id="job-downloaded-text"></span></label><label id="job-transferred-row" hidden>Sent to PS5<progress id="job-transferred" max="100" value="0"></progress><span id="job-transferred-text"></span></label></div>
|
||
<div id="job-helper" class="job-helper" hidden><p><strong>Start the helper on this PC.</strong> <a id="job-helper-link" href="ps5-media-helper.py" download>Download ps5-media-helper.py</a> (needs Python 3), then run:</p><div class="command"><code id="job-helper-command"></code><button id="job-helper-copy" class="secondary">Copy</button></div><p class="muted">Keep it running until the job is done. If it stops, run it again: nothing finished is downloaded or sent twice.</p></div>
|
||
<details id="job-problems-box" class="job-problems-box" hidden><summary id="job-problems-title">Games that need you</summary><div id="job-problems" class="job-problems"></div></details>
|
||
<section id="job-recap" class="job-recap" hidden aria-labelledby="recap-title"><div class="recap-head"><h3 id="recap-title">What was downloaded</h3><p class="muted recap-legend"><span class="kind-pill got">Downloaded</span><span class="kind-pill had">Already there</span><span class="kind-pill missed">Missing</span></p></div>
|
||
<div id="recap-kinds" class="recap-kinds"></div>
|
||
<div class="recap-tools"><div id="recap-filter" class="chips quick-chips" role="radiogroup" aria-label="Show"></div><label class="search-field recap-search"><span class="visually-hidden">Find a game in the recap</span><input id="recap-search" type="search" placeholder="Find a game" autocomplete="off"></label></div>
|
||
<div id="recap-systems" class="recap-systems" aria-live="polite"></div></section></section>
|
||
</section>
|
||
<section id="transfers" class="page panel" hidden aria-labelledby="all-transfers-title"><div class="section-toolbar"><div><h2 id="all-transfers-title">Your transfers</h2><p>Uploads and downloads from this browser session</p></div><button id="clear-transfers" class="secondary">Clear finished</button></div><p class="help-text">Keep this page open until uploads finish. Downloads continue in your browser’s download manager.</p><div id="all-transfers" class="transfer-list"></div></section>
|
||
<section id="settings" class="page panel" hidden aria-labelledby="settings-heading"><div class="section-toolbar"><div><h2 id="settings-heading">Global RetroArch settings</h2><p>Manage shared preferences and individual core profiles.</p></div><button id="refresh-settings" class="secondary">Refresh settings</button></div><p class="settings-intro" id="settings-help">Saved changes apply the next time you open RetroArch. Game and folder overrides can take priority.</p><div class="settings-controls"><label>Profile<select id="settings-profile"><option value="">Global RetroArch</option></select></label><label id="settings-kind-label" hidden>Settings type<select id="settings-kind"><option value="core-options">Core options</option><option value="core-settings">RetroArch overrides</option></select></label><label class="settings-search">Find a setting<input id="settings-search" type="search" placeholder="Search settings and descriptions"></label></div><div class="settings-view-bar"><div class="settings-mode" role="group" aria-label="Settings mode"><button type="button" id="settings-guided" aria-pressed="true">Guided</button><button type="button" id="settings-advanced" aria-pressed="false">Advanced</button></div><span id="settings-mode-help">Clear explanations and ready-to-use choices.</span></div><nav id="settings-categories" aria-label="Setting categories"></nav><div class="settings-category-heading"><h3 id="settings-category-title"></h3><p id="settings-category-help"></p></div><p id="settings-coverage"></p><p id="settings-count" role="status"></p><form id="settings-form"><fieldset id="settings-fields" disabled><legend class="visually-hidden">Settings for selected profile</legend></fieldset><div class="settings-paging"><button id="settings-previous" class="secondary" type="button">Previous</button><span id="settings-page"></span><button id="settings-next" class="secondary" type="button">Next</button></div><div class="form-actions settings-actions"><button type="submit" id="save-settings" class="primary" disabled>Save changes</button><span id="settings-result" role="status"></span></div></form><section class="language-panel" aria-labelledby="language-heading"><div class="language-panel-heading"><span data-ui-icon="globe" class="icon section-icon"></span><div><h3 id="language-heading">Language</h3><p>Choose the language of this page. It is saved on your PS5, so every device that opens the WebUI shows it.</p></div></div><div id="language-settings"></div></section></section>
|
||
<dialog id="add-game" class="game-sheet add-game-sheet" aria-labelledby="add-title">
|
||
<div class="sheet-head"><div class="add-symbol"><span data-ui-icon="plus"></span></div><div class="sheet-heading"><h2 id="add-title">Add Game</h2><p class="muted">Your game, ready for every frontend.</p></div><button type="button" id="add-close" class="sheet-close" aria-label="Close Add Game"><span data-ui-icon="x"></span></button></div>
|
||
<div class="sheet-layout" id="add-layout"><nav class="sheet-nav" aria-label="Add Game sections"><button type="button" data-add-tab="file" aria-pressed="true">Game file</button><button type="button" data-add-tab="details" aria-pressed="false">Details</button><button type="button" data-add-tab="media" aria-pressed="false">Media</button><p>Choose a backup.<br>Make it yours.<br>Add it to your library.</p></nav><div class="sheet-body">
|
||
<section data-add-panel="file"><h3>Start with your game</h3><p class="muted sheet-hint">Add a legally obtained backup of a game you own. Your existing games stay untouched.</p><label class="add-field">System<span class="system-select"><span id="add-system-icon"></span><select id="add-system" required><option value="">Loading installed systems…</option></select></span></label><button type="button" id="add-drop" class="add-drop"><span data-ui-icon="cloud-upload"></span><strong id="add-file-name">Choose a game backup</strong><span id="add-file-hint">Drop one file here, or browse your device</span></button><input id="add-file" type="file" hidden><p id="add-destination" class="muted sheet-path"></p><p class="muted sheet-hint">The system’s installed core is detected automatically. For multi-file discs or folder-based games, upload the complete folder in Content.</p></section>
|
||
<section data-add-panel="details" hidden><h3>Give it a place in your library</h3><p class="muted sheet-hint">Write your own details, or choose a match from the LaunchBox Games Database. You can edit everything afterward.</p><form id="add-search-form" class="add-search"><label>Find in LaunchBox<input type="search" id="add-search" placeholder="Game title" maxlength="160" minlength="2"></label><button type="submit" id="add-search-button" class="secondary"><span data-ui-icon="search"></span>Search</button></form><p id="add-search-status" class="sheet-status" role="status"></p><div id="add-results" class="add-results"></div><p id="add-match" class="sheet-status"></p><div id="add-fields" class="sheet-fields"></div></section>
|
||
<section data-add-panel="media" hidden><h3>Make your game recognizable</h3><p class="muted sheet-hint">Add your own artwork, video or manual. Optional downloads fill the gaps; your files are kept.</p><button type="button" id="add-download" class="add-download-cta" aria-pressed="true"><span data-ui-icon="download"></span><span><strong>Download media automatically</strong><small>Find covers, screenshots and more from your chosen sources.</small></span><span id="add-download-state">Enabled</span></button><div id="add-scrapers"><p class="muted sheet-hint">Choose sources in the order they should run. Downloads use the same engine as Download Media and continue on your PS5.</p><div id="add-sources"></div><div class="add-download-options"><label>Region<select id="add-region"><option value="us">USA</option><option value="eu">Europe</option><option value="jp">Japan</option><option value="wor">World</option></select></label><label>Details language<select id="add-language"><option value="en">English</option><option value="fr">French</option><option value="de">German</option><option value="es">Spanish</option><option value="it">Italian</option><option value="ja">Japanese</option></select></label></div><label class="add-download"><input id="add-fetch-details" type="checkbox" checked>Fill missing game details too</label><p class="muted sheet-hint">All media types offered by your selected sources are requested. You can follow progress and resolve uncertain matches in Download Media.</p></div><div id="add-media-preview" class="add-media-preview"></div><div id="add-media-types" class="sheet-thumbs" aria-label="Media types to add"></div><input id="add-media-file" type="file" hidden></section>
|
||
</div></div><section id="add-activity" class="add-activity" hidden aria-labelledby="add-activity-title"><div class="add-activity-heading"><span data-ui-icon="download"></span><div><h3 id="add-activity-title">Finding your game’s media</h3><p id="add-activity-game" class="muted"></p></div></div><p id="add-activity-detail" role="status"></p><progress id="add-activity-progress" max="100" aria-label="Media download progress"></progress><div id="add-live-media" class="add-live-media"></div><p id="add-activity-hint" class="muted">Your game backup is already saved. Artwork appears here as it arrives.</p></section><footer class="add-footer"><div class="add-progress"><p id="add-status" role="status">Choose a system and a game backup to begin.</p><progress id="add-progress" max="100" value="0" hidden aria-label="Add Game progress"></progress></div><button type="button" id="add-cancel" class="secondary">Cancel</button><button type="button" id="add-submit" class="primary"><span data-ui-icon="plus"></span>Add to library</button></footer></dialog>
|
||
|
||
<dialog id="game-sheet" class="game-sheet" aria-labelledby="sheet-title"><div class="sheet-head"><div class="sheet-cover" id="sheet-cover"></div><div class="sheet-heading"><h2 id="sheet-title" data-no-translate></h2><div id="sheet-tags" class="version-tags"></div><p id="sheet-sub" class="muted" data-no-translate></p></div><button type="button" id="sheet-edit" class="secondary">Edit details</button><button type="button" id="sheet-close" class="sheet-close" aria-label="Close"><span data-ui-icon="x" class=""></span></button></div>
|
||
<div class="sheet-layout"><nav id="sheet-nav" class="sheet-nav" aria-label="Game sections"><button type="button" data-tab="media" aria-pressed="true">Media</button><button type="button" data-tab="details" aria-pressed="false">Details</button><button type="button" data-tab="files" aria-pressed="false">Files</button><p>Artwork, details and your files.<br>One place for this game.</p></nav><div class="sheet-body"><section id="sheet-media-panel" aria-labelledby="sheet-media-title"><div class="sheet-media-head"><h3 id="sheet-media-title">Media</h3><p id="sheet-media-count" class="muted"></p></div><div id="sheet-media" class="sheet-media"></div><div id="sheet-thumbs" class="sheet-thumbs" aria-label="Media types"></div><p class="muted sheet-hint">Choose a media type to preview, enlarge or replace it. Your uploaded media is kept when downloading again.</p></section><section id="sheet-details" class="sheet-details" hidden></section><section id="sheet-files" hidden></section></div></div></dialog>
|
||
<dialog id="sign-in" class="sign-in" aria-labelledby="sign-in-title"><form id="sign-in-form" method="dialog" novalidate><div class="sign-in-head"><span id="sign-in-logo"></span><div><h2 id="sign-in-title">Sign in to ScreenScraper</h2><p class="muted">Your free screenscraper.fr account. It is checked with ScreenScraper, then kept on your PS5 only: this page never sees your password again.</p></div></div>
|
||
<div id="sign-in-fields"><label>Name<input id="sign-in-user" name="username" autocomplete="username" autocapitalize="off" spellcheck="false" required maxlength="128"></label><label>Password<input id="sign-in-password" name="password" type="password" autocomplete="current-password" required maxlength="256"></label><p class="muted sign-in-note">No account? <a href="https://www.screenscraper.fr/membreinscription.php" target="_blank" rel="noopener noreferrer">Create one for free</a>. A contributor or donor account allows more downloads a day and at once.</p></div>
|
||
<div id="sign-in-account" class="sign-in-account" hidden><p><strong id="sign-in-who"></strong></p><dl id="sign-in-quota" class="sign-in-quota"></dl></div>
|
||
<p id="sign-in-error" class="inline-error" role="alert"></p>
|
||
<div class="form-actions sign-in-actions"><button type="button" id="sign-in-forget" class="secondary" hidden>Sign out</button><button type="button" id="sign-in-change" class="secondary" hidden>Use another account</button><span class="spacer"></span><button type="button" id="sign-in-cancel" class="secondary">Cancel</button><button type="submit" id="sign-in-submit" class="primary">Sign in</button></div></form></dialog>
|
||
</main></div></body></html>
|