Skip to content

Repository files navigation

Quantum Streamer

Hook for Quantum Break that enables offline playback of live episodes and subtitle override.

Table of Contents

Game Info

Quantum Break Cover

TypeValue
Developer(s)Remedy Entertainment
Publisher(s)Microsoft Studios
Director(s)Sam Lake, Mikael Kasurinen
Producer(s)Miloš Jeřábek
EngineNorthlight Engine
Platform(s)Windows, Xbox One
Genre(s)Action-adventure, third-person shooter
Mode(s)Single-player

Legal notes

  • The project doesn't contain any original assets from the game!
  • To use this project you need to have an original copy of the game (bought from Steam), the project doesn't make piracy easier and doesn't break any of the DRM included in-game.

Features

  • Offline playback (see QuantumFetcher)
  • Subtitles override support (you can translate/edit subtitles in episodes, please use QuantumFetcher to get the original subtitles)
  • Dynamically add/remove closed captions
  • Dynamically add/remove music notes in captions

Build Requirements

  • Visual Studio 2022

Libraries:

  • Poco

Compiling

See one of build workflows for more detailed steps

  1. Integrate vcpkg with Visual Studio
  2. Build project in Visual Studio (It has to be x64 Release build, it's the only one configuration setup, but please check before doing that)

Installing

  • Rename original loc_x64_f.dll to loc_x64_f_o.dll
  • Copy loc_x64_f.dll file from either the latest build in GitHub Releases or from Release folder if you compiled it yourself

Configuration

You can change the default behavior of the hook by creating config in supported format where the game .exe is

The following formats are supported:

  • .properties - properties file (in order to use it, create QuantumBreak.properties where the game executable is)
  • .ini - initialization file (in order to use it, create QuantumBreak.ini where the game executable is)
  • .xml - XML file (in order to use it, create QuantumBreak.xml where the game executable is)

In the config, you can set following values (dot seperates section and key)

KeyDescriptionAllowed ValuesDefault Value
Logger.ShowConsoleShow hook log in consoleBooleanfalse
Logger.SaveToLogFileSave hook log to fileBooleanfalse
Logger.LogFilePath to where save log fileStringQuantumStreamer.log
Logger.LogLevel_CoreChanges how detailed Core logging isPoco::Message::Priority6 (PRIO_INFORMATION)
Logger.LogLevel_NetworkChanges how detailed Network logging is (HTTP Requests/Responses)Poco::Message::Priority6 (PRIO_INFORMATION)
Logger.LogLevel_VideoListChanges how detailed Video List subsystem logging isPoco::Message::Priority6 (PRIO_INFORMATION)
Logger.LogLevel_OfflineStreamingChanges how detailed Offline Streaming subsystem logging isPoco::Message::Priority6 (PRIO_INFORMATION)
Logger.LogLevel_SubtitleOverrideChanges how detailed Subtitle Override subsystem logging isPoco::Message::Priority6 (PRIO_INFORMATION)
Server.EpisodesPathPath to where episodes data are locatedString./videos/episodes
Server.MaxQueuedMax queued HTTP requestsInteger100
Server.MaxThreadsMax threads (HTTP server)IntegerLogical CPU count or 2 if failed
Server.OfflineModeDisable online streaming, episodes stored locally will continue to workBooleanfalse
Server.PortPort for HTTP server (game also have to point to this port), if 0 will use random unused portUnsigned short0
Server.VideoListPathPath to original, unmodified ./data/videoList.rmdj fileString./data/videoList_original.rmdj
Subtitles.ClosedCaptioningShow closed captions in subtitlesBooleanfalse
Subtitles.MusicNotesShow music notes in subtitlesBooleantrue
VideoList.PatchFilePatch ./data/videoList.rmdj to point to server on startupBooleantrue

The default config should work for most of the users, but if you have special requirements you can change above settings.

Example config that will disable online streaming and enables Closed Captioning:

[Server]
OfflineMode=false
[Subtitles]
ClosedCaptioning=true

Usage

Initially, after installing the hook, with default config - nothing should change in-game. Quantum Streamer on game launch will try to load Server.VideoListPath, after that hook will scan Server.EpisodesPath directory for the locally stored episodes and/or captions_overrides.

VideoList loaded by game (data/videoList.rmdj) has to point to the Quantum Streamer server, by default Quantum Streamer will patch this file, but you can disable this behaviour by setting VideoList.PatchFile to false, but then, you have to patch that file manually - for that, you can use QuantumFetcher tool.

Each episode data is expected to be in dedicated episode directory (e.g. ./videos/episodes/J1A-X1-X2 is where hook will look for episode J1A-X1-X2 (assuming Server.EpisodesPath is not changed)) Local episodes are expected to be in ISM Smooth Stream format:

*.ism (Server Manifest) should at least define clientManifestRelativePath in head section which should reference filename/relative path for client manifest file. All media files referenced in the Server Manifest will be loaded (if media file exist)

Additionally, SubRip (.srt) files which contain _captions in their filename will be loaded, after that hook will replace captions in specific track (e.g. enus_captions.srt will override enus_captions track) with the ones from the file, allowing you to translate or edit captions in the live action.

Credits

Special thanks to:

  • Remedy Entertainment (for making the game)
  • Microsoft Studios (for publishing the game on PC)
  • r00t0 - For help with decoding videoList.rmdj

About

Hook for Quantum Break that enables offline playback of live episodes and subtitle override

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages