Replaces the per-scene HTML directories (landing/, loading/, game/,
desktop/, goodbye/, music-box/, music/) with a single Laravel app
serving every overlay over HTTP. Supervisord runs `php artisan serve`
on 127.0.0.1:1118 and the OBS scene JSON now references HTTP routes
instead of file:// URLs.
Highlights:
- public/css/hud.css consolidates the duplicated HUD chrome,
scanlines/vignette/flicker, terminal styling, and pulse keyframes
that were copy-pasted across all seven scenes.
- Blade partials own hud-strip, crt-overlays, obs-ws-scripts,
camera-frame, screen-frame; the seven scenes extend a shared
overlay layout.
- Artisan commands (`rig:setup`, `rig:telemetry`, `rig:loading`,
`rig:playlist`, `rig:cmd`) replace the shell scripts that wrote
per-rig JSON snapshots. TwitchHelix + HardwareSnapshot services
handle the work the bash + Python helpers used to.
- ObsWsClient + MusicCommandController kill the 250 ms cmd.js poll
in the music daemon: POST /cmd/{skip|prev|pause|resume} opens a
short-lived Pawl WS, authenticates, and broadcasts mpd:cmd.
- AudioController streams files from the configured music dirs so
CEF can load tracks under the HTTP origin (Chromium blocks
HTTP-origin pages from loading file:// media).
- DataController serves /data/playlist.js (with ETag mtime cache)
and /cover.jpg (no-store) so the existing overlays' window.__PLAYLIST
and cover.jpg cache-bust pattern keeps working.
scripts/obs-webapp.supervisord.conf is the supervisord unit; install
to /etc/supervisor.d/obs-webapp.conf.
scripts/rewrite-scene-urls.py is a one-shot tool that rewrites
basic/scenes/Default_Stream_HUD.json from file:// to HTTP URLs.
basic/scenes/Default_Stream_HUD.json.pre-webapp is the rollback
artifact (made with OBS closed; full pre-migration state).
The seven old scene directories, vendor/, and the bash scripts are
still on disk pending visual verification; the next commit will
prune them.
137 lines
4.3 KiB
PHP
137 lines
4.3 KiB
PHP
<?php
|
|
|
|
use Illuminate\Support\Str;
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Default Cache Store
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This option controls the default cache store that will be used by the
|
|
| framework. This connection is utilized if another isn't explicitly
|
|
| specified when running a cache operation inside the application.
|
|
|
|
|
*/
|
|
|
|
'default' => env('CACHE_STORE', 'database'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Cache Stores
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here you may define all of the cache "stores" for your application as
|
|
| well as their drivers. You may even define multiple stores for the
|
|
| same cache driver to group types of items stored in your caches.
|
|
|
|
|
| Supported drivers: "array", "database", "file", "memcached",
|
|
| "redis", "dynamodb", "storage", "octane",
|
|
| "session", "failover", "null"
|
|
|
|
|
*/
|
|
|
|
'stores' => [
|
|
|
|
'array' => [
|
|
'driver' => 'array',
|
|
'serialize' => false,
|
|
],
|
|
|
|
'database' => [
|
|
'driver' => 'database',
|
|
'connection' => env('DB_CACHE_CONNECTION'),
|
|
'table' => env('DB_CACHE_TABLE', 'cache'),
|
|
'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
|
|
'lock_table' => env('DB_CACHE_LOCK_TABLE'),
|
|
],
|
|
|
|
'file' => [
|
|
'driver' => 'file',
|
|
'path' => storage_path('framework/cache/data'),
|
|
'lock_path' => storage_path('framework/cache/data'),
|
|
],
|
|
|
|
'storage' => [
|
|
'driver' => 'storage',
|
|
'disk' => env('CACHE_STORAGE_DISK'),
|
|
'path' => env('CACHE_STORAGE_PATH', 'framework/cache/data'),
|
|
],
|
|
|
|
'memcached' => [
|
|
'driver' => 'memcached',
|
|
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
|
|
'sasl' => [
|
|
env('MEMCACHED_USERNAME'),
|
|
env('MEMCACHED_PASSWORD'),
|
|
],
|
|
'options' => [
|
|
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
|
|
],
|
|
'servers' => [
|
|
[
|
|
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
|
|
'port' => env('MEMCACHED_PORT', 11211),
|
|
'weight' => 100,
|
|
],
|
|
],
|
|
],
|
|
|
|
'redis' => [
|
|
'driver' => 'redis',
|
|
'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
|
|
'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
|
|
],
|
|
|
|
'dynamodb' => [
|
|
'driver' => 'dynamodb',
|
|
'key' => env('AWS_ACCESS_KEY_ID'),
|
|
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
|
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
|
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
|
|
'endpoint' => env('DYNAMODB_ENDPOINT'),
|
|
],
|
|
|
|
'octane' => [
|
|
'driver' => 'octane',
|
|
],
|
|
|
|
'failover' => [
|
|
'driver' => 'failover',
|
|
'stores' => [
|
|
'database',
|
|
'array',
|
|
],
|
|
],
|
|
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Cache Key Prefix
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| When utilizing the APC, database, memcached, Redis, and DynamoDB cache
|
|
| stores, there might be other applications using the same cache. For
|
|
| that reason, you may prefix every cache key to avoid collisions.
|
|
|
|
|
*/
|
|
|
|
'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Serializable Classes
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This value determines the classes that can be unserialized from cache
|
|
| storage. By default, no PHP classes will be unserialized from your
|
|
| cache to prevent gadget chain attacks if your APP_KEY is leaked.
|
|
|
|
|
*/
|
|
|
|
'serializable_classes' => false,
|
|
|
|
];
|