# LiveQ A single music queue for multi-game rhythm game livestreamers. ## Benefits - Design all live interactions around a single interface. - Gives your viewers a number they can see it's too easy or too hard. ## Compatibility Only the PC edition of these games: ### Current - [osu!](https://osu.ppy.sh/) - [Ragnaröck VR](https://www.ragnarock-vr.com/home) only custom songs ### Soon - [Beat Saber VR](https://www.beatsaber.com/) only [custom songs](https://bsaber.com/) - [Project OutFox](https://projectoutfox.com/) mode [dance 4k](https://outfox.wiki/user-guide/games/dance/) - [Project OutFox](https://projectoutfox.com/) mode [kbx 4k](https://outfox.wiki/user-guide/games/kbx/) ### Maybe later - [Synth Riders VR](https://synthridersvr.com/) only [custom songs](https://synthriderz.com/) - [Audica VR](https://www.audicagame.com/) only [custom songs](https://bsaber.com/?s=audica) - [Audio Trip VR](www.kinemotik.com/audiotrip/) only [custom songs](https://www.atcd.club/) ### Given up - [Ragnaröck VR](https://www.ragnarock-vr.com/home) bult-in songs: it's all packed inside encrypted Unreal asset bundles. - [Beat Saber VR](https://www.beatsaber.com/) bult-in songs: it's all packed inside Unity asset bundles. ### Won't even try - [DJMAX RESPECT V](http://www.djmaxrespect.com/): Unity asset bundles (see `Compatibility` > `Given up` > `Beat Saber VR`). - [MUSYNX](https://www.pm-studios.com/Projects/MUSYNX): Unity asset bundles (see `Compatibility` > `Given up` > `Beat Saber VR`). - [Magyarock VR](https://store.steampowered.com/app/1962220): not yet released and looks no much different than Ragnaröck VR - [AudioShield](https://store.steampowered.com/app/412740): boring & a "request from YouTube" queue would be better - [Beat Hazard 2 VR](https://store.steampowered.com/app/618740): a "request from YouTube" queue would be better - [DEEMO -Reborn-](https://store.steampowered.com/app/1282210): no custom songs - [Dance Collider](https://store.steampowered.com/app/692690): no custom songs - [Drums Rock](https://store.steampowered.com/app/1906020): not my kind of game - [Hatsune Miku VR](https://store.steampowered.com/app/707300): boring - [OnShape](https://store.steampowered.com/app/1098100): inexpressive amount of custom songs - [Pistol Whip](https://store.steampowered.com/app/1079800): not my kind of game (boring, IMHO) - [PowerBeatsVR](https://store.steampowered.com/app/810500): boring - [Thumper](https://store.steampowered.com/app/356400/): no custom songs - [Unplugged](https://store.steampowered.com/app/1623390): can't play (Quest 2 user) ## Intended architecture Some games have a built-in queues, but they are not cross-game. That requires an external piece of software to do so: ### Streamer side ``` +----------+ +--------------------+ | Twitch | | Streamer's Website | +----------+ +--------------------+ ^ ^ | ......... | .......... | : +------------+ / : | NGINX Rev. | / : | Proxy | / : +------------+ | Internet:Server ^ . | .........:............ | ...... | Streamer's | | PC | | | +-------+ +------------+ | OBS | | SSH Tunnel | +-------+ +------------+ ^ ^ | | | | | +-----------+ | | | | +------+ +------------+ | +-----------+ | Game | | Song Queue |<-+->| Browser | +------+ | Web View | | | Admin Tab | | +------------+ | +-----------+ v | +-------+ +--------------+ | Game |<-----------| LiveQ Server | | Files | | Process | +-------+ +--------------+ ``` In order to close the queue, just close the SSH Tunnel. ### Active Viewer Side ``` +----------------+ +-------------------+ | Stream App/Tab | | Queue Request Tab | +----------------+ +-------------------+ | | v v +----------+ +--------------------+ | Twitch | | Streamer's Website | +----------+ +--------------------+ ``` Alt+Tab or equivalent. Your view count isn't expected to decrease on mobile due to Picture in Picture. ### Passive Viewer ``` +----------------+ | Stream App/Tab | +----------------+ | v +----------+ | Twitch | +----------+ ``` ## Files not included - config.ini ```ini [app] root=https://live.yourdomain.com lang=en-us title=Joe`s Playlist description=Music queue for many rhythm games streamer=twitch:yourlogin maxqueue=8 # n songs as total in the queue maxbyviewer=2 # m unplayed songs per viewer at a time obschangekeepms=5000 # negative for an always-displaying overlay [modules] osuddr4k=1 # 1 means enabled and visible for selection osumania4k=0 # 0 means disabled, but visible for selection (not validated by the backend) osumania7k=h # h means hidden from the UI selection (not validated by the backend) osutaiko=h osucatch=h osustd=h ragnarock=h [difficulties] osuddr4k=0-1.4 osumania4k=1.2-2.4 osumania7k=0-1.5 osutaiko=0-1.5 osucatch=0-1.5 osustd=3.25-4.2 ragnarock=4-8.5 [localization] # Translate your UI search=Buscar login_with_twitch=Entrar com Twitch logout_username=Sair de title=Título artist=Artista mapper=Mapeador queue_add=Adicionar à fila queue_remove=Remover da fila queue_played=Marcar como jogado queue_unplayed=Marcar para rejogar playqueue=Fila de jogo queue=Fila done=Feito done_delete=Removido not_authenticated=Você não entrou done_add=Adicionado token_expired=Seu login expirou could_not_validate_credentials=Credenciais de login inválidas not_found=Não encontrado already_in_queue=Já está na fila queue_full=Fila cheia cannot_remove_others=Não é possível remover item de outro usuário cannot_remove_played=Não é possível remover itens já jogados only_streamer_can_mark_played=Apenas o streamer poded marcar como jogado done_mark_unplayed=Marcado para rejogar done_mark_played=Marcado como jogado shuffle=Embaralhar download=Baixar preview=Ouvir prévia stop_preview=Parar prévia all_variants=Todas as variantes osumania1k=osu!mania 1k single osumania2k=osu!mania 2k single osumania3k=osu!mania 3k single osumania4k=osu!mania 4k single osumania5k=osu!mania 5k single osumania6k=osu!mania 6k single osumania7k=osu!mania 7k single osumania8k=osu!mania 8k single osumania9k=osu!mania 9k single osumania10k=osu!mania 5k double osumania12k=osu!mania 6k double osumania14k=osu!mania 7k double osumania16k=osu!mania 8k double osumania18k=osu!mania 9k double osustd=osu! osutaiko=osu!taiko osucatch=osu!catch osuddr4k=Dance Mat (osu!mania 4k) ragnarock=Ragnaröck VR beatsaber=Beat Saber VR outfoxdance=dance @ Project OutFox outfoxpump=pump @ Project OutFox outfoxsmx=smx @ Project OutFox outfoxtechno=techno @ Project OutFox outfoxbemu=bemu @ Project OutFox outfoxpomu=pomu @ Project OutFox outfoxgddm=gddm @ Project OutFox outfoxgdgf=gdgf @ Project OutFox outfoxgh=gh @ Project OutFox outfoxtaiko=taiko @ Project OutFox outfoxbongo=bongo @ Project OutFox outfoxpara=para @ Project OutFox outfoxkbx=kbx @ Project OutFox outfoxez2=ez2 @ Project OutFox outfoxds3ddx=ds3ddx @ Project OutFox outfoxmaniax=maniax @ Project OutFox outfoxstepstage=stepstage @ Project OutFox outfoxkickbox=kickbox @ Project OutFox ``` - config.nt.ini ```ini [paths] osu=D:\path\to\osu ragnarock=D:\path\to\ragnarock\CustomSongs ``` - config.posix.ini ```ini [paths] osu=/path/to/osu ragnarock=/path/to/ragnarock/CustomSongs ``` - tokens.ini ```ini [jwt] seed=00000000-0000-4000-0000-000000000000 [twitch] client_id=123456789012345678901234567890 ``` replace the client_id placeholder with the ones copied from the [Developer Console](https://dev.twitch.tv/console/apps) generate your own seed using UUID4 or similar