• Python 73.2%
  • HTML 23.6%
  • CSS 2.1%
  • Shell 0.6%
  • JavaScript 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
earthonion 044468bbea sidebar: swap defunct Chat/XMPP link for Discord + Mastodon icons
Community is on Discord + Mastodon now; the old lobby@conference.grr.llc
XMPP room is offline. Drop the stale Chat link from nav-links and add a
compact nav-social row pinned to the bottom of the sidebar (above the
worker count), showing Discord + Mastodon logos side-by-side. Icons are
sized via width/height attrs so they survive without CSS.
2026-07-04 14:24:39 +00:00
.github/workflows remove duplicate ruff workflow 2026-03-22 10:12:34 -04:00
app_core style: auto-fix, format, and sort imports 2026-03-22 14:03:24 +00:00
data Add PS5 syscalls and platform toggle to syscall reference 2026-03-26 01:27:46 -04:00
google_drive Web frontend rewrite of HTOS 2026-02-22 16:28:50 -05:00
routes worker gate: MIN_WORKER_VERSION = 1.1.6 (PFS chmod 0775 corruption) 2026-07-04 13:02:09 +00:00
scripts snapshot: dual-platform PS5 worker support + per-instance suspension + failure retry 2026-05-14 16:06:22 +00:00
services admin: speed metrics + retry fallback + outdated badge + URL fixes 2026-05-15 00:59:37 +00:00
static sidebar: swap defunct Chat/XMPP link for Discord + Mastodon icons 2026-07-04 14:24:39 +00:00
templates sidebar: swap defunct Chat/XMPP link for Discord + Mastodon icons 2026-07-04 14:24:39 +00:00
utils style: auto-fix, format, and sort imports 2026-03-22 14:03:24 +00:00
.gitignore snapshot: dual-platform PS5 worker support + per-instance suspension + failure retry 2026-05-14 16:06:22 +00:00
admin.py Add user banning to admin panel 2026-04-01 01:38:11 -04:00
API.md Add worker tracking, auto-suspend, landing page, and race condition fix 2026-03-14 08:41:35 -04:00
app.py admin: online-now stat + worker speed-test + maintenance banner + etawen.dev URLs 2026-05-16 02:13:18 +00:00
auth.py Replace ban message with endless verification challenges 2026-04-01 01:47:38 -04:00
build_fs_db.py refactor: convert sqlite3 to aiosqlite 2026-03-22 17:32:23 +03:00
build_funcs_db.py refactor: convert sqlite3 to aiosqlite 2026-03-22 17:32:23 +03:00
cleanup.py Web frontend rewrite of HTOS 2026-02-22 16:28:50 -05:00
cleanup.sh snapshot: dual-platform PS5 worker support + per-instance suspension + failure retry 2026-05-14 16:06:22 +00:00
config.py Change TCP worker port to 42069, add reuse_address 2026-03-28 20:07:22 -04:00
deploy.sh Web frontend rewrite of HTOS 2026-02-22 16:28:50 -05:00
models.py admin: online-now stat + worker speed-test + maintenance banner + etawen.dev URLs 2026-05-16 02:13:18 +00:00
pyproject.toml Refactor database access in verify_entitlements.py to use aiosqlite and update requirements for httpx 2026-03-23 16:10:37 +03:00
README.md Update readme link 2026-05-22 18:20:47 +02:00
requirements.txt Add UE5 support to save editor, rename to UE4/UE5 Save Editor 2026-03-29 00:41:28 -04:00
start.sh Web frontend rewrite of HTOS 2026-02-22 16:28:50 -05:00
sync_titles.py Use PSN concept URLs for title lookup store links 2026-03-27 21:33:30 -04:00
verify_entitlements.py Refactor database access in verify_entitlements.py to use aiosqlite and update requirements for httpx 2026-03-23 16:10:37 +03:00

HTOS-web

Web interface for HTOS PS4/PS5 save management. Replaces the Discord bot + NiceGUI desktop app with an internet-facing Quart web server.

