@@ -17,7 +17,7 @@ brew install git wget cmake autoconf automake libtool jq python | |||||
If you have an anti-virus program running, disable it or it may interfere with the build process. | If you have an anti-virus program running, disable it or it may interfere with the build process. | ||||
Install [MSYS2](http://www.msys2.org/) and launch the MinGW 64-bit shell from the Start menu, *not the default MSYS shell*. | |||||
Install the x86_64 version of [MSYS2](http://www.msys2.org/) and launch the MinGW 64-bit shell from the Start menu, *not the default MSYS shell*. | |||||
Update the package manager itself: | Update the package manager itself: | ||||
```bash | ```bash | ||||
pacman -Syu | pacman -Syu | ||||
@@ -16,7 +16,6 @@ | |||||
- [Reddit](https://www.reddit.com/r/vcvrack/) | - [Reddit](https://www.reddit.com/r/vcvrack/) | ||||
- [IRC](http://webchat.freenode.net?channels=%23VCVRack) | - [IRC](http://webchat.freenode.net?channels=%23VCVRack) | ||||
- [Patchstorage](https://patchstorage.com/platform/vcv-rack/) | - [Patchstorage](https://patchstorage.com/platform/vcv-rack/) | ||||
- [Switched On Rack unofficial blog](http://www.switchedonrack.com/) | |||||
- [MuffWiggler thread](https://www.muffwiggler.com/forum/viewtopic.php?t=186899) | - [MuffWiggler thread](https://www.muffwiggler.com/forum/viewtopic.php?t=186899) | ||||
- [KVR Audio thread](https://www.kvraudio.com/forum/viewtopic.php?f=23&t=489230) | - [KVR Audio thread](https://www.kvraudio.com/forum/viewtopic.php?f=23&t=489230) | ||||
- [Hispasonic thread (Spanish)](https://www.hispasonic.com/foros/foro-vcv-rack/516252) | - [Hispasonic thread (Spanish)](https://www.hispasonic.com/foros/foro-vcv-rack/516252) | ||||
@@ -29,7 +29,7 @@ It is not planned. There are many issues with such a project. | |||||
## Is VCV Rack available as a VST/AU/AAX plugin for DAWs? | ## Is VCV Rack available as a VST/AU/AAX plugin for DAWs? | ||||
VCV Rack can be fully considered a DAW itself rather than a "synthesizer plugin", so Rack is a standalone application. | VCV Rack can be fully considered a DAW itself rather than a "synthesizer plugin", so Rack is a standalone application. | ||||
However, due to overwhelming user demand, a new product called *VCV Rack for DAWs* will be available as a 64-bit VST2 plugin for around $99 shortly after Rack v2 is released around Jan-Feb 2020. | |||||
However, due to overwhelming user demand, a new product called *VCV Rack for DAWs* will be available as a 64-bit VST2 plugin for around $99 shortly after Rack v2 is released. | |||||
VST3/AU/AAX/LV2 versions might be released afterwards, but this is not yet confirmed. | VST3/AU/AAX/LV2 versions might be released afterwards, but this is not yet confirmed. | ||||
All Rack v2 plugins will be compatible with the plugin version of Rack. | All Rack v2 plugins will be compatible with the plugin version of Rack. | ||||
The standalone version of Rack v2 will continue to be free/open-source. | The standalone version of Rack v2 will continue to be free/open-source. | ||||
@@ -40,6 +40,7 @@ The standalone version of Rack v2 will continue to be free/open-source. | |||||
It relied on [inter-process communication (IPC)](https://en.wikipedia.org/wiki/Inter-process_communication) between Rack (server) and the DAW plugin (client), similar to [ReWire](https://en.wikipedia.org/wiki/ReWire_(software_protocol)). | It relied on [inter-process communication (IPC)](https://en.wikipedia.org/wiki/Inter-process_communication) between Rack (server) and the DAW plugin (client), similar to [ReWire](https://en.wikipedia.org/wiki/ReWire_(software_protocol)). | ||||
Because real-time IPC of audio cannot be achieved on non-[real-time operating systems](https://en.wikipedia.org/wiki/Real-time_operating_system), it was never intended as more than a fun experiment, and the project was concluded a month after development started. | Because real-time IPC of audio cannot be achieved on non-[real-time operating systems](https://en.wikipedia.org/wiki/Real-time_operating_system), it was never intended as more than a fun experiment, and the project was concluded a month after development started. | ||||
One could say the experiment "failed", but its purpose was primarily to see how much it would fail. | One could say the experiment "failed", but its purpose was primarily to see how much it would fail. | ||||
The conclusion was that it was not reliable enough for the majority of users. | |||||
VCV Bridge was deprecated in July 2018 and is now unsupported. | VCV Bridge was deprecated in July 2018 and is now unsupported. | ||||
The Bridge VST2/AU plugin was removed in Rack 1.0 (although it can be found in [earlier Rack packages](https://vcvrack.com/downloads/)), and the Bridge audio/MIDI driver will be removed in Rack 2.0. | The Bridge VST2/AU plugin was removed in Rack 1.0 (although it can be found in [earlier Rack packages](https://vcvrack.com/downloads/)), and the Bridge audio/MIDI driver will be removed in Rack 2.0. | ||||
@@ -6,8 +6,10 @@ VCV Rack is free software, so you may simply download and run the software to se | |||||
However, if you are experiencing performance issues, make sure you have at least the following hardware. | However, if you are experiencing performance issues, make sure you have at least the following hardware. | ||||
- Operating system: MacOS 10.7+, Windows 7+, or Linux (Ubuntu 16.04+, etc) | - Operating system: MacOS 10.7+, Windows 7+, or Linux (Ubuntu 16.04+, etc) | ||||
- CPU: Intel/AMD 64-bit processor from \~2011 or later | - CPU: Intel/AMD 64-bit processor from \~2011 or later | ||||
- Graphics: Dedicated Nvidia/AMD graphics card from \~2013 or later. | |||||
Integrated (non-dedicated) graphics such as Intel HD/Iris are not recommended and cause significantly increased CPU usage. | |||||
- Graphics: Dedicated graphics card from \~2013 or later with the latest driver software update: | |||||
- [Nvidia drivers](https://www.nvidia.com/Download/index.aspx) | |||||
- [AMD drivers](https://www.amd.com/en/support) | |||||
- [Intel drivers](https://downloadcenter.intel.com/product/80939/Graphics-Drivers). Integrated (non-dedicated) graphics such as Intel HD/Iris are not recommended and cause significantly increased CPU usage. | |||||
- RAM: 1GB | - RAM: 1GB | ||||
- Disk space: 1GB | - Disk space: 1GB | ||||
@@ -7,9 +7,10 @@ If you encounter a bug in Rack itself (not a plugin), such as a UI issue, broken | |||||
- Log in or register for a free [GitHub account](https://github.com/). | - Log in or register for a free [GitHub account](https://github.com/). | ||||
- Search [Rack's issue tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) to check if someone else has posted a similar bug report. | - Search [Rack's issue tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) to check if someone else has posted a similar bug report. | ||||
- If the bug is already reported, vote for it by adding a "thumb-up" reaction on the first post. | - If the bug is already reported, vote for it by adding a "thumb-up" reaction on the first post. | ||||
- If not, [open a bug report issue](https://github.com/VCVRack/Rack/issues/new?template=bug_report.md) and fill out the issue template. | |||||
- If not, [open a bug report issue](https://github.com/VCVRack/Rack/issues/new?template=bug_report.md) and fill out the issue template ([found here](https://raw.githubusercontent.com/VCVRack/Rack/v1/.github/ISSUE_TEMPLATE/bug_report.md) if it doesn't appear when creating your issue). | |||||
If you provide enough information for a developer to reproduce and identify the bug, a fix is then implemented, publicly tested with development builds, and released in a future Rack version. | |||||
A developer then attempts to reproduce and identify your bug. | |||||
If successful, a fix is implemented, publicly tested with development builds, and released in a future Rack version. | |||||
## Feature requests for Rack | ## Feature requests for Rack | ||||
@@ -18,9 +19,10 @@ If you want to propose a feature or change for Rack, follow these steps. | |||||
- Log in or register for a free [GitHub account](https://github.com/). | - Log in or register for a free [GitHub account](https://github.com/). | ||||
- Search [Rack's issue tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) to check if someone else has posted a similar feature request. | - Search [Rack's issue tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) to check if someone else has posted a similar feature request. | ||||
- If the feature is already requested, vote for it by adding a "thumb-up" reaction on the first post. | - If the feature is already requested, vote for it by adding a "thumb-up" reaction on the first post. | ||||
- If not, [open an feature request issue](https://github.com/VCVRack/Rack/issues/new?template=feature_request.md) and fill out the issue template. | |||||
- If not, [open an feature request issue](https://github.com/VCVRack/Rack/issues/new?template=feature_request.md) and fill out the issue template ([found here](https://raw.githubusercontent.com/VCVRack/Rack/v1/.github/ISSUE_TEMPLATE/feature_request.md) if it doesn't appear when creating your issue). | |||||
If your proposal is approved (or modified until approved), the feature is then implemented, publicly tested with development builds, and released in a future Rack version. | |||||
Your proposal is then discussed and possibly modified. | |||||
If approved, the feature is implemented, publicly tested with development builds, and released in a future Rack version. | |||||
## Bug reports and feature requests for Rack plugins | ## Bug reports and feature requests for Rack plugins | ||||
@@ -6,7 +6,6 @@ For example, see Fundamental's [plugin.json](https://github.com/VCVRack/Fundamen | |||||
JSON paths are denoted in "flat format", as used by [jq](https://stedolan.github.io/jq/manual/). | JSON paths are denoted in "flat format", as used by [jq](https://stedolan.github.io/jq/manual/). | ||||
## `.slug` | ## `.slug` | ||||
*String. Required.* | *String. Required.* | ||||
The unique identifier for your plugin. | The unique identifier for your plugin. | ||||
@@ -19,7 +18,6 @@ To guarantee uniqueness, it is a good idea to prefix the slug by your "brand nam | |||||
The word "slug" [comes from web publishing](https://en.wikipedia.org/wiki/Clean_URL#Slug) to represent URL paths that never change, which in turn [comes from typesetting](https://en.wikipedia.org/wiki/Slug_(typesetting)). | The word "slug" [comes from web publishing](https://en.wikipedia.org/wiki/Clean_URL#Slug) to represent URL paths that never change, which in turn [comes from typesetting](https://en.wikipedia.org/wiki/Slug_(typesetting)). | ||||
## `.name` | ## `.name` | ||||
*String. Required.* | *String. Required.* | ||||
The human-readable name for your plugin. | The human-readable name for your plugin. | ||||
@@ -28,7 +26,6 @@ Used for labeling your plugin the VCV Library. | |||||
Unlike slugs, the name can be changed at any time without breaking patch compatibility. | Unlike slugs, the name can be changed at any time without breaking patch compatibility. | ||||
## `.version` | ## `.version` | ||||
*String. Required.* | *String. Required.* | ||||
The version of your plugin should follow the form `MAJOR.MINOR.REVISION`. | The version of your plugin should follow the form `MAJOR.MINOR.REVISION`. | ||||
@@ -41,7 +38,6 @@ For example, *MyPlugin 1.4.2* would specify that your plugin is compatible with | |||||
If you publish the source code in a git repository, it is recommended to add a git tag with `git tag vX.Y.Z` and `git push --tags`. | If you publish the source code in a git repository, it is recommended to add a git tag with `git tag vX.Y.Z` and `git push --tags`. | ||||
## `.license` | ## `.license` | ||||
*String. Required.* | *String. Required.* | ||||
The license of your plugin. | The license of your plugin. | ||||
@@ -50,88 +46,267 @@ Use `"proprietary"` for commercial and freeware plugins. | |||||
If your plugin uses a common open-source license, use the identifier string from the [SPDX License List](https://spdx.org/licenses/), such as `GPL-3.0-only`, `GPL-3.0-or-later`, `MIT`, `BSD-3-Clause`, `CC0-1.0`, etc. | If your plugin uses a common open-source license, use the identifier string from the [SPDX License List](https://spdx.org/licenses/), such as `GPL-3.0-only`, `GPL-3.0-or-later`, `MIT`, `BSD-3-Clause`, `CC0-1.0`, etc. | ||||
## `.brand` | ## `.brand` | ||||
*String. Optional.* | *String. Optional.* | ||||
Prefix string for all modules in your plugin. | Prefix string for all modules in your plugin. | ||||
For example, the brand "VCV" is used by the Fundamental plugin to create "VCV VCF", VCV Unity", etc. | For example, the brand "VCV" is used by the Fundamental plugin to create "VCV VCF", VCV Unity", etc. | ||||
If blank or undefined, the plugin name is used. | If blank or undefined, the plugin name is used. | ||||
## `.author` | |||||
## `.description` | |||||
*String. Optional.* | |||||
A one-line summary of the plugin's purpose. | |||||
If your plugin doesn't follow a theme, it's probably best to omit this. | |||||
## `.author` | |||||
*String. Required.* | *String. Required.* | ||||
Your name, company, alias, GitHub username, etc. | Your name, company, alias, GitHub username, etc. | ||||
## `.authorEmail` | ## `.authorEmail` | ||||
*String. Optional.* | *String. Optional.* | ||||
Your email address for support inquiries. | Your email address for support inquiries. | ||||
## `.authorUrl` | ## `.authorUrl` | ||||
*String. Optional.* | *String. Optional.* | ||||
Homepage for yourself or your company. | Homepage for yourself or your company. | ||||
## `.pluginUrl` | ## `.pluginUrl` | ||||
*String. Optional.* | *String. Optional.* | ||||
Homepage for the plugin itself. | Homepage for the plugin itself. | ||||
## `.manualUrl` | ## `.manualUrl` | ||||
*String. Optional.* | *String. Optional.* | ||||
The manual website of your plugin. | The manual website of your plugin. | ||||
E.g. HTML, PDF, GitHub readme, GitHub wiki. | E.g. HTML, PDF, GitHub readme, GitHub wiki. | ||||
## `.sourceUrl` | ## `.sourceUrl` | ||||
*String. Optional.* | *String. Optional.* | ||||
Homepage for the source code. | Homepage for the source code. | ||||
For GitHub URLs, use the main project page, not the `.git` URL. | For GitHub URLs, use the main project page, not the `.git` URL. | ||||
## `.donateUrl` | ## `.donateUrl` | ||||
*String. Optional.* | *String. Optional.* | ||||
Link to donation page for users who wish to donate. | Link to donation page for users who wish to donate. | ||||
E.g. [PayPal.Me](https://www.paypal.me/), [Cash App](https://cash.app/) links. | E.g. [PayPal.Me](https://www.paypal.me/), [Cash App](https://cash.app/) links. | ||||
## `.modules[].slug` | ## `.modules[].slug` | ||||
*String. Required.* | *String. Required.* | ||||
The unique identifier for the module. | The unique identifier for the module. | ||||
Similar guidelines from [.slug](#slug) apply. | Similar guidelines from [.slug](#slug) apply. | ||||
## `.modules[].name` | ## `.modules[].name` | ||||
*String. Required.* | *String. Required.* | ||||
The human-readable name for the module. | The human-readable name for the module. | ||||
## `.modules[].tags` | ## `.modules[].tags` | ||||
*Array of strings. Optional.* | *Array of strings. Optional.* | ||||
List of tags representing the functions and/or properties of the module. | List of tags representing the functions and/or properties of the module. | ||||
All tags must match the [list of allowed tags](https://github.com/VCVRack/Rack/blob/v1/src/tag.cpp) in Rack, case-insensitive. | |||||
All tags must match the following strings, case-insensitive. | |||||
## `.modules[].description` | |||||
### `Arpeggiator` | |||||
Breaks a chord into a sequence of single notes. | |||||
### `Attenuator` | |||||
With a level knob and not much else. | |||||
### `Blank` | |||||
No parameters or ports. Serves no purpose except visual. | |||||
### `Chorus` | |||||
### `Clock generator` | |||||
*Deprecated aliases: `Clock`* | |||||
### `Clock modulator` | |||||
Clock dividers, multipliers, etc. | |||||
### `Compressor` | |||||
With threshold, ratio, knee, etc parameters. | |||||
### `Controller` | |||||
Use only if the artist "performs" with this module. Simply having knobs is not enough. Examples: on-screen keyboard, XY pad. | |||||
### `Delay` | |||||
### `Digital` | |||||
### `Distortion` | |||||
### `Drum` | |||||
*Deprecated aliases: `Drums`, `Percussion`* | |||||
### `Dual` | |||||
The core functionality times two. If multiple channels are a requirement for the module to exist (ring modulator, mixer, etc), it is not a Dual module. | |||||
### `Dynamics` | |||||
### `Effect` | |||||
### `Envelope follower` | |||||
### `Envelope generator` | |||||
### `Equalizer` | |||||
*Deprecated aliases: `EQ`* | |||||
### `Expander` | |||||
Expands the functionality of a "mother" module when placed next to it. Expanders should inherit the tags of its mother module. | |||||
### `External` | |||||
### `Filter` | |||||
*Deprecated aliases: `VCF`, `Voltage controlled filter`* | |||||
### `Flanger` | |||||
### `Function generator` | |||||
### `Granular` | |||||
### `Hardware clone` | |||||
*Deprecated aliases: `Hardware`* | |||||
Clones the functionality, panel design, and component layout of a hardware module on the market. | |||||
Remember to follow the [VCV Plugin Ethics Guidelines](PluginLicensing.html#vcv-plugin-ethics-guidelines) and only clone hardware with permission from its owner. | |||||
If there is a [ModularGrid](https://www.modulargrid.net/) page for the hardware module, add the [modularGridUrl](Manifest#modules-modulargridurl) property. | |||||
If the module name does not include the hardware's name or brand, add that information to the [module description](Manifest#modules-description) so users can search for the module by its hardware name, e.g. `"Based on Mutable Instruments Clouds"`. | |||||
### `Limiter` | |||||
Limits a signal from exceeding a threshold, e.g. with soft clipping or dynamic range compression. | |||||
### `Logic` | |||||
Implements binary logic with gate signals. | |||||
### `Low-frequency oscillator` | |||||
*Deprecated aliases: `LFO`, `Low frequency oscillator`* | |||||
### `Low-pass gate` | |||||
*Deprecated aliases: `Low pass gate`, `Lowpass gate`* | |||||
### `MIDI` | |||||
### `Mixer` | |||||
### `Multiple` | |||||
### `Noise` | |||||
### `Oscillator` | |||||
*Deprecated aliases: `VCO`, `Voltage controlled oscillator`* | |||||
### `Panning` | |||||
*Deprecated aliases: `Pan`* | |||||
### `Phaser` | |||||
### `Physical modeling` | |||||
### `Polyphonic` | |||||
*Deprecated aliases: `Poly`* | |||||
### `Quad` | |||||
The core functionality times four. If multiple channels are a requirement for the module to exist (ring modulator, mixer, etc), it is not a Quad module. | |||||
### `Quantizer` | |||||
### `Random` | |||||
### `Recording` | |||||
### `Reverb` | |||||
### `Ring modulator` | |||||
### `Sample and hold` | |||||
*Deprecated aliases: `S&H`, `Sample & hold`* | |||||
### `Sampler` | |||||
### `Sequencer` | |||||
### `Slew limiter` | |||||
### `Speech` | |||||
### `Switch` | |||||
### `Synth voice` | |||||
A synth voice must have, at the minimum, a built-in oscillator and envelope. | |||||
### `Tuner` | |||||
### `Utility` | |||||
Serves only extremely basic functions, like inverting, max, min, multiplying by 2, etc. | |||||
### `Visual` | |||||
### `Vocoder` | |||||
### `Voltage-controlled amplifier` | |||||
*Deprecated aliases: `Amplifier`, `VCA`, `Voltage controlled amplifier`* | |||||
### `Waveshaper` | |||||
## `.modules[].description` | |||||
*String. Optional.* | *String. Optional.* | ||||
A one-line summary of the module's purpose. | A one-line summary of the module's purpose. | ||||
Displayed in the Module Browser tooltip. | Displayed in the Module Browser tooltip. | ||||
## `modules[].manualUrl` | ## `modules[].manualUrl` | ||||
*String. Optional.* | *String. Optional.* | ||||
The manual website of the module. | The manual website of the module. | ||||
If omitted, the plugin's manual is used. | If omitted, the plugin's manual is used. | ||||
## `modules[].modularGridUrl` | |||||
*String. Optional.* | |||||
If this module has the [Hardware clone](Manifest#hardware-clone) tag, this is the URL to the [ModularGrid](https://www.modulargrid.net/) page for that module. | |||||
Example: `"https://www.modulargrid.net/e/mutable-instruments-clouds"` |
@@ -0,0 +1,10 @@ | |||||
```bash | |||||
perl -i -pe 's/(\w+)_PARAM\b/PARAM_$1/g' src/* | |||||
perl -i -pe 's/(\w+)_BUTTON\b/BUTTON_$1/g' src/* | |||||
perl -i -pe 's/(\w+)_SWITCH\b/SWITCH_$1/g' src/* | |||||
perl -i -pe 's/(\w+)_INPUT\b/INPUT_$1/g' src/* | |||||
perl -i -pe 's/(\w+)_OUTPUT\b/OUTPUT_$1/g' src/* | |||||
perl -i -pe 's/(\w+)_LIGHT\b/LIGHT_$1/g' src/* | |||||
``` | |||||
perl -i -pe 's/app::ABI/ABI/g' src/**/* include/**/* |
@@ -14,9 +14,9 @@ This contains the Rack API headers and build system for compiling your plugin. | |||||
## Creating the template plugin | ## Creating the template plugin | ||||
The `helper.py` script included in the Rack SDK is an easy way to create a plugin template. | The `helper.py` script included in the Rack SDK is an easy way to create a plugin template. | ||||
You can run it with no arguments to display documentation. | |||||
You can run it with no arguments to show documentation. | |||||
Decide on a [slug](Metadata.html#slug) for your plugin. | |||||
Decide on a [slug](Manifest.html#slug) for your plugin. | |||||
We will use `MyPlugin` for this tutorial. | We will use `MyPlugin` for this tutorial. | ||||
Run | Run | ||||
```bash | ```bash | ||||
@@ -40,7 +40,7 @@ Manifest written to MyPlugin/plugin.json | |||||
Created template plugin in MyPlugin/ | Created template plugin in MyPlugin/ | ||||
Initialized empty Git repository in /home/VCV/MyPlugin/.git/ | Initialized empty Git repository in /home/VCV/MyPlugin/.git/ | ||||
``` | ``` | ||||
You can change this metadata later by editing `plugin.json`. (See [Metadata](Metadata.html)). | |||||
You can change this manifest later by editing `plugin.json`. (See [Manifest](Manifest.html)). | |||||
To test your build system, you may run `RACK_DIR=<Rack SDK folder> make` in the plugin directory. | To test your build system, you may run `RACK_DIR=<Rack SDK folder> make` in the plugin directory. | ||||
If it succeeds, an "empty" plugin will be built containing no modules. | If it succeeds, an "empty" plugin will be built containing no modules. | ||||
@@ -138,5 +138,5 @@ Eventually you may want to release your hard work. | |||||
See [Plugin Licensing](PluginLicensing.html) for information about following Rack's license, particularly if developing a commercial plugin. | See [Plugin Licensing](PluginLicensing.html) for information about following Rack's license, particularly if developing a commercial plugin. | ||||
It is recommended to add a `LICENSE.txt` file to your plugin's root folder that specifies your preferred license (whether open-source or proprietary). | It is recommended to add a `LICENSE.txt` file to your plugin's root folder that specifies your preferred license (whether open-source or proprietary). | ||||
Review your `plugin.json` [metadata](Metadata.html) file for correctness, spelling, and capitalization. | |||||
Review your `plugin.json` [manifest](Manifest.html) file for correctness, spelling, and capitalization. | |||||
Finally, submit your plugin to the [VCV Library](https://github.com/VCVRack/library#adding-your-plugin-to-the-vcv-library-for-open-source-plugins) to allow users to easily download your plugin from their VCV account. | Finally, submit your plugin to the [VCV Library](https://github.com/VCVRack/library#adding-your-plugin-to-the-vcv-library-for-open-source-plugins) to allow users to easily download your plugin from their VCV account. |
@@ -13,6 +13,7 @@ Your PR will be accepted if it is a net positive benefit to readers. | |||||
Install [Sphinx](http://www.sphinx-doc.org/en/stable/) 1.8.1. Newer versions do not generate formulas and image tags properly. | Install [Sphinx](http://www.sphinx-doc.org/en/stable/) 1.8.1. Newer versions do not generate formulas and image tags properly. | ||||
pip install sphinx==1.8.1 | pip install sphinx==1.8.1 | ||||
pip install sphinx_rtd_theme | |||||
Install [recommonmark](https://github.com/rtfd/recommonmark) 0.4.0. | Install [recommonmark](https://github.com/rtfd/recommonmark) 0.4.0. | ||||