mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-07-17 16:50:31 +00:00
457 lines
18 KiB
YAML
457 lines
18 KiB
YAML
# The main config file
|
||
|
||
# Note.
|
||
# Be aware that when this configuration is being overwritten
|
||
# by another configuration, any empty nested part
|
||
# in the further configurations will reset (empty out) all the values.
|
||
# For example:
|
||
# the main config second config result
|
||
# ... ... ...
|
||
# list: list: list:
|
||
# gba: gba: gba:
|
||
# lib: mgba_libretro lib: ""
|
||
# roms: [ "gba", "gbc" ] roms: []
|
||
# ... ...
|
||
#
|
||
# So do not leave empty nested keys.
|
||
|
||
# for the compatibility purposes
|
||
version: 3
|
||
|
||
# new decentralized library of games
|
||
library:
|
||
# optional alias file for overriding game names from the basePath path
|
||
aliasFile: alias.txt
|
||
# root folder for the library (where games are stored)
|
||
basePath: assets/games
|
||
# a list of ignored words in the ROM filenames
|
||
ignored:
|
||
- neogeo
|
||
- pgm
|
||
# DOSBox filesystem state
|
||
- .pure
|
||
# an explicit list of supported file extensions
|
||
# which overrides Libretro emulator ROMs configs
|
||
supported:
|
||
# print some additional info
|
||
verbose: true
|
||
# enable library directory live reload
|
||
# (experimental)
|
||
watchMode: false
|
||
|
||
coordinator:
|
||
# debugging switch
|
||
# - shows debug logs
|
||
# - allows selecting worker instances
|
||
debug: false
|
||
# selects free workers:
|
||
# - empty value (default, any free)
|
||
# - ping (with the lowest ping)
|
||
selector:
|
||
monitoring:
|
||
port: 6601
|
||
# enable Go profiler HTTP server
|
||
profilingEnabled: false
|
||
urlPrefix: /coordinator
|
||
# a custom Origins for incoming Websocket connections:
|
||
# "" -- checks same origin policy
|
||
# "*" -- allows all
|
||
# "your address" -- checks for that address
|
||
origin:
|
||
userWs:
|
||
workerWs:
|
||
# max websocket message size in bytes
|
||
maxWsSize: 32000000
|
||
# HTTP(S) server config
|
||
server:
|
||
address: :8000
|
||
cacheControl: "max-age=259200, must-revalidate"
|
||
frameOptions: ""
|
||
https: false
|
||
# Letsencrypt or self cert config
|
||
tls:
|
||
address: :443
|
||
# allowed host name
|
||
domain:
|
||
# if both are set then will use certs
|
||
# and Letsencryt instead
|
||
httpsCert:
|
||
httpsKey:
|
||
analytics:
|
||
inject: false
|
||
gtag:
|
||
|
||
worker:
|
||
# show more logs
|
||
debug: false
|
||
library:
|
||
# root folder for the library (where games are stored)
|
||
basePath: assets/games
|
||
network:
|
||
# a coordinator address to connect to
|
||
coordinatorAddress: localhost:8000
|
||
# where to connect
|
||
endpoint: /wso
|
||
# ping endpoint
|
||
pingEndpoint: /echo
|
||
# set public ping address (IP or hostname)
|
||
publicAddress:
|
||
# make coordinator connection secure (wss)
|
||
secure: false
|
||
# ISO Alpha-2 country code to group workers by zones
|
||
zone:
|
||
monitoring:
|
||
# monitoring server port
|
||
port: 6602
|
||
profilingEnabled: false
|
||
urlPrefix: /worker
|
||
server:
|
||
address: :9000
|
||
https: false
|
||
tls:
|
||
address: :444
|
||
# LetsEncrypt config
|
||
# allowed host name
|
||
domain:
|
||
# Own certs config
|
||
httpsCert:
|
||
httpsKey:
|
||
# optional server tag
|
||
tag:
|
||
|
||
emulator:
|
||
# set the total number of threads for the image processing
|
||
# (removed)
|
||
threads: 0
|
||
|
||
# enable autosave for emulator states if set to a non-zero value of seconds
|
||
autosaveSec: 0
|
||
|
||
# save directory for emulator states
|
||
# special tag {user} will be replaced with current user's home dir
|
||
storage: "{user}/.cr/save"
|
||
|
||
# path for storing emulator generated files
|
||
localPath: "./libretro"
|
||
|
||
# checks if the system supports running an emulator at startup
|
||
failFast: true
|
||
|
||
# do not send late video frames
|
||
skipLateFrames: false
|
||
|
||
# log dropped frames (temp)
|
||
logDroppedFrames: false
|
||
|
||
libretro:
|
||
# use zip compression for emulator save states
|
||
saveCompression: true
|
||
# Sets a limiter function for some spammy core callbacks.
|
||
# 0 - disabled, otherwise -- time in milliseconds for ignoring repeated calls except the last.
|
||
debounceMs: 0
|
||
# Allow duplicate frames
|
||
dup: true
|
||
# Libretro cores logging level: DEBUG = 0, INFO, WARN, ERROR, DUMMY = INT_MAX
|
||
logLevel: 1
|
||
cores:
|
||
paths:
|
||
libs: assets/cores
|
||
# Config params for Libretro cores repository,
|
||
# available types are:
|
||
# - buildbot (the default Libretro nightly repository)
|
||
# - github (GitHub raw repository with a similar structure to buildbot)
|
||
# - raw (just a link to a zip file extracted as is)
|
||
repo:
|
||
# enable auto-download for the list of cores (list->lib)
|
||
sync: true
|
||
# external cross-process mutex lock
|
||
extLock: "{user}/.cr/cloud-game.lock"
|
||
map:
|
||
darwin:
|
||
amd64:
|
||
arch: x86_64
|
||
ext: .dylib
|
||
os: osx
|
||
vendor: apple
|
||
arm64:
|
||
arch: arm64
|
||
ext: .dylib
|
||
os: osx
|
||
vendor: apple
|
||
linux:
|
||
amd64:
|
||
arch: x86_64
|
||
ext: .so
|
||
os: linux
|
||
arm:
|
||
arch: armv7-neon-hf
|
||
ext: .so
|
||
os: linux
|
||
windows:
|
||
amd64:
|
||
arch: x86_64
|
||
ext: .dll
|
||
os: windows
|
||
main:
|
||
type: buildbot
|
||
url: https://buildbot.libretro.com/nightly
|
||
# if repo has file compression
|
||
compression: zip
|
||
# a secondary repo to use i.e. for not found in the main cores
|
||
secondary:
|
||
type: github
|
||
url: https://github.com/sergystepanov/libretro-spiegel/raw/main
|
||
compression: zip
|
||
# Libretro core configuration
|
||
#
|
||
# The emulator selection will happen in this order:
|
||
# - based on the folder name in the folder param
|
||
# - based on the folder name (core name) in the list (i.e. nes, snes)
|
||
# - based on the rom names in the roms param
|
||
#
|
||
# Available config params:
|
||
# - altRepo (bool) prioritize secondary repo as the download source
|
||
# - lib (string)
|
||
# - roms ([]string)
|
||
# - scale (int) [0 - none]
|
||
# scales the output video frames by this factor.
|
||
# - scaleMethod (string) [bilinear2] -- Gstreamer method of scaling
|
||
# nearest-neighbour (0) – Nearest Neighbour
|
||
# bilinear (1) – Bilinear (2-tap)
|
||
# 4-tap (2) – 4-tap Sinc
|
||
# lanczos (3) – Lanczos
|
||
# bilinear2 (4) – Bilinear (multi-tap)
|
||
# sinc (5) – Sinc (multi-tap)
|
||
# hermite (6) – Hermite (multi-tap)
|
||
# spline (7) – Spline (multi-tap)
|
||
# catrom (8) – Catmull-Rom (multi-tap)
|
||
# mitchell (9) – Mitchell (multi-tap)
|
||
# - maxThreads (int) [0] -- cap the number of threads used by the encoder
|
||
# - folder (string)
|
||
# By default emulator selection is based on the folder named as cores
|
||
# in the list (i.e. nes, snes) but if you specify folder param,
|
||
# then it will try to load the ROM file from that folder first.
|
||
# - width (int) -- broken
|
||
# - height (int) -- broken
|
||
# - ratio (float)
|
||
# - isGlAllowed (bool)
|
||
# - usesLibCo (bool)
|
||
# - hasMultitap (bool) -- (removed)
|
||
# - coreAspectRatio (bool) -- (deprecated) correct the aspect ratio on the client with the info from the core.
|
||
# - hid (map[int][]int)
|
||
# A list of device IDs to bind to the input ports.
|
||
# Can be seen in human readable form in the console when worker.debug is enabled.
|
||
# Some cores allow binding multiple devices to a single port (DosBox), but typically,
|
||
# you should bind just one device to one port.
|
||
# - kbMouseSupport (bool) -- (temp) a flag if the core needs the keyboard and mouse on the client
|
||
# - nonBlockingSave (bool) -- write save file in a non-blocking way, needed for huge save files
|
||
# - vfr (bool)
|
||
# (experimental)
|
||
# Enable variable frame rate only for cores that can't produce a constant frame rate.
|
||
# By default, we assume that cores output frames at a constant rate which equals
|
||
# their tick rate (1/system FPS), but OpenGL cores like N64 may have significant
|
||
# frame rendering time inconsistencies. In general, VFR for CFR cores leads to
|
||
# noticeable video stutter (with the current frame rendering time calculations).
|
||
# - options ([]string) a list of Libretro core options for tweaking.
|
||
# All keys of the options should be in the double quotes in order to preserve upper-case symbols.
|
||
# - options4rom (rom[[]string])
|
||
# A list of core options to override for a specific core depending on the current ROM name.
|
||
# - hacks ([]string) a list of hacks.
|
||
# Available:
|
||
# - skip_hw_context_destroy -- don't destroy OpenGL context during Libretro core deinit.
|
||
# May help with crashes, for example, with PPSSPP.
|
||
# - skip_same_thread_save -- skip thread lock save (used with PPSSPP).
|
||
# - uniqueSaveDir (bool) -- needed only for cores (like DosBox) that persist their state into one shared file.
|
||
# This will allow for concurrent reading and saving of current states.
|
||
# - saveStateFs (string) -- the name of the file that will be initially copied into the save folder.
|
||
# All * symbols will be replaced to the name of the ROM.
|
||
list:
|
||
gba:
|
||
lib: mgba_libretro
|
||
roms: ["gba", "gbc"]
|
||
maxThreads: 4
|
||
options:
|
||
mgba_audio_low_pass_filter: enabled
|
||
mgba_audio_low_pass_range: 60
|
||
# mgba_frameskip: auto
|
||
pcsx:
|
||
lib: pcsx_rearmed_libretro
|
||
roms: ["cue", "chd"]
|
||
# example of folder override
|
||
folder: psx
|
||
# see: https://github.com/libretro/pcsx_rearmed/blob/master/frontend/libretro_core_options.h
|
||
options:
|
||
pcsx_rearmed_show_bios_bootlogo: enabled
|
||
pcsx_rearmed_drc: enabled
|
||
pcsx_rearmed_frameskip_type: auto
|
||
pcsx_rearmed_spu_interpolation: gaussian
|
||
pcsx_rearmed_rgb32_output: enabled
|
||
# MAME core requires additional manual setup, please read:
|
||
# https://docs.libretro.com/library/fbneo/
|
||
mame:
|
||
lib: fbneo_libretro
|
||
folder: mame
|
||
roms: ["zip"]
|
||
scaleMethod: bilinear2
|
||
nes:
|
||
lib: nestopia_libretro
|
||
roms: ["nes"]
|
||
options:
|
||
nestopia_aspect: "4:3"
|
||
nestopia_overscan_v_top: 0
|
||
nestopia_overscan_v_bottom: 0
|
||
snes:
|
||
lib: snes9x_libretro
|
||
roms: ["smc", "sfc", "swc", "fig", "bs"]
|
||
hid:
|
||
# set the 2nd port to RETRO_DEVICE_JOYPAD_MULTITAP ((1<<8) | 1) as SNES9x requires it
|
||
# in order to support up to 5-player games
|
||
# see: https://nintendo.fandom.com/wiki/Super_Multitap
|
||
1: 257
|
||
n64:
|
||
lib: mupen64plus_next_libretro
|
||
roms: ["n64", "v64", "z64"]
|
||
isGlAllowed: true
|
||
usesLibCo: true
|
||
vfr: true
|
||
# see: https://github.com/libretro/mupen64plus-libretro-nx/blob/master/libretro/libretro_core_options.h
|
||
options:
|
||
"mupen64plus-169screensize": 640x360
|
||
"mupen64plus-43screensize": 320x240
|
||
"mupen64plus-EnableCopyColorToRDRAM": Off
|
||
"mupen64plus-EnableCopyDepthToRDRAM": Off
|
||
"mupen64plus-EnableEnhancedTextureStorage": True
|
||
"mupen64plus-EnableFBEmulation": True
|
||
"mupen64plus-EnableLegacyBlending": True
|
||
"mupen64plus-FrameDuping": True
|
||
"mupen64plus-MaxTxCacheSize": 8000
|
||
"mupen64plus-ThreadedRenderer": False
|
||
"mupen64plus-cpucore": dynamic_recompiler
|
||
"mupen64plus-pak1": memory
|
||
"mupen64plus-rdp-plugin": gliden64
|
||
"mupen64plus-rsp-plugin": hle
|
||
"mupen64plus-astick-sensitivity": 100
|
||
dos:
|
||
lib: dosbox_pure_libretro
|
||
roms: ["zip", "cue"]
|
||
folder: dos
|
||
kbMouseSupport: true
|
||
nonBlockingSave: true
|
||
saveStateFs: "*.pure.zip"
|
||
hid:
|
||
0: [257, 513]
|
||
1: [257, 513]
|
||
2: [257, 513]
|
||
3: [257, 513]
|
||
options:
|
||
"dosbox_pure_conf": "outside"
|
||
# "dosbox_pure_force60fps": "true"
|
||
|
||
encoder:
|
||
audio:
|
||
codec: opus
|
||
# resampler qualiy: 0 - low, 1 - medium, 2 - best
|
||
resampler: 2
|
||
video:
|
||
# vp8 | vp9
|
||
codec: vp8
|
||
# Threaded encoder if supported, 0 - auto, 1 - nope, >1 - multi-threaded
|
||
threads: 0
|
||
# max interval between keyframes (0 = encoder default)
|
||
keyframeInterval: 300
|
||
# colorimetry caps: bt601 | bt709 | smpte240m
|
||
colorimetry: bt709,chroma-site=jpeg
|
||
list:
|
||
opus:
|
||
encoder: opusenc
|
||
params: audio-type=restricted-lowdelay complexity=8 bitrate=96000 frame-size=5
|
||
# h264 (requires gstreamer1.0-plugins-ugly + x264 [GPL]):
|
||
# encoder: x264enc
|
||
# params: speed-preset=superfast tune=zerolatency pass=quant quantizer=20
|
||
# caps: video/x-h264,stream-format=byte-stream,alignment=au
|
||
vp8:
|
||
encoder: vp8enc
|
||
params: >-
|
||
keyframe-mode=disabled tuning=ssim cpu-used=6 target-bitrate=3200000 deadline=1 sharpness=1 end-usage=cbr
|
||
static-threshold=100
|
||
error-resilient=default+partitions overshoot=20 undershoot=100
|
||
caps: video/x-vp8
|
||
vp9:
|
||
encoder: vp9enc
|
||
params: >-
|
||
keyframe-mode=disabled tuning=ssim cpu-used=6 target-bitrate=3200000 deadline=1 sharpness=1 end-usage=cbr
|
||
static-threshold=100
|
||
error-resilient=default+partitions overshoot=20 undershoot=100
|
||
tile-columns=6 lag-in-frames=0 row-mt=true
|
||
caps: video/x-vp9
|
||
|
||
# game recording
|
||
# (experimental)
|
||
# recording allows export RAW a/v streams of games
|
||
# by default, it will export audio as WAV files,
|
||
# video as a list of PNG-encoded images, and
|
||
# one additional FFMPEG concat demux file
|
||
recording:
|
||
enabled: false
|
||
# name contains the name of the recording dir (or zip)
|
||
# format:
|
||
# %date:go_time_format% -- refer: https://go.dev/src/time/format.go
|
||
# %user% -- user name who started the recording
|
||
# %game% -- game name (game ROM name)
|
||
# %rand:len% -- a random string of given length
|
||
# as example: 20210101101010_yeE_user1_badApple
|
||
name: "%date:20060102150405%_%rand:3%_%user%_%game%"
|
||
# zip and remove recording dir on completion
|
||
zip: true
|
||
# save directory
|
||
folder: ./recording
|
||
|
||
# cloud storage options
|
||
# it is mandatory to use a cloud storage when running
|
||
# a distributed multi-server configuration in order to
|
||
# share save states between nodes (resume games on a different worker)
|
||
storage:
|
||
# cloud storage provider:
|
||
# - empty (No op storage stub)
|
||
# - s3 (S3 API compatible object storage)
|
||
provider:
|
||
s3Endpoint:
|
||
s3BucketName:
|
||
s3AccessKeyId:
|
||
s3SecretAccessKey:
|
||
|
||
webrtc:
|
||
# turn off default Pion interceptors (see: https://github.com/pion/interceptor)
|
||
# (performance)
|
||
disableDefaultInterceptors: false
|
||
# indicates the role of the DTLS transport (see: https://github.com/pion/webrtc/blob/master/dtlsrole.go)
|
||
# (debug)
|
||
# - (default)
|
||
# - 1 (auto)
|
||
# - 2 (client)
|
||
# - 3 (server)
|
||
dtlsRole:
|
||
# a list of STUN/TURN servers to use
|
||
iceServers:
|
||
- urls: stun:stun.l.google.com:19302
|
||
# configures whether the ice agent should be a lite agent (true/false)
|
||
# (performance)
|
||
# don't use iceServers when enabled
|
||
iceLite: false
|
||
# ICE configuration
|
||
# by default, ICE ports are random and unlimited
|
||
# alternatives:
|
||
# 1. instead of random unlimited port range for
|
||
# WebRTC connections, these params limit port range of ICE connections
|
||
icePorts:
|
||
min:
|
||
max:
|
||
includeLoopbackCandidate: false
|
||
# 2. select a single port to forward all ICE connections there
|
||
singlePort:
|
||
# override ICE candidate IP, see: https://github.com/pion/webrtc/issues/835,
|
||
# can be used for Docker bridged network internal IP override
|
||
iceIpMap:
|
||
# set additional log level for WebRTC separately
|
||
# -1 - trace, 6 - nothing, ..., debug - 0
|
||
logLevel: 6
|