Features

  • Resign - Re-sign saves to a different PSN account
  • Decrypt - Decrypt PS4/PS5 saves with optional second-layer game-specific decryption
  • Encrypt - Multi-step encrypt: decrypt on console, upload modified files, re-encrypt and resign
  • Re-region - Change save region using a sample save's keystone
  • Create Save - Build a new encrypted save from raw files + sce_sys
  • Convert - Platform conversion for GTA V, RDR 2, BL 3, TTWL, Xenoblade 2
  • Quick Codes - Apply Save Wizard hex quick codes to save files
  • Save DB - Community save library where users contribute decrypted saves, vote on entries, and one-click encrypt to their account
  • Luac0re - Quick-resign for Star Wars: Racer Revenge exploit saves (US/EU)

All PS4/PS5 operations communicate with a jailbroken console via the garlic-worker C agent.

Requirements

  • Python 3.12+
  • A jailbroken PS4/PS5 running the garlic-worker agent

Setup

  1. Create a virtual environment and install dependencies:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
  1. Configure .env:
IP=192.168.1.100          # PS4 IP address
FTP_PORT=2121             # PS4 FTP port
CECIE_PORT=1234           # PS4 Cecie socket port
UPLOAD_PATH=/mnt/usb0/    # PS4 remote upload directory
MOUNT_PATH=/mnt/sandbox/  # PS4 remote mount directory
SECRET_KEY=your-secret-key-here
DATABASE_PATH=htos_web.db
  1. Run:
python app.py

The server starts at http://localhost:5000.

For production, use an ASGI server:

pip install hypercorn
hypercorn app:create_app() --bind 0.0.0.0:5000

Usage

  1. Register an account at /register
  2. Log in and create a profile on the dashboard (PSN account ID in hex)
  3. Select an operation from the nav bar
  4. Upload save files (encrypted save pairs: savename + savename.bin)
  5. Monitor job progress via real-time SSE log streaming
  6. Download results as a zip when complete

Encrypt (multi-step)

  1. Upload encrypted save pairs - the server decrypts and mounts them on the PS4
  2. The job pauses and shows the mounted file list
  3. Upload your modified files through the second upload form
  4. The server encrypts them back into the save, resigns, and provides the download

Project Structure

HTOS-web/
  app.py              # Quart app factory + entry point
  auth.py             # Registration, login, session management (bcrypt)
  config.py           # Environment config
  models.py           # SQLite schema (users, profiles, jobs)
  routes/             # Blueprint route handlers
    main.py           # Dashboard, profile CRUD
    resign.py         # Resign operation
    decrypt.py        # Decrypt operation
    encrypt.py        # Encrypt operation (multi-step)
    reregion.py       # Re-region operation
    createsave.py     # Create save operation
    convert.py        # Platform conversion
    quickcodes.py     # Save Wizard quick codes
    savedb.py         # Community save database (browse, vote, contribute, encrypt)
    luac0re.py        # Quick-resign for Luac0re exploit saves
    jobs.py           # Job status, SSE stream, downloads
    admin_web.py      # Admin dashboard
    api.py            # Worker API endpoints
  services/
    jobs.py           # WebLogger, ServerSettings, Job, background task runner
    files.py          # File upload/download/zip helpers
  templates/          # Jinja2 HTML templates
  static/style.css    # Dark theme CSS
  app_core/           # Save processing logic (from HTOS)
  data/               # Game-specific crypto, converters, cheats (from HTOS)
  network/            # FTP + socket PS4 communication (from HTOS)
  utils/              # Constants, orbis save format, workspace helpers (from HTOS)

Architecture

  • Quart (async Flask) handles HTTP requests
  • SQLite + aiosqlite stores users, profiles, jobs, and save DB entries
  • garlic-worker C agents on PS4/PS5 poll the server for jobs and process saves
  • Server-Sent Events (SSE) stream real-time logs from jobs to the browser
  • Community voting on Save DB entries with Reddit-style auto-upvote and auto-delete at -10