Plugins
What are plugins?
Plugins are your own customizable editor extensions that let you perform automated tasks very easily. They can be customized in functions, layout and style, and let you do nearly everything the normal editor would let you do. They are written in the Lua language.
Adding plugins
Plugins are defined by a folder structure built up in following way:
- Quaver/Plugins
- YourPlugin
- plugin.lua
- settings.ini
- AnotherPlugin
- plugin.lua
- settings.ini
- YourPlugin
Each individual folder that contains a plugin.lua and a settings.ini file
represents a separate plugin.
Adding a plugin is done by adding a folder that contains a plugin.lua file
and a settings.ini file to your Quaver/Plugins folder. You can find your
Quaver folder by searching for "Open Game folder" in the in-game settings, or by
going to your Steam Library, right-clicking Quaver and selecting Manage > Browse
local files.
The plugin should show up in your Plugins dropdown the next time you open the
editor. Do keep in mind that the plugin will show up with the name specified in
the settings.ini file, and not the name of the folder.
However, the process of getting a plugin can be slightly different depending on where the plugin is hosted or shared. In the case that the plugin is hosted on GitHub, you can click on the green "Download Code" button, and download it as a ZIP file. Then unzip the file to get a folder.
Creating your own plugin
To start out, create a new folder, a plugin.lua and a settings.ini file in
your Quaver/Plugins folder in the layout described in
Adding Plugins.
Fill in your plugin's metadata in your settings.ini file like this:
[Settings]
Name = Plugin Name
Author = Your Name
Description = Your description
This is the data that will be shown in the plugins dropdown in the editor.
Next, fill in your plugin.lua file like this:
function draw()
imgui.Begin("Window Title")
imgui.Text("Hello World!")
imgui.End()
end
Each plugin starts out in the draw() function as an entry point and goes on
from there, similar to how a main() would function in other languages. You can
start adding plugin elements from here on.
Quaver Plugin Guide
The best resource to start plugin development with is the Quaver Plugin Guide composed by IceDynamix. It covers core development concepts for Lua and plugins in general, provides examples for many GUI elements, and lists all possible functions you can use to interact with the editor.
Another useful resource is the ImGuiWrapper.cs file, which contains all GUI related functions you're able to use.
Example plugins
If you're looking for examples to work off, feel free to look at the example plugins folder. The already included tools in the editor for BPM Calculator, BPM Detector and "Go to objects" were also written in Lua and can be found here.
User-created plugins
A few users have already gone ahead and made plugins for everyone to use! There isn't any complete list of them yet, but here are the most known and popular ones so far:
- iceSV, a large plugin for general SV pattern creation and editing
- StackedNotesFinder, a plugin to find overlapped notes in a map
- UnsnappedNotesFinder, a plugin to find unsnapped notes in a map
- KeepStill, a plugin to create a specific SV effect that makes notes look frozen in place
- BeatSnapColorOverride, a plugin to conveniently place timing points in a way to force snap notes to a specific color in-game
- PatternMaster, a plugin to help enforcing consistency and maintainability of copy/pasted patterns