Dalle opzioni di un gioco: Sposta in una cartella (esistente o nuova) e Nascondi dalla home. Le cartelle sono tessere con il mosaico delle prime quattro icone e si aprono in un pannello; le app nascoste si rimettono da Impostazioni › App nascoste. La disposizione sta sulla console (home-layout.txt); la fila della home sono le prime nrow voci di apps[]. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Omega — app per la console
Omega è una dashboard social per PS5 con jailbreak: home in stile console, Store di homebrew, community (bacheca, gruppi, classifiche), party con chat vocale, messaggi e browser. È un'app SDL2 a schermo intero, scritta in C, che parla con un server Omega via HTTP(S).
Sviluppato da TheCriicom (outlinedigital.it).
Licenza GPL-3.0-or-later (LICENSE); componenti di terze parti in
THIRD-PARTY-NOTICES.md. Crediti, versione e sorgente si vedono anche
nell'app, in Impostazioni → Informazioni su Omega.
Compilare per PS5
Serve ps5-payload-sdk con i pacchetti homebrew (SDL2, SDL2_ttf, SDL2_image, freetype, minizip, quickjs, opus) e LLVM 18.
PS5_PAYLOAD_SDK=$HOME/ps5-payload-sdk ./build.sh
Il risultato è ../bin/omega_ui.elf. install-ps5.sh lo copia sulla console via
FTP (ftpsrv, porta 2121) in /data/homebrew/OmegaUI/ insieme a homebrew.js e
all'icona, così websrv lo mostra tra gli homebrew; con --launch lo avvia
subito. Copia anche il demone omega_redirect (vedi ../omega-redirect-src).
Build desktop di prova (macOS)
Per lavorare sulla UI senza console. Servono SDL2, SDL2_ttf, SDL2_image e curl di Homebrew.
cd desktop
OMEGA_URL=http://127.0.0.1:18080 OMEGA_DATA=/tmp/omega ./build-desktop.sh
./omega-ui-desktop # OMEGA_HIDDEN=1 per non aprire la finestra
Facoltativi: MINIZIP_SRC=<cartella con minizip/unzip.c> per provare davvero le
installazioni dello Store, QUICKJS_INC=<dir> QUICKJS_LIB=<libquickjs.a> per
eseguire gli homebrew.js. Sul desktop la rete passa da libcurl
(desktop/desktop.c sostituisce net.c e ime.c), il filesystem della console è
simulato in $OMEGA_DATA/sysroot e i giochi si leggono da $OMEGA_DATA/apps.
Comandi di debug
L'app legge OMEGA_DIR/omega-ui.cmd (sul desktop $OMEGA_DATA/omega-ui.cmd), un
comando per riga, e cancella il file dopo averlo letto:
| comando | effetto |
|---|---|
key x|o|tri|sq|opt|up|down|left|right|l1|r1 |
preme un tasto |
text <valore> |
testo da restituire alla prossima tastiera (coda di 4) |
shot [file.png] |
screenshot (predefinito OMEGA_DIR/omega-ui-shot.png) |
wait <ms> |
pausa prima del comando successivo |
micprobe |
apre il microfono per 2 s e scrive il picco nel log |
quit |
chiude l'app |
Funziona anche sulla console: si carica il file via FTP.
Personalizza
Impostazioni › Personalizza (source/custom.c, opzioni in source/prefs.c):
più di 30 opzioni in 8 categorie (aspetto, home, orologio e barra, movimento,
suoni, notifiche, salvaschermo, prestazioni) e 7 stili rapidi. Ogni opzione è
una riga della tabella PREFS con i suoi valori; il codice le legge da
g_prefs. Si salvano in OMEGA_DIR/prefs.txt (chiave=valore; un valore
sconosciuto torna al predefinito). Sfondo personale: /data/Omega/wallpaper.jpg
o .png.
Giochi sui dischi esterni
source/drives.c guarda ogni 4 s /mnt/usb0..7, /mnt/ext0 e /mnt/ext1 e
cerca le cartelle di gioco (sce_sys/param.json o param.sfo più eboot.bin)
nella radice e in homebrew/, etaHEN/games/, games/, PS5/, PS4/. I
giochi compaiono in home con l'icona del disco e spariscono quando il disco si
scollega. All'avvio la cartella si monta in sola lettura (nullfs) su
/system_ex/app/<TID>, e la prima volta si registra il titolo; tornando in
Omega si smonta. Sul disco non si scrive e non si cancella mai niente. Serve
kstuff, come per ShadowMount e dump_runner. Installando un gioco a cartella o
zip con un disco collegato, Omega chiede dove metterlo (<disco>/homebrew/<TID>).
Prestazioni
Il renderer è software: ogni sfumatura e ogni velo a tutto schermo costano
CPU. La velatura del tema è dentro le immagini di sfondo (bake_tint, una
volta per immagine); con un pannello aperto e fermo la scena sotto si
fotografa una volta già scurita e non si ridisegna (render_frame, «scena
congelata»); con la home ferma si scende a 30 fotogrammi. Misure sul Mac col
renderer software (05/10/2026): home da 6,6 a 3,5 ms, Game Base da 9,7 a 2,6,
Centro di controllo da 11,3 a 3,5.
Novità dopo un aggiornamento
Al primo avvio di una versione nuova (OMEGA_VERSION diversa da
OMEGA_DIR/version-seen.txt) la UI mostra la finestra «Novità»
(source/whatsnew.c). L'elenco ITEMS si riscrive a ogni rilascio, insieme
alla versione; chi installa da zero non la vede.
Lingue
L'app è tradotta in 27 lingue: it en ja fr es de nl pt-PT pt-BR ru ko zh-Hans zh-Hant fi sv da nb pl tr cs hu el ro th vi id uk (gli stessi codici valgono per
i file, per le impostazioni e per l'header Accept-Language).
- Testi. Nel sorgente ogni testo visibile è l'italiano esatto dentro
_()(N_()per gli elenchi statici, tradotti quando si disegnano;P_("contesto", "testo")quando la stessa parola italiana ha due significati)._()ritorna la traduzione o, se manca, l'italiano. I log (omega_log), le chiavi JSON e i valori del server non si traducono. - Cataloghi.
i18n/<codice>.jsonè un oggetto piatto{ "msgid": "traduzione" };i18n/it.jsonè l'elenco dei msgid ei18n/_context.jsondice per ognuno dove compare, che cos'è (pulsante, voce di menu, messaggio...) e quanto può essere lungo. Una traduzione vuota o assente lascia l'italiano. - Script (Node, senza dipendenze):
node tools/i18n-extract.mjsrilegge i sorgenti (UI,omega-redirect-src,omega-installer-src), aggiornait.jsone_context.jsone crea{}per le lingue nuove (--prunetoglie le chiavi non più usate);node tools/i18n-gen.mjsscrivesource/i18n_data.ce glii18n_data.cdel demone e dell'installer. Si ferma se un JSON non è valido o se una traduzione non ha gli stessi specificatori printf del msgid (%s %d %ld %.1f %%..., stesso ordine e tipo).build.shedesktop/build-desktop.shlo eseguono se c'è Node; altrimenti si usa il file già generato.
- Scelta. Impostazioni → Lingua: "Automatica (console)" segue la lingua di
sistema (
sceSystemServiceParamGetInt(1), il valore grezzo finisce nel log); le altre voci valgono subito e si salvano inOMEGA_DIR/lang.txt. Sul desktop la lingua automatica viene daOMEGA_LANG(es.zh-Hant) o daLANG. - Font. All'avvio si elencano i font di
/preinst/common/font/: le stringhe con caratteri che i font SST non hanno (giapponese, cinese, coreano, thai...) si disegnano e si misurano col primo font che li ha; per il thai si imposta lo script di HarfBuzz. Il cinese e il giapponese vanno a capo anche tra un ideogramma e l'altro. Sul desktop si usano i font di macOS.
Configurazione
Macro da passare al compilatore (-D):
| macro | predefinito | uso |
|---|---|---|
OMEGA_BASE_URL |
https://play.omegasuite.it |
server predefinito ("Omega") |
OMEGA_API |
/api/v1 |
prefisso delle API |
OMEGA_DIR |
/data/Omega |
cartella dati; se la si ridefinisce non c'è migrazione |
OMEGA_VERSION |
in source/omega.h |
versione dell'app |
OMEGA_REG_KEY |
in source/login.c |
chiave che il server chiede per registrarsi |
Le prime versioni usavano /data/OmegaPSNLab: all'avvio, se esiste e
/data/Omega no, la cartella viene rinominata. Il demone fa lo stesso
controllo, perché legge session.json e ui-active dalla stessa cartella.
Server
"Omega" (OMEGA_BASE_URL) è sempre nell'elenco e non si può togliere.
Da Impostazioni → Server, o dalla riga "Server" della schermata di accesso, se ne
aggiungono altri inserendo l'indirizzo (https:// è implicito). Elenco e
scelta stanno in OMEGA_DIR/servers.json; la sessione salvata vale solo per il
server su cui è nata, e cambiando server si esce dall'account. Gli
aggiornamenti automatici arrivano sempre da OMEGA_BASE_URL.
File e log
In OMEGA_DIR (sulla console /data/Omega):
omega-ui.log— log dell'app (anche i tempi dei fotogrammi ogni 15 s)omega-redirect.log— log del demonesession.json— token della sessione (mai la password)ui-active— aggiornato ogni 2 s mentre la UI è in primo pianoservers.json,theme.txt,audio.txt,lang.txt,browser-*.txt— preferenzeupdate/,update.json— stato degli aggiornamenti (solo build ufficiale)
Struttura del sorgente
| file | contenuto |
|---|---|
omega.h |
configurazione, percorsi, rete, sessione, tastiera |
app.h |
stato dell'app, modello social, grafica, pannelli |
main.c |
avvio, ciclo principale, input, pila dei pannelli, toast, comandi di debug |
net.c |
client HTTP(S) con SceHttp |
async.c |
coda di rete e caricatore di immagini in background |
json.c, json.h |
parser JSON minimo |
i18n.c, i18n.h |
traduzioni: _(), scelta e rilevamento della lingua |
i18n_data.c |
tabelle delle traduzioni, generate da tools/i18n-gen.mjs |
util.c |
lettura file, codifica URL, FNV-1a, SHA-256 |
session.c |
sessione salvata |
servers.c, servers.h |
elenco dei server |
ime.c |
tastiera di sistema (sceImeDialog) |
gfx.c |
renderer: testo (con i font di ripiego), forme, icone SDF, marchio, temi, sfondi, particelle |
logo_png.c |
marchio di Omega (PNG incorporato) |
avatar.c |
avatar personalizzati e illustrati |
audio.c |
musica generativa ed effetti sintetizzati |
voice.c |
voce del party (Opus su PS5, ADPCM sul desktop) |
social.c |
amici, notifiche, party, chat, profilo, presenza |
login.c |
splash, scelta dell'utente, accesso, registrazione |
home.c |
home: giochi, homebrew, payload, notizie, attività |
panels.c |
Centro di controllo, Game Base, notifiche, profilo, chat, ricerca, impostazioni, informazioni |
community.c |
bacheca, gruppi, persone, tempo di gioco |
store.c |
Store: homebrew, libreria, dettaglio, pubblicazione |
install.c |
installazione di pkg, zip ed elf |
hblaunch.c |
avvio degli homebrew websrv eseguendo homebrew.js in QuickJS |
payload.c |
payload di Payload Manager (elfldr o websrv) |
gallery.c |
catture e chiavette USB, caricamento di avatar e copertine |
browser.c |
browser a blocchi impaginati dal server |
account.c |
documenti legali, privacy, dati, scelta del server |
update.c |
aggiornamenti automatici firmati (solo nella build ufficiale) |
monocypher*.c/h |
Monocypher (terze parti), verifica Ed25519 degli aggiornamenti |
update.c e publish-update.sh non fanno parte del sorgente pubblico: se
update.c manca, CMake e build-desktop.sh compilano senza OMEGA_UPDATES.