Browse, stream and download Monstercat Songs, powered by the Monstercat API and MCatalog. This is the story of how it came to be.
The application is still in a beta state, you may encounter bugs. Please report issues via GitHub and send a report from inside the application. The latter will automatically include logs from TEMP/monsterutilities/logs
.
Download the portable version from the website or from GitHub releases.
Download OS-specific installers from GitHub releases with an optional bundled Java environment.
If you did not choose a download with a bundled JRE, the application requires Java 8 by Oracle to be installed on your computer.
Make sure to read the initial in-app guide and watch out for tooltips.
For downloading and listening to early access, your connect.sid
needs to be entered in the bottom of the Downloader. It is a cookie that identifies your Monstercat Account.
You can either login with your credentials or obtain it manually as described below.
- Log in on monstercat.com/gold and ensure that you have a valid Monstercat Gold subscription
- Go to your browser cookies and search for
connect.monstercat.com
For Chromium-based browsers:chrome:https://settings/cookies/detail?site=connect.monstercat.com
- Find the content of
connect.sid
. It is a string starting withs%3A
and has around 90 characters. - Copy that string into the
connect.sid
Textfield at the bottom of the Downloader.
Sometimes the cache runs into issues which may cause problems in the Downloader. In that case use the "Clear cache & Restart" button in the settings to reset the cache.
If you still have issues, hit me up on Discord or send Feedback directly from the application!
Upon starting the application for the first time, it will fetch and cache all Releases as well as Sheets (Catalog/Genres). This might take some time depending on your internet connection. On subsequent use it will prefer to fetch incrementally, reducing the load on your connection as well as Monstercat's Servers.
Once fetched, Songs can be browsed offline but not played or downloaded.
The cache as well as logs are stored in the TEMP directory, depending on your operating system:
- Windows:
C:\Users\<username>\AppData\Local\Temp\monsterutilities
- can be changed by editing thejava.io.tmpdir
system property - Unix:
/var/tmp/monsterutilities
, or under/tmp
if/var/tmp
does not exist
The Catalog provides an overview of all Tracks ever released on the label with extensive filtering possibilities.
Tip: You can customize which columns to show by clicking the +
in the top right of the table.
There is a player on the top that can stream any Monstercat track, just like the website. Double-click on any piece in the Catalog or Downloader to load it into the Player!
If you have Monstercat Gold you can bulk download everything according to your preferences!
The application has various color schemes and configuration options.
The project is built using Gradle.
- Clone the project
- Run the application using
./gradlew run
from the Terminal or by executing the Gradle run task within your IDE - Start coding & submit a PR when you think you've made an improvement
To have Gradle use a specific JDK, create a gradle.properties
file at the root of the project with the following line:
org.gradle.java.home=/path/to/jdk
In order to fetch the Catalog and Genres you have to create a file called src/resources/sheets-api-key
and put an api key for Google Sheets into it.
Name | Action |
---|---|
run |
run the project right from source |
shadowJar |
create an executable jar in the root directory of the project bundled with all libraries |
build |
build & test the whole project |
Provide the argument -Dargs="--loglevel trace"
to the run task to change the log level or pass other commandline options to the application.
When running a self-compiled jar, the application might try to update itself to an earlier version due to missing information. To prevent this, add the --no-update
flag.
Logging is done via slf4j wrapped by kotlin-logging and carried out by logback-classic.
A Logger can be created anywhere via val logger = KotlinLogging.logger { }
and will automatically pick up the context where it was instantiated. Prefer to create it statically to avoid creating a new logger object for each instance.
Then use the logger
object to log key information at the INFO level, debugging clues in DEBUG and more detailed/spammy information in TRACE. WARN should only be used at key points of the application or for non-critical but unusual exceptions. Use ERROR solely for critical exceptions.
The application runs in WARN by default, however the run task automatically passes arguments to run it at DEBUG. This can be changed using the --loglevel
flag.
The log is additionally saved to a file in TEMP/monsterutilities/logs
at DEBUG level unless the log level is set to TRACE in which case it records everything.
Thanks to for providing us a free license to build the installers.