LibreSplit brings auto splitting functionality to urn with Lua-based auto splitters that are easy to port from asl.
![](https://private-user-images.githubusercontent.com/34382191/316345172-2adfdae5-9a21-4bdf-a4c4-f1d5962a0b63.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NTEzNDEsIm5iZiI6MTcyMzg1MTA0MSwicGF0aCI6Ii8zNDM4MjE5MS8zMTYzNDUxNzItMmFkZmRhZTUtOWEyMS00YmRmLWE0YzQtZjFkNTk2MmEwYjYzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE2VDIzMzA0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEyMzIxMmM2NjhlNWZmZTIxZDhkNDE1ZTNjN2FhZDA3ZDQ5NGFkYjIwZmE4Mjk5OGQ5NzYzZDg1ZjhiYTcxNDcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.3uuWtkUIFOaU_ANeCoqmfg16JEbF6rSpG-cY85hOMjg)
![](https://private-user-images.githubusercontent.com/34382191/316345174-4455f57a-3d34-4fa3-9dff-2b342b6c56da.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NTEzNDEsIm5iZiI6MTcyMzg1MTA0MSwicGF0aCI6Ii8zNDM4MjE5MS8zMTYzNDUxNzQtNDQ1NWY1N2EtM2QzNC00ZmEzLTlkZmYtMmIzNDJiNmM1NmRhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE2VDIzMzA0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIwYjJhNjBhZmM4ZDI5Yjk3NjNkOTk5ZmVkNTIyYmY0ZjQwMTJiNjU1OTQzYWNmNTNhNDA1OTIxZmVhM2JmOTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.P9-qxq0BTLmSb9UWxFtMQUoCObzLElTo_lsvclpk8Ww)
- Split Tracking and Timing: Accurately track and time your speedruns with ease.
- Auto Splitter Support: Utilize Lua-based auto splitters to automate split timing based on in-game events.
- Customizable Themes: Personalize your timer's appearance by creating and applying custom themes.
- Flexible Configuration: Configure keybindings and various settings to suit your preferences.
LibreSplit requires the following dependencies on your system to compile:
libgtk+-3.0
x11
libjansson
luajit
git clone https://github.com/wins1ey/LibreSplit
cd LibreSplit
make
sudo make install
or
git clone https://github.com/wins1ey/LibreSplit && cd LibreSplit && make && sudo make install
-
Launch LibreSplit by executing the compiled binary.
./libresplit
-
When first launched, LibreSplit will create the
libresplit
directory in your config directory. Auto splitters, splits and themes go in their respective folders inside. -
The initial window is undecorated, but you can toggle window decorations by pressing the right Control key.
-
Control the timer using the following key presses:
Key Stopped Action Started Action Spacebar Start Split Backspace Reset Stop Delete Cancel -
-
The "Cancel" action resets the timer and decrements the attempt counter. A run reset before the start delay is automatically cancelled.
-
To manually modify the current split, use the following key actions:
Key Action Page Up Unsplit Page Down Skip split
-
Customize keybindings by setting the values in
com.github.wins1ey.libresplit
path withgsettings
.Key Type Description start-decorated Boolean Start with window decorations hide-cursor Boolean Hide cursor in window global-hotkeys Boolean Enables global hotkeys theme String Default theme name theme-variant String Default theme variant keybind-start-split String Start/split keybind keybind-stop-reset String Stop/Reset keybind keybind-cancel String Cancel keybind keybind-unsplit String Unsplit keybind keybind-skip-split String Skip split keybind keybind-toggle-decorations String Toggle window decorations keybind
Keybind strings should be parseable by gtk_accelerator_parse.
LibreSplit supports auto splitters written in Lua to automate split timing based on in-game events. Feel free to make your own, Documentation can be found here
Split files in LibreSplit are stored as well-formed JSON. The split file must contain a main object. The following keys are optional:
Key | Value |
---|---|
title | Title string at top of window |
start_delay | Non-negative delay until timer starts |
world_record | Best known time |
splits | Array of split objects |
theme | Window theme |
theme_variant | Window theme variant |
width | Window width |
height | Window height |
Each split object within the splits
array has the following keys:
Key | Value |
---|---|
title | Split title |
time | Split time |
best_time | Your best split time |
best_segment | Your best segment time |
Times are strings in HH:MM:SS.mmmmmm format
LibreSplit supports customizable themes, allowing you to personalize the timer's appearance. To create a theme:
- Create a CSS stylesheet with your desired styles.
- Place the stylesheet in the
~/.config/libresplit/themes/<name>/<name>.css
directory. (If you haveXDG_CONFIG_HOME
env var pointing somewher else than .config it will be wherever it points to) - Set the global theme by modifying the
theme
value ingsettings
. - Theme variants should follow the pattern
<name>-<variant>.css
. - Individual splits can apply their own themes by specifying a
theme
key in the main split object.
For a list of supported CSS properties, refer to the GtkCssProvider documentation.
The following CSS classes can be used to style the elements of the LibreSplit interface:
.window
.header
.title
.attempt-count
.time
.delta
.timer
.timer-seconds
.timer-millis
.delay
.splits
.split
.current-split
.split-title
.split-time
.split-delta
.split-last
.done
.behind
.losing
.best-segment
.best-split
.footer
.prev-segment-label
.prev-segment
.sum-of-bests-label
.sum-of-bests
.personal-best-label
.personal-best
.world-record-label
.world-record