diff --git a/.gitignore b/.gitignore index 2141695..fb2f568 100644 --- a/.gitignore +++ b/.gitignore @@ -109,6 +109,7 @@ lint/tmp/ # Build-generated assets (rebuilt by scripts/build_all.sh) app/src/main/assets/* !app/src/main/assets/modgui_runtime.js +!app/src/main/assets/lv2/ app/src/main/cpp/libs/ app/src/main/jniLibs/ diff --git a/app/src/main/assets/lv2/.gitignore b/app/src/main/assets/lv2/.gitignore new file mode 100644 index 0000000..a216dce --- /dev/null +++ b/app/src/main/assets/lv2/.gitignore @@ -0,0 +1,12 @@ +# Ignore build-generated files (TTL, HTML, CSS, .so, etc.) +* + +# Track this file +!.gitignore + +# Allow recursion into subdirectories +!*/ + +# Track screenshot and thumbnail assets +!screenshot-*.png +!thumbnail-*.png diff --git a/app/src/main/assets/lv2/AIDA-X.lv2/screenshot-aida-x.png b/app/src/main/assets/lv2/AIDA-X.lv2/screenshot-aida-x.png new file mode 100644 index 0000000..b8a9599 Binary files /dev/null and b/app/src/main/assets/lv2/AIDA-X.lv2/screenshot-aida-x.png differ diff --git a/app/src/main/assets/lv2/AIDA-X.lv2/thumbnail-aida-x.png b/app/src/main/assets/lv2/AIDA-X.lv2/thumbnail-aida-x.png new file mode 100644 index 0000000..dffd079 Binary files /dev/null and b/app/src/main/assets/lv2/AIDA-X.lv2/thumbnail-aida-x.png differ diff --git a/app/src/main/assets/lv2/CollisionDrive.lv2/modgui/screenshot-collisiondrive.png b/app/src/main/assets/lv2/CollisionDrive.lv2/modgui/screenshot-collisiondrive.png new file mode 100644 index 0000000..32ec74b Binary files /dev/null and b/app/src/main/assets/lv2/CollisionDrive.lv2/modgui/screenshot-collisiondrive.png differ diff --git a/app/src/main/assets/lv2/CollisionDrive.lv2/modgui/thumbnail-collisiondrive.png b/app/src/main/assets/lv2/CollisionDrive.lv2/modgui/thumbnail-collisiondrive.png new file mode 100644 index 0000000..13e38e7 Binary files /dev/null and b/app/src/main/assets/lv2/CollisionDrive.lv2/modgui/thumbnail-collisiondrive.png differ diff --git a/app/src/main/assets/lv2/FatFrog.lv2/screenshot-fatfrog.png b/app/src/main/assets/lv2/FatFrog.lv2/screenshot-fatfrog.png new file mode 100644 index 0000000..e98e57b Binary files /dev/null and b/app/src/main/assets/lv2/FatFrog.lv2/screenshot-fatfrog.png differ diff --git a/app/src/main/assets/lv2/FatFrog.lv2/thumbnail-fatfrog.png b/app/src/main/assets/lv2/FatFrog.lv2/thumbnail-fatfrog.png new file mode 100644 index 0000000..506c975 Binary files /dev/null and b/app/src/main/assets/lv2/FatFrog.lv2/thumbnail-fatfrog.png differ diff --git a/app/src/main/assets/lv2/GxCabSim.lv2/screenshot-gx_cabsim.png b/app/src/main/assets/lv2/GxCabSim.lv2/screenshot-gx_cabsim.png new file mode 100644 index 0000000..81ecfcf Binary files /dev/null and b/app/src/main/assets/lv2/GxCabSim.lv2/screenshot-gx_cabsim.png differ diff --git a/app/src/main/assets/lv2/GxCabSim.lv2/thumbnail-gx_cabsim.png b/app/src/main/assets/lv2/GxCabSim.lv2/thumbnail-gx_cabsim.png new file mode 100644 index 0000000..33d62c5 Binary files /dev/null and b/app/src/main/assets/lv2/GxCabSim.lv2/thumbnail-gx_cabsim.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxAxisFace.lv2/modgui/screenshot-gxaxisface.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxAxisFace.lv2/modgui/screenshot-gxaxisface.png new file mode 100644 index 0000000..b8c6704 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxAxisFace.lv2/modgui/screenshot-gxaxisface.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxAxisFace.lv2/modgui/thumbnail-gxaxisface.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxAxisFace.lv2/modgui/thumbnail-gxaxisface.png new file mode 100644 index 0000000..22924ff Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxAxisFace.lv2/modgui/thumbnail-gxaxisface.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxBaJaTubeDriver.lv2/modgui/screenshot-gxbajatubedriver.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxBaJaTubeDriver.lv2/modgui/screenshot-gxbajatubedriver.png new file mode 100644 index 0000000..65ec557 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxBaJaTubeDriver.lv2/modgui/screenshot-gxbajatubedriver.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxBaJaTubeDriver.lv2/modgui/thumbnail-gxbajatubedriver.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxBaJaTubeDriver.lv2/modgui/thumbnail-gxbajatubedriver.png new file mode 100644 index 0000000..69bb9c4 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxBaJaTubeDriver.lv2/modgui/thumbnail-gxbajatubedriver.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxBlueAmp.lv2/modgui/screenshot-gxblueamp.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxBlueAmp.lv2/modgui/screenshot-gxblueamp.png new file mode 100644 index 0000000..fcbb2b6 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxBlueAmp.lv2/modgui/screenshot-gxblueamp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxBlueAmp.lv2/modgui/thumbnail-gxblueamp.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxBlueAmp.lv2/modgui/thumbnail-gxblueamp.png new file mode 100644 index 0000000..ef80681 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxBlueAmp.lv2/modgui/thumbnail-gxblueamp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxBoobTube.lv2/modgui/screenshot-gxboobtube.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxBoobTube.lv2/modgui/screenshot-gxboobtube.png new file mode 100644 index 0000000..084ffea Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxBoobTube.lv2/modgui/screenshot-gxboobtube.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxBoobTube.lv2/modgui/thumbnail-gxboobtube.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxBoobTube.lv2/modgui/thumbnail-gxboobtube.png new file mode 100644 index 0000000..c4e5344 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxBoobTube.lv2/modgui/thumbnail-gxboobtube.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxBottleRocket.lv2/modgui/screenshot-gxbottlerocket.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxBottleRocket.lv2/modgui/screenshot-gxbottlerocket.png new file mode 100644 index 0000000..a3cc89c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxBottleRocket.lv2/modgui/screenshot-gxbottlerocket.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxBottleRocket.lv2/modgui/thumbnail-gxbottlerocket.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxBottleRocket.lv2/modgui/thumbnail-gxbottlerocket.png new file mode 100644 index 0000000..92047d6 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxBottleRocket.lv2/modgui/thumbnail-gxbottlerocket.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxClubDrive.lv2/modgui/screenshot-gxclubdrive.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxClubDrive.lv2/modgui/screenshot-gxclubdrive.png new file mode 100644 index 0000000..1886d38 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxClubDrive.lv2/modgui/screenshot-gxclubdrive.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxClubDrive.lv2/modgui/thumbnail-gxclubdrive.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxClubDrive.lv2/modgui/thumbnail-gxclubdrive.png new file mode 100644 index 0000000..4e24e2d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxClubDrive.lv2/modgui/thumbnail-gxclubdrive.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxCreamMachine.lv2/modgui/screenshot-gxcreammachine.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxCreamMachine.lv2/modgui/screenshot-gxcreammachine.png new file mode 100644 index 0000000..6e59edf Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxCreamMachine.lv2/modgui/screenshot-gxcreammachine.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxCreamMachine.lv2/modgui/thumbnail-gxcreammachine.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxCreamMachine.lv2/modgui/thumbnail-gxcreammachine.png new file mode 100644 index 0000000..166fa0a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxCreamMachine.lv2/modgui/thumbnail-gxcreammachine.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxDOP250.lv2/modgui/screenshot-gxdop250.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxDOP250.lv2/modgui/screenshot-gxdop250.png new file mode 100644 index 0000000..824bf84 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxDOP250.lv2/modgui/screenshot-gxdop250.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxDOP250.lv2/modgui/thumbnail-gxdop250.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxDOP250.lv2/modgui/thumbnail-gxdop250.png new file mode 100644 index 0000000..ce674db Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxDOP250.lv2/modgui/thumbnail-gxdop250.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxEpic.lv2/modgui/screenshot-gxepic.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxEpic.lv2/modgui/screenshot-gxepic.png new file mode 100644 index 0000000..67a6edc Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxEpic.lv2/modgui/screenshot-gxepic.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxEpic.lv2/modgui/thumbnail-gxepic.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxEpic.lv2/modgui/thumbnail-gxepic.png new file mode 100644 index 0000000..f11fe2c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxEpic.lv2/modgui/thumbnail-gxepic.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxEternity.lv2/modgui/screenshot-gxeternity.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxEternity.lv2/modgui/screenshot-gxeternity.png new file mode 100644 index 0000000..af3e0b6 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxEternity.lv2/modgui/screenshot-gxeternity.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxEternity.lv2/modgui/thumbnail-gxeternity.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxEternity.lv2/modgui/thumbnail-gxeternity.png new file mode 100644 index 0000000..aa4a606 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxEternity.lv2/modgui/thumbnail-gxeternity.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1b.lv2/modgui/screenshot-gxfz1b.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1b.lv2/modgui/screenshot-gxfz1b.png new file mode 100644 index 0000000..27b3232 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1b.lv2/modgui/screenshot-gxfz1b.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1b.lv2/modgui/thumbnail-gxfz1b.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1b.lv2/modgui/thumbnail-gxfz1b.png new file mode 100644 index 0000000..4631d28 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1b.lv2/modgui/thumbnail-gxfz1b.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1s.lv2/modgui/screenshot-gxfz1s.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1s.lv2/modgui/screenshot-gxfz1s.png new file mode 100644 index 0000000..a1b5163 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1s.lv2/modgui/screenshot-gxfz1s.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1s.lv2/modgui/thumbnail-gxfz1s.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1s.lv2/modgui/thumbnail-gxfz1s.png new file mode 100644 index 0000000..a37810e Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxFz1s.lv2/modgui/thumbnail-gxfz1s.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxGuvnor.lv2/modgui/screenshot-gxguvnor.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxGuvnor.lv2/modgui/screenshot-gxguvnor.png new file mode 100644 index 0000000..4c71cf1 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxGuvnor.lv2/modgui/screenshot-gxguvnor.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxGuvnor.lv2/modgui/thumbnail-gxguvnor.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxGuvnor.lv2/modgui/thumbnail-gxguvnor.png new file mode 100644 index 0000000..884e42b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxGuvnor.lv2/modgui/thumbnail-gxguvnor.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxHeathkit.lv2/modgui/screenshot-gxheathkit.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxHeathkit.lv2/modgui/screenshot-gxheathkit.png new file mode 100644 index 0000000..2729ef2 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxHeathkit.lv2/modgui/screenshot-gxheathkit.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxHeathkit.lv2/modgui/thumbnail-gxheathkit.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxHeathkit.lv2/modgui/thumbnail-gxheathkit.png new file mode 100644 index 0000000..a36c80d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxHeathkit.lv2/modgui/thumbnail-gxheathkit.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxHotBox.lv2/modgui/screenshot-gxhotbox.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxHotBox.lv2/modgui/screenshot-gxhotbox.png new file mode 100644 index 0000000..d741d81 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxHotBox.lv2/modgui/screenshot-gxhotbox.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxHotBox.lv2/modgui/thumbnail-gxhotbox.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxHotBox.lv2/modgui/thumbnail-gxhotbox.png new file mode 100644 index 0000000..e280a82 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxHotBox.lv2/modgui/thumbnail-gxhotbox.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxHyperion.lv2/modgui/screenshot-gxhyperion.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxHyperion.lv2/modgui/screenshot-gxhyperion.png new file mode 100644 index 0000000..6f1650a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxHyperion.lv2/modgui/screenshot-gxhyperion.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxHyperion.lv2/modgui/thumbnail-gxhyperion.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxHyperion.lv2/modgui/thumbnail-gxhyperion.png new file mode 100644 index 0000000..b0428d7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxHyperion.lv2/modgui/thumbnail-gxhyperion.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxKnightFuzz.lv2/modgui/screenshot-gxknightfuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxKnightFuzz.lv2/modgui/screenshot-gxknightfuzz.png new file mode 100644 index 0000000..155cd58 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxKnightFuzz.lv2/modgui/screenshot-gxknightfuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxKnightFuzz.lv2/modgui/thumbnail-gxknightfuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxKnightFuzz.lv2/modgui/thumbnail-gxknightfuzz.png new file mode 100644 index 0000000..2741a8d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxKnightFuzz.lv2/modgui/thumbnail-gxknightfuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxLiquidDrive.lv2/modgui/screenshot-gxliquiddrive.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxLiquidDrive.lv2/modgui/screenshot-gxliquiddrive.png new file mode 100644 index 0000000..e5b6523 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxLiquidDrive.lv2/modgui/screenshot-gxliquiddrive.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxLiquidDrive.lv2/modgui/thumbnail-gxliquiddrive.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxLiquidDrive.lv2/modgui/thumbnail-gxliquiddrive.png new file mode 100644 index 0000000..1e2f326 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxLiquidDrive.lv2/modgui/thumbnail-gxliquiddrive.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxLuna.lv2/modgui/screenshot-gxluna.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxLuna.lv2/modgui/screenshot-gxluna.png new file mode 100644 index 0000000..9bee8a0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxLuna.lv2/modgui/screenshot-gxluna.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxLuna.lv2/modgui/thumbnail-gxluna.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxLuna.lv2/modgui/thumbnail-gxluna.png new file mode 100644 index 0000000..97f2353 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxLuna.lv2/modgui/thumbnail-gxluna.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxMicroAmp.lv2/modgui/screenshot-gxmicroamp.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxMicroAmp.lv2/modgui/screenshot-gxmicroamp.png new file mode 100644 index 0000000..c5c9e9f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxMicroAmp.lv2/modgui/screenshot-gxmicroamp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxMicroAmp.lv2/modgui/thumbnail-gxmicroamp.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxMicroAmp.lv2/modgui/thumbnail-gxmicroamp.png new file mode 100644 index 0000000..2ac3b4d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxMicroAmp.lv2/modgui/thumbnail-gxmicroamp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxPlexi.lv2/modgui/screenshot-gxplexi.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxPlexi.lv2/modgui/screenshot-gxplexi.png new file mode 100644 index 0000000..3a479f3 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxPlexi.lv2/modgui/screenshot-gxplexi.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxPlexi.lv2/modgui/thumbnail-gxplexi.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxPlexi.lv2/modgui/thumbnail-gxplexi.png new file mode 100644 index 0000000..b545497 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxPlexi.lv2/modgui/thumbnail-gxplexi.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxQuack.lv2/modgui/screenshot-gxquack.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxQuack.lv2/modgui/screenshot-gxquack.png new file mode 100644 index 0000000..9bf69c5 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxQuack.lv2/modgui/screenshot-gxquack.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxQuack.lv2/modgui/thumbnail-gxquack.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxQuack.lv2/modgui/thumbnail-gxquack.png new file mode 100644 index 0000000..6149b9c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxQuack.lv2/modgui/thumbnail-gxquack.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSD1.lv2/modgui/screenshot-gxsd1.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSD1.lv2/modgui/screenshot-gxsd1.png new file mode 100644 index 0000000..d3844fd Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSD1.lv2/modgui/screenshot-gxsd1.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSD1.lv2/modgui/thumbnail-gxsd1.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSD1.lv2/modgui/thumbnail-gxsd1.png new file mode 100644 index 0000000..aafad92 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSD1.lv2/modgui/thumbnail-gxsd1.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSD2Lead.lv2/modgui/screenshot-gxsd2lead.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSD2Lead.lv2/modgui/screenshot-gxsd2lead.png new file mode 100644 index 0000000..ca5616f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSD2Lead.lv2/modgui/screenshot-gxsd2lead.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSD2Lead.lv2/modgui/thumbnail-gxsd2lead.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSD2Lead.lv2/modgui/thumbnail-gxsd2lead.png new file mode 100644 index 0000000..031a42a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSD2Lead.lv2/modgui/thumbnail-gxsd2lead.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSVT.lv2/modgui/screenshot-gxsvt.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSVT.lv2/modgui/screenshot-gxsvt.png new file mode 100644 index 0000000..6694309 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSVT.lv2/modgui/screenshot-gxsvt.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSVT.lv2/modgui/thumbnail-gxsvt.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSVT.lv2/modgui/thumbnail-gxsvt.png new file mode 100644 index 0000000..71096f7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSVT.lv2/modgui/thumbnail-gxsvt.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSaturator.lv2/modgui/screenshot-gxsaturator.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSaturator.lv2/modgui/screenshot-gxsaturator.png new file mode 100644 index 0000000..d116e9e Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSaturator.lv2/modgui/screenshot-gxsaturator.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSaturator.lv2/modgui/thumbnail-gxsaturator.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSaturator.lv2/modgui/thumbnail-gxsaturator.png new file mode 100644 index 0000000..f5e74e5 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSaturator.lv2/modgui/thumbnail-gxsaturator.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxShakaTube.lv2/modgui/screenshot-gxshakatube.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxShakaTube.lv2/modgui/screenshot-gxshakatube.png new file mode 100644 index 0000000..fda3ea9 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxShakaTube.lv2/modgui/screenshot-gxshakatube.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxShakaTube.lv2/modgui/thumbnail-gxshakatube.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxShakaTube.lv2/modgui/thumbnail-gxshakatube.png new file mode 100644 index 0000000..1952a87 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxShakaTube.lv2/modgui/thumbnail-gxshakatube.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSloopyBlue.lv2/modgui/screenshot-gxsloopyblue.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSloopyBlue.lv2/modgui/screenshot-gxsloopyblue.png new file mode 100644 index 0000000..b75e0ec Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSloopyBlue.lv2/modgui/screenshot-gxsloopyblue.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSloopyBlue.lv2/modgui/thumbnail-gxsloopyblue.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSloopyBlue.lv2/modgui/thumbnail-gxsloopyblue.png new file mode 100644 index 0000000..d0c0e03 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSloopyBlue.lv2/modgui/thumbnail-gxsloopyblue.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSlowGear.lv2/modgui/screenshot-gxslowgear.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSlowGear.lv2/modgui/screenshot-gxslowgear.png new file mode 100644 index 0000000..5cb4a14 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSlowGear.lv2/modgui/screenshot-gxslowgear.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSlowGear.lv2/modgui/thumbnail-gxslowgear.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSlowGear.lv2/modgui/thumbnail-gxslowgear.png new file mode 100644 index 0000000..35eea7c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSlowGear.lv2/modgui/thumbnail-gxslowgear.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSunFace.lv2/modgui/screenshot-gxsunface.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSunFace.lv2/modgui/screenshot-gxsunface.png new file mode 100644 index 0000000..b9a1099 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSunFace.lv2/modgui/screenshot-gxsunface.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSunFace.lv2/modgui/thumbnail-gxsunface.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSunFace.lv2/modgui/thumbnail-gxsunface.png new file mode 100644 index 0000000..9fddae7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSunFace.lv2/modgui/thumbnail-gxsunface.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSuperFuzz.lv2/modgui/screenshot-gxsuperfuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSuperFuzz.lv2/modgui/screenshot-gxsuperfuzz.png new file mode 100644 index 0000000..d509fba Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSuperFuzz.lv2/modgui/screenshot-gxsuperfuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSuperFuzz.lv2/modgui/thumbnail-gxsuperfuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSuperFuzz.lv2/modgui/thumbnail-gxsuperfuzz.png new file mode 100644 index 0000000..fa149ad Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSuperFuzz.lv2/modgui/thumbnail-gxsuperfuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSupersonic.lv2/modgui/screenshot-gxsupersonic.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSupersonic.lv2/modgui/screenshot-gxsupersonic.png new file mode 100644 index 0000000..1f91c79 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSupersonic.lv2/modgui/screenshot-gxsupersonic.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSupersonic.lv2/modgui/thumbnail-gxsupersonic.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSupersonic.lv2/modgui/thumbnail-gxsupersonic.png new file mode 100644 index 0000000..e7c6080 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSupersonic.lv2/modgui/thumbnail-gxsupersonic.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSuppaToneBender.lv2/modgui/screenshot-gxsuppatonebender.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSuppaToneBender.lv2/modgui/screenshot-gxsuppatonebender.png new file mode 100644 index 0000000..4dcaa60 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSuppaToneBender.lv2/modgui/screenshot-gxsuppatonebender.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxSuppaToneBender.lv2/modgui/thumbnail-gxsuppatonebender.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxSuppaToneBender.lv2/modgui/thumbnail-gxsuppatonebender.png new file mode 100644 index 0000000..ad14b71 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxSuppaToneBender.lv2/modgui/thumbnail-gxsuppatonebender.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxTimRay.lv2/modgui/screenshot-gxtimray.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxTimRay.lv2/modgui/screenshot-gxtimray.png new file mode 100644 index 0000000..f1001eb Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxTimRay.lv2/modgui/screenshot-gxtimray.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxTimRay.lv2/modgui/thumbnail-gxtimray.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxTimRay.lv2/modgui/thumbnail-gxtimray.png new file mode 100644 index 0000000..36696d8 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxTimRay.lv2/modgui/thumbnail-gxtimray.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxToneMachine.lv2/modgui/screenshot-gxtonemachine.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxToneMachine.lv2/modgui/screenshot-gxtonemachine.png new file mode 100644 index 0000000..b685c64 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxToneMachine.lv2/modgui/screenshot-gxtonemachine.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxToneMachine.lv2/modgui/thumbnail-gxtonemachine.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxToneMachine.lv2/modgui/thumbnail-gxtonemachine.png new file mode 100644 index 0000000..034edce Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxToneMachine.lv2/modgui/thumbnail-gxtonemachine.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxTubeDistortion.lv2/modgui/screenshot-gxtubedistortion.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxTubeDistortion.lv2/modgui/screenshot-gxtubedistortion.png new file mode 100644 index 0000000..2f19a9d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxTubeDistortion.lv2/modgui/screenshot-gxtubedistortion.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxTubeDistortion.lv2/modgui/thumbnail-gxtubedistortion.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxTubeDistortion.lv2/modgui/thumbnail-gxtubedistortion.png new file mode 100644 index 0000000..909afd7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxTubeDistortion.lv2/modgui/thumbnail-gxtubedistortion.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxUVox720k.lv2/modgui/screenshot-gxuvox.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxUVox720k.lv2/modgui/screenshot-gxuvox.png new file mode 100644 index 0000000..eb0678a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxUVox720k.lv2/modgui/screenshot-gxuvox.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxUVox720k.lv2/modgui/thumbnail-gxuvox.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxUVox720k.lv2/modgui/thumbnail-gxuvox.png new file mode 100644 index 0000000..6bb8d02 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxUVox720k.lv2/modgui/thumbnail-gxuvox.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxUltraCab.lv2/modgui/screenshot-gxultracab.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxUltraCab.lv2/modgui/screenshot-gxultracab.png new file mode 100644 index 0000000..0aa92f9 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxUltraCab.lv2/modgui/screenshot-gxultracab.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxUltraCab.lv2/modgui/thumbnail-gxultracab.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxUltraCab.lv2/modgui/thumbnail-gxultracab.png new file mode 100644 index 0000000..1c6a40f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxUltraCab.lv2/modgui/thumbnail-gxultracab.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxVBassPreAmp.lv2/modgui/screenshot-gxvbasspreamp.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxVBassPreAmp.lv2/modgui/screenshot-gxvbasspreamp.png new file mode 100644 index 0000000..162f679 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxVBassPreAmp.lv2/modgui/screenshot-gxvbasspreamp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxVBassPreAmp.lv2/modgui/thumbnail-gxvbasspreamp.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxVBassPreAmp.lv2/modgui/thumbnail-gxvbasspreamp.png new file mode 100644 index 0000000..c835632 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxVBassPreAmp.lv2/modgui/thumbnail-gxvbasspreamp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxValveCaster.lv2/modgui/screenshot-gxvalvecaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxValveCaster.lv2/modgui/screenshot-gxvalvecaster.png new file mode 100644 index 0000000..a4207dd Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxValveCaster.lv2/modgui/screenshot-gxvalvecaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxValveCaster.lv2/modgui/thumbnail-gxvalvecaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxValveCaster.lv2/modgui/thumbnail-gxvalvecaster.png new file mode 100644 index 0000000..9272386 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxValveCaster.lv2/modgui/thumbnail-gxvalvecaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxVintageFuzzMaster.lv2/modgui/screenshot-gxvintagefuzzmaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxVintageFuzzMaster.lv2/modgui/screenshot-gxvintagefuzzmaster.png new file mode 100644 index 0000000..9bf4fc3 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxVintageFuzzMaster.lv2/modgui/screenshot-gxvintagefuzzmaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxVintageFuzzMaster.lv2/modgui/thumbnail-gxvintagefuzzmaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxVintageFuzzMaster.lv2/modgui/thumbnail-gxvintagefuzzmaster.png new file mode 100644 index 0000000..4b176b8 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxVintageFuzzMaster.lv2/modgui/thumbnail-gxvintagefuzzmaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxVmk2.lv2/modgui/screenshot-gxvmk2.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxVmk2.lv2/modgui/screenshot-gxvmk2.png new file mode 100644 index 0000000..a3fe96d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxVmk2.lv2/modgui/screenshot-gxvmk2.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxVmk2.lv2/modgui/thumbnail-gxvmk2.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxVmk2.lv2/modgui/thumbnail-gxvmk2.png new file mode 100644 index 0000000..5492efb Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxVmk2.lv2/modgui/thumbnail-gxvmk2.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxVoodoFuzz.lv2/modgui/screenshot-gxvoodoofuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxVoodoFuzz.lv2/modgui/screenshot-gxvoodoofuzz.png new file mode 100644 index 0000000..a5d75c2 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxVoodoFuzz.lv2/modgui/screenshot-gxvoodoofuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/GxVoodoFuzz.lv2/modgui/thumbnail-gxvoodoofuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/GxVoodoFuzz.lv2/modgui/thumbnail-gxvoodoofuzz.png new file mode 100644 index 0000000..2d0cc38 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/GxVoodoFuzz.lv2/modgui/thumbnail-gxvoodoofuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_aclipper.lv2/screenshot-aclipper.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_aclipper.lv2/screenshot-aclipper.png new file mode 100644 index 0000000..e059cb0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_aclipper.lv2/screenshot-aclipper.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_aclipper.lv2/thumbnail-aclipper.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_aclipper.lv2/thumbnail-aclipper.png new file mode 100644 index 0000000..7217f77 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_aclipper.lv2/thumbnail-aclipper.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/modgui/screenshot-gx-alembic-mono.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/modgui/screenshot-gx-alembic-mono.png new file mode 100644 index 0000000..ef473bd Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/modgui/screenshot-gx-alembic-mono.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/modgui/thumbnail-gx-alembic-mono.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/modgui/thumbnail-gx-alembic-mono.png new file mode 100644 index 0000000..6c62253 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/modgui/thumbnail-gx-alembic-mono.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/screenshot-gx-alembic-mono.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/screenshot-gx-alembic-mono.png new file mode 100644 index 0000000..ef473bd Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_alembic.lv2/screenshot-gx-alembic-mono.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/modgui/screenshot-gxamplifier-x.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/modgui/screenshot-gxamplifier-x.png new file mode 100644 index 0000000..88cf612 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/modgui/screenshot-gxamplifier-x.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/modgui/thumbnail-gxamplifier-x.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/modgui/thumbnail-gxamplifier-x.png new file mode 100644 index 0000000..89d0adc Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/modgui/thumbnail-gxamplifier-x.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/screenshot-gxamplifier-x.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/screenshot-gxamplifier-x.png new file mode 100644 index 0000000..88cf612 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp.lv2/screenshot-gxamplifier-x.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/modgui/screenshot-gxamplifier-stereo-x.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/modgui/screenshot-gxamplifier-stereo-x.png new file mode 100644 index 0000000..d12a955 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/modgui/screenshot-gxamplifier-stereo-x.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/modgui/thumbnail-gxamplifier-stereo-x.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/modgui/thumbnail-gxamplifier-stereo-x.png new file mode 100644 index 0000000..ce012f3 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/modgui/thumbnail-gxamplifier-stereo-x.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/screenshot-gxamplifier-stereo-x.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/screenshot-gxamplifier-stereo-x.png new file mode 100644 index 0000000..d12a955 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_amp_stereo.lv2/screenshot-gxamplifier-stereo-x.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/modgui/screenshot-gxbarkgraphiceq.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/modgui/screenshot-gxbarkgraphiceq.png new file mode 100644 index 0000000..e0b4803 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/modgui/screenshot-gxbarkgraphiceq.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/modgui/thumbnail-gxbarkgraphiceq.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/modgui/thumbnail-gxbarkgraphiceq.png new file mode 100644 index 0000000..bccbe4f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/modgui/thumbnail-gxbarkgraphiceq.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/screenshot-gxbarkgraphiceq.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/screenshot-gxbarkgraphiceq.png new file mode 100644 index 0000000..e0b4803 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_barkgraphiceq.lv2/screenshot-gxbarkgraphiceq.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_bmp.lv2/screenshot-bmp.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_bmp.lv2/screenshot-bmp.png new file mode 100644 index 0000000..6e3d02c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_bmp.lv2/screenshot-bmp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_bmp.lv2/thumbnail-bmp.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_bmp.lv2/thumbnail-bmp.png new file mode 100644 index 0000000..f35f0ad Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_bmp.lv2/thumbnail-bmp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_bossds1.lv2/screenshot-bossds1.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_bossds1.lv2/screenshot-bossds1.png new file mode 100644 index 0000000..c3cf161 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_bossds1.lv2/screenshot-bossds1.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_bossds1.lv2/thumbnail-bossds1.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_bossds1.lv2/thumbnail-bossds1.png new file mode 100644 index 0000000..f51911e Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_bossds1.lv2/thumbnail-bossds1.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/modgui/screenshot-gxcabinet.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/modgui/screenshot-gxcabinet.png new file mode 100644 index 0000000..fc166e4 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/modgui/screenshot-gxcabinet.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/modgui/thumbnail-gxcabinet.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/modgui/thumbnail-gxcabinet.png new file mode 100644 index 0000000..44a565a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/modgui/thumbnail-gxcabinet.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/screenshot-gxcabinet.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/screenshot-gxcabinet.png new file mode 100644 index 0000000..fc166e4 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cabinet.lv2/screenshot-gxcabinet.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/modgui/screenshot-gxchorus-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/modgui/screenshot-gxchorus-stereo.png new file mode 100644 index 0000000..03d9980 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/modgui/screenshot-gxchorus-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/modgui/thumbnail-gxchorus-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/modgui/thumbnail-gxchorus-stereo.png new file mode 100644 index 0000000..b2dc3b6 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/modgui/thumbnail-gxchorus-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/screenshot-gxchorus-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/screenshot-gxchorus-stereo.png new file mode 100644 index 0000000..03d9980 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_chorus.lv2/screenshot-gxchorus-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_colwah.lv2/screenshot-colwah.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_colwah.lv2/screenshot-colwah.png new file mode 100644 index 0000000..0922dce Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_colwah.lv2/screenshot-colwah.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_colwah.lv2/thumbnail-colwah.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_colwah.lv2/thumbnail-colwah.png new file mode 100644 index 0000000..67ba27d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_colwah.lv2/thumbnail-colwah.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/modgui/screenshot-gxcompressor.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/modgui/screenshot-gxcompressor.png new file mode 100644 index 0000000..114d98a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/modgui/screenshot-gxcompressor.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/modgui/thumbnail-gxcompressor.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/modgui/thumbnail-gxcompressor.png new file mode 100644 index 0000000..593c05e Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/modgui/thumbnail-gxcompressor.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/screenshot-gxcompressor.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/screenshot-gxcompressor.png new file mode 100644 index 0000000..114d98a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_compressor.lv2/screenshot-gxcompressor.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/modgui/screenshot-gxcolorsound-tonebender.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/modgui/screenshot-gxcolorsound-tonebender.png new file mode 100644 index 0000000..3d8ce38 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/modgui/screenshot-gxcolorsound-tonebender.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/modgui/thumbnail-gxcolorsound-tonebender.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/modgui/thumbnail-gxcolorsound-tonebender.png new file mode 100644 index 0000000..8e7fe26 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/modgui/thumbnail-gxcolorsound-tonebender.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/screenshot-gxcolorsound-tonebender.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/screenshot-gxcolorsound-tonebender.png new file mode 100644 index 0000000..3d8ce38 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_cstb.lv2/screenshot-gxcolorsound-tonebender.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/modgui/screenshot-gxdelay-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/modgui/screenshot-gxdelay-stereo.png new file mode 100644 index 0000000..702cf4c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/modgui/screenshot-gxdelay-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/modgui/thumbnail-gxdelay-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/modgui/thumbnail-gxdelay-stereo.png new file mode 100644 index 0000000..d907a85 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/modgui/thumbnail-gxdelay-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/screenshot-gxdelay-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/screenshot-gxdelay-stereo.png new file mode 100644 index 0000000..702cf4c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_delay.lv2/screenshot-gxdelay-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/modgui/screenshot-gxdetune.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/modgui/screenshot-gxdetune.png new file mode 100644 index 0000000..a581e24 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/modgui/screenshot-gxdetune.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/modgui/thumbnail-gxdetune.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/modgui/thumbnail-gxdetune.png new file mode 100644 index 0000000..7170cd2 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/modgui/thumbnail-gxdetune.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/screenshot-gxdetune.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/screenshot-gxdetune.png new file mode 100644 index 0000000..a581e24 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_detune.lv2/screenshot-gxdetune.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/modgui/screenshot-gxdigitaldelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/modgui/screenshot-gxdigitaldelay.png new file mode 100644 index 0000000..b31b200 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/modgui/screenshot-gxdigitaldelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/modgui/thumbnail-gxdigitaldelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/modgui/thumbnail-gxdigitaldelay.png new file mode 100644 index 0000000..2c10617 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/modgui/thumbnail-gxdigitaldelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/screenshot-gxdigitaldelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/screenshot-gxdigitaldelay.png new file mode 100644 index 0000000..b31b200 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay.lv2/screenshot-gxdigitaldelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/modgui/screenshot-gxdigitaldelayst.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/modgui/screenshot-gxdigitaldelayst.png new file mode 100644 index 0000000..49bbda7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/modgui/screenshot-gxdigitaldelayst.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/modgui/thumbnail-gxdigitaldelayst.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/modgui/thumbnail-gxdigitaldelayst.png new file mode 100644 index 0000000..a2a6d63 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/modgui/thumbnail-gxdigitaldelayst.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/screenshot-gxdigitaldelayst.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/screenshot-gxdigitaldelayst.png new file mode 100644 index 0000000..49bbda7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_digital_delay_st.lv2/screenshot-gxdigitaldelayst.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/modgui/screenshot-gxduckdelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/modgui/screenshot-gxduckdelay.png new file mode 100644 index 0000000..6a2236b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/modgui/screenshot-gxduckdelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/modgui/thumbnail-gxduckdelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/modgui/thumbnail-gxduckdelay.png new file mode 100644 index 0000000..c7ee579 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/modgui/thumbnail-gxduckdelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/screenshot-gxduckdelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/screenshot-gxduckdelay.png new file mode 100644 index 0000000..6a2236b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay.lv2/screenshot-gxduckdelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/modgui/screenshot-gxduckdelayst.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/modgui/screenshot-gxduckdelayst.png new file mode 100644 index 0000000..e5035b2 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/modgui/screenshot-gxduckdelayst.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/modgui/thumbnail-gxduckdelayst.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/modgui/thumbnail-gxduckdelayst.png new file mode 100644 index 0000000..476ea2a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/modgui/thumbnail-gxduckdelayst.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/screenshot-gxduckdelayst.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/screenshot-gxduckdelayst.png new file mode 100644 index 0000000..e5035b2 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_duck_delay_st.lv2/screenshot-gxduckdelayst.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/modgui/screenshot-gxecho-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/modgui/screenshot-gxecho-stereo.png new file mode 100644 index 0000000..a3f28df Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/modgui/screenshot-gxecho-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/modgui/thumbnail-gxecho-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/modgui/thumbnail-gxecho-stereo.png new file mode 100644 index 0000000..2e99a09 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/modgui/thumbnail-gxecho-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/screenshot-gxecho-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/screenshot-gxecho-stereo.png new file mode 100644 index 0000000..a3f28df Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_echo.lv2/screenshot-gxecho-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/modgui/screenshot-gxexpander.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/modgui/screenshot-gxexpander.png new file mode 100644 index 0000000..c1fe82b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/modgui/screenshot-gxexpander.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/modgui/thumbnail-gxexpander.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/modgui/thumbnail-gxexpander.png new file mode 100644 index 0000000..b044d95 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/modgui/thumbnail-gxexpander.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/screenshot-gxexpander.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/screenshot-gxexpander.png new file mode 100644 index 0000000..c1fe82b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_expander.lv2/screenshot-gxexpander.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/modgui/screenshot-gxflanger.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/modgui/screenshot-gxflanger.png new file mode 100644 index 0000000..d361fa6 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/modgui/screenshot-gxflanger.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/modgui/thumbnail-gxflanger.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/modgui/thumbnail-gxflanger.png new file mode 100644 index 0000000..9b0de4d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/modgui/thumbnail-gxflanger.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/screenshot-gxflanger.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/screenshot-gxflanger.png new file mode 100644 index 0000000..d361fa6 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_flanger.lv2/screenshot-gxflanger.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/modgui/screenshot-gxfuzzmaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/modgui/screenshot-gxfuzzmaster.png new file mode 100644 index 0000000..6e45b74 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/modgui/screenshot-gxfuzzmaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/modgui/thumbnail-gxfuzzmaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/modgui/thumbnail-gxfuzzmaster.png new file mode 100644 index 0000000..f3b714c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/modgui/thumbnail-gxfuzzmaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/screenshot-gxfuzzmaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/screenshot-gxfuzzmaster.png new file mode 100644 index 0000000..6e45b74 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fumaster.lv2/screenshot-gxfuzzmaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/modgui/screenshot-gxfuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/modgui/screenshot-gxfuzz.png new file mode 100644 index 0000000..60856c0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/modgui/screenshot-gxfuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/modgui/thumbnail-gxfuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/modgui/thumbnail-gxfuzz.png new file mode 100644 index 0000000..557958d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/modgui/thumbnail-gxfuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/screenshot-gxfuzz.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/screenshot-gxfuzz.png new file mode 100644 index 0000000..60856c0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzz.lv2/screenshot-gxfuzz.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/modgui/screenshot-gxfuzzfacejh2.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/modgui/screenshot-gxfuzzfacejh2.png new file mode 100644 index 0000000..238ad2f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/modgui/screenshot-gxfuzzfacejh2.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/modgui/thumbnail-gxfuzzfacejh2.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/modgui/thumbnail-gxfuzzfacejh2.png new file mode 100644 index 0000000..94a133f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/modgui/thumbnail-gxfuzzfacejh2.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/screenshot-gxfuzzfacejh2.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/screenshot-gxfuzzfacejh2.png new file mode 100644 index 0000000..238ad2f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzface.lv2/screenshot-gxfuzzfacejh2.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/modgui/screenshot-gxfuzzfacefuller.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/modgui/screenshot-gxfuzzfacefuller.png new file mode 100644 index 0000000..5666449 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/modgui/screenshot-gxfuzzfacefuller.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/modgui/thumbnail-gxfuzzfacefuller.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/modgui/thumbnail-gxfuzzfacefuller.png new file mode 100644 index 0000000..7b0623c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/modgui/thumbnail-gxfuzzfacefuller.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/screenshot-gxfuzzfacefuller.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/screenshot-gxfuzzfacefuller.png new file mode 100644 index 0000000..5666449 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_fuzzfacefm.lv2/screenshot-gxfuzzfacefuller.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_gcb_95.lv2/screenshot-gcb95.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_gcb_95.lv2/screenshot-gcb95.png new file mode 100644 index 0000000..4775f1c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_gcb_95.lv2/screenshot-gcb95.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_gcb_95.lv2/thumbnail-gcb95.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_gcb_95.lv2/thumbnail-gcb95.png new file mode 100644 index 0000000..45a7c4e Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_gcb_95.lv2/thumbnail-gcb95.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/modgui/screenshot-gxgraphiceq.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/modgui/screenshot-gxgraphiceq.png new file mode 100644 index 0000000..b612c95 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/modgui/screenshot-gxgraphiceq.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/modgui/thumbnail-gxgraphiceq.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/modgui/thumbnail-gxgraphiceq.png new file mode 100644 index 0000000..6f4b12c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/modgui/thumbnail-gxgraphiceq.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/screenshot-gxgraphiceq.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/screenshot-gxgraphiceq.png new file mode 100644 index 0000000..b612c95 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_graphiceq.lv2/screenshot-gxgraphiceq.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/modgui/screenshot-gxhfbrightener.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/modgui/screenshot-gxhfbrightener.png new file mode 100644 index 0000000..9c8cf6c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/modgui/screenshot-gxhfbrightener.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/modgui/thumbnail-gxhfbrightener.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/modgui/thumbnail-gxhfbrightener.png new file mode 100644 index 0000000..64745dd Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/modgui/thumbnail-gxhfbrightener.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/screenshot-gxhfbrightener.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/screenshot-gxhfbrightener.png new file mode 100644 index 0000000..9c8cf6c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hfb.lv2/screenshot-gxhfbrightener.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/modgui/screenshot-gxhogsfoot.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/modgui/screenshot-gxhogsfoot.png new file mode 100644 index 0000000..6f2b9d7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/modgui/screenshot-gxhogsfoot.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/modgui/thumbnail-gxhogsfoot.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/modgui/thumbnail-gxhogsfoot.png new file mode 100644 index 0000000..2174692 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/modgui/thumbnail-gxhogsfoot.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/screenshot-gxhogsfoot.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/screenshot-gxhogsfoot.png new file mode 100644 index 0000000..6f2b9d7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hogsfoot.lv2/screenshot-gxhogsfoot.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/modgui/screenshot-gxhornet.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/modgui/screenshot-gxhornet.png new file mode 100644 index 0000000..168cdf5 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/modgui/screenshot-gxhornet.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/modgui/thumbnail-gxhornet.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/modgui/thumbnail-gxhornet.png new file mode 100644 index 0000000..bcd778d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/modgui/thumbnail-gxhornet.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/screenshot-gxhornet.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/screenshot-gxhornet.png new file mode 100644 index 0000000..168cdf5 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_hornet.lv2/screenshot-gxhornet.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/modgui/screenshot-gxjcm800pre.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/modgui/screenshot-gxjcm800pre.png new file mode 100644 index 0000000..8e290ab Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/modgui/screenshot-gxjcm800pre.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/modgui/thumbnail-gxjcm800pre.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/modgui/thumbnail-gxjcm800pre.png new file mode 100644 index 0000000..8a2d478 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/modgui/thumbnail-gxjcm800pre.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/screenshot-gxjcm800pre.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/screenshot-gxjcm800pre.png new file mode 100644 index 0000000..8e290ab Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre.lv2/screenshot-gxjcm800pre.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/modgui/screenshot-gxjcm800prest.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/modgui/screenshot-gxjcm800prest.png new file mode 100644 index 0000000..f5a004b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/modgui/screenshot-gxjcm800prest.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/modgui/thumbnail-gxjcm800prest.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/modgui/thumbnail-gxjcm800prest.png new file mode 100644 index 0000000..a3c8caa Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/modgui/thumbnail-gxjcm800prest.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/screenshot-gxjcm800prest.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/screenshot-gxjcm800prest.png new file mode 100644 index 0000000..f5a004b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_jcm800pre_st.lv2/screenshot-gxjcm800prest.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_livelooper.lv2/screenshot-gxlivelooper.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_livelooper.lv2/screenshot-gxlivelooper.png new file mode 100644 index 0000000..be22ae2 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_livelooper.lv2/screenshot-gxlivelooper.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/modgui/screenshot-gxmultibandcompressor.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/modgui/screenshot-gxmultibandcompressor.png new file mode 100644 index 0000000..3a1d720 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/modgui/screenshot-gxmultibandcompressor.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/modgui/thumbnail-gxmultibandcompressor.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/modgui/thumbnail-gxmultibandcompressor.png new file mode 100644 index 0000000..242423a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/modgui/thumbnail-gxmultibandcompressor.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/screenshot-gxmultibandcompressor.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/screenshot-gxmultibandcompressor.png new file mode 100644 index 0000000..3a1d720 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbcompressor.lv2/screenshot-gxmultibandcompressor.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/modgui/screenshot-gxmultibanddelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/modgui/screenshot-gxmultibanddelay.png new file mode 100644 index 0000000..af831bc Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/modgui/screenshot-gxmultibanddelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/modgui/thumbnail-gxmultibanddelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/modgui/thumbnail-gxmultibanddelay.png new file mode 100644 index 0000000..4e6074c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/modgui/thumbnail-gxmultibanddelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/screenshot-gxmultibanddelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/screenshot-gxmultibanddelay.png new file mode 100644 index 0000000..af831bc Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdelay.lv2/screenshot-gxmultibanddelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/modgui/screenshot-gxmultibanddistortion.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/modgui/screenshot-gxmultibanddistortion.png new file mode 100644 index 0000000..fcdd479 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/modgui/screenshot-gxmultibanddistortion.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/modgui/thumbnail-gxmultibanddistortion.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/modgui/thumbnail-gxmultibanddistortion.png new file mode 100644 index 0000000..eba179b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/modgui/thumbnail-gxmultibanddistortion.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/screenshot-gxmultibanddistortion.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/screenshot-gxmultibanddistortion.png new file mode 100644 index 0000000..fcdd479 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbdistortion.lv2/screenshot-gxmultibanddistortion.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/modgui/screenshot-gxmultibandecho.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/modgui/screenshot-gxmultibandecho.png new file mode 100644 index 0000000..c76e780 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/modgui/screenshot-gxmultibandecho.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/modgui/thumbnail-gxmultibandecho.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/modgui/thumbnail-gxmultibandecho.png new file mode 100644 index 0000000..af56d29 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/modgui/thumbnail-gxmultibandecho.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/screenshot-gxmultibandecho.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/screenshot-gxmultibandecho.png new file mode 100644 index 0000000..c76e780 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbecho.lv2/screenshot-gxmultibandecho.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/modgui/screenshot-gxmultibandreverb.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/modgui/screenshot-gxmultibandreverb.png new file mode 100644 index 0000000..c8214ee Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/modgui/screenshot-gxmultibandreverb.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/modgui/thumbnail-gxmultibandreverb.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/modgui/thumbnail-gxmultibandreverb.png new file mode 100644 index 0000000..99088f1 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/modgui/thumbnail-gxmultibandreverb.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/screenshot-gxmultibandreverb.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/screenshot-gxmultibandreverb.png new file mode 100644 index 0000000..c8214ee Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mbreverb.lv2/screenshot-gxmultibandreverb.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mole.lv2/screenshot-mole.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mole.lv2/screenshot-mole.png new file mode 100644 index 0000000..dae785a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mole.lv2/screenshot-mole.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mole.lv2/thumbnail-mole.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mole.lv2/thumbnail-mole.png new file mode 100644 index 0000000..16985aa Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mole.lv2/thumbnail-mole.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_muff.lv2/screenshot-muff.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_muff.lv2/screenshot-muff.png new file mode 100644 index 0000000..272eaaa Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_muff.lv2/screenshot-muff.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_muff.lv2/thumbnail-muff.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_muff.lv2/thumbnail-muff.png new file mode 100644 index 0000000..b1e45cb Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_muff.lv2/thumbnail-muff.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mxrdist.lv2/screenshot-mxrdist.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mxrdist.lv2/screenshot-mxrdist.png new file mode 100644 index 0000000..ee47b9c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mxrdist.lv2/screenshot-mxrdist.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_mxrdist.lv2/thumbnail-mxrdist.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mxrdist.lv2/thumbnail-mxrdist.png new file mode 100644 index 0000000..b4fa933 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_mxrdist.lv2/thumbnail-mxrdist.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/modgui/screenshot-gxoc2.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/modgui/screenshot-gxoc2.png new file mode 100644 index 0000000..a23fcde Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/modgui/screenshot-gxoc2.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/modgui/thumbnail-gxoc2.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/modgui/thumbnail-gxoc2.png new file mode 100644 index 0000000..bc6a342 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/modgui/thumbnail-gxoc2.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/screenshot-gxoc2.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/screenshot-gxoc2.png new file mode 100644 index 0000000..a23fcde Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_oc_2.lv2/screenshot-gxoc2.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/modgui/screenshot-gxphaser.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/modgui/screenshot-gxphaser.png new file mode 100644 index 0000000..4d36ee7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/modgui/screenshot-gxphaser.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/modgui/thumbnail-gxphaser.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/modgui/thumbnail-gxphaser.png new file mode 100644 index 0000000..88ae410 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/modgui/thumbnail-gxphaser.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/screenshot-gxphaser.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/screenshot-gxphaser.png new file mode 100644 index 0000000..4d36ee7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_phaser.lv2/screenshot-gxphaser.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/modgui/screenshot-gxrangemaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/modgui/screenshot-gxrangemaster.png new file mode 100644 index 0000000..38eb3b4 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/modgui/screenshot-gxrangemaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/modgui/thumbnail-gxrangemaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/modgui/thumbnail-gxrangemaster.png new file mode 100644 index 0000000..635650a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/modgui/thumbnail-gxrangemaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/screenshot-gxrangemaster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/screenshot-gxrangemaster.png new file mode 100644 index 0000000..38eb3b4 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_rangem.lv2/screenshot-gxrangemaster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-big-chump.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-big-chump.png new file mode 100644 index 0000000..c3b39b3 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-big-chump.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-chump.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-chump.png new file mode 100644 index 0000000..c953666 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-chump.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-vibro-chump.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-vibro-chump.png new file mode 100644 index 0000000..7136e2b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/screenshot-gxredeye-vibro-chump.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-big-chump.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-big-chump.png new file mode 100644 index 0000000..9b7201a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-big-chump.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-chump.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-chump.png new file mode 100644 index 0000000..d72d821 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-chump.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-vibro-chump.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-vibro-chump.png new file mode 100644 index 0000000..de4235c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/modgui/thumbnail-gxredeye-vibro-chump.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/screenshot-gxredeye-big-chump.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/screenshot-gxredeye-big-chump.png new file mode 100644 index 0000000..c3b39b3 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_redeye.lv2/screenshot-gxredeye-big-chump.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/modgui/screenshot-gxreverb-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/modgui/screenshot-gxreverb-stereo.png new file mode 100644 index 0000000..c0d5c75 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/modgui/screenshot-gxreverb-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/modgui/thumbnail-gxreverb-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/modgui/thumbnail-gxreverb-stereo.png new file mode 100644 index 0000000..1b8f438 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/modgui/thumbnail-gxreverb-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/screenshot-gxreverb-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/screenshot-gxreverb-stereo.png new file mode 100644 index 0000000..c0d5c75 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_reverb.lv2/screenshot-gxreverb-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/modgui/screenshot-gxroomsimulator.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/modgui/screenshot-gxroomsimulator.png new file mode 100644 index 0000000..c38fe28 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/modgui/screenshot-gxroomsimulator.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/modgui/thumbnail-gxroomsimulator.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/modgui/thumbnail-gxroomsimulator.png new file mode 100644 index 0000000..13ec2aa Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/modgui/thumbnail-gxroomsimulator.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/screenshot-gxroomsimulator.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/screenshot-gxroomsimulator.png new file mode 100644 index 0000000..c38fe28 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_room_simulator.lv2/screenshot-gxroomsimulator.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/modgui/screenshot-gxscreamingbird.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/modgui/screenshot-gxscreamingbird.png new file mode 100644 index 0000000..aedd1b3 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/modgui/screenshot-gxscreamingbird.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/modgui/thumbnail-gxscreamingbird.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/modgui/thumbnail-gxscreamingbird.png new file mode 100644 index 0000000..35f9994 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/modgui/thumbnail-gxscreamingbird.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/screenshot-gxscreamingbird.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/screenshot-gxscreamingbird.png new file mode 100644 index 0000000..aedd1b3 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_scream.lv2/screenshot-gxscreamingbird.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/modgui/screenshot-gxshimmizita.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/modgui/screenshot-gxshimmizita.png new file mode 100644 index 0000000..f2311ec Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/modgui/screenshot-gxshimmizita.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/modgui/thumbnail-gxshimmizita.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/modgui/thumbnail-gxshimmizita.png new file mode 100644 index 0000000..07736a9 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/modgui/thumbnail-gxshimmizita.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/screenshot-gxshimmizita.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/screenshot-gxshimmizita.png new file mode 100644 index 0000000..f2311ec Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_shimmizita.lv2/screenshot-gxshimmizita.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/modgui/screenshot-gx-alembic-mono.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/modgui/screenshot-gx-alembic-mono.png new file mode 100644 index 0000000..ef473bd Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/modgui/screenshot-gx-alembic-mono.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/modgui/thumbnail-gx-alembic-mono.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/modgui/thumbnail-gx-alembic-mono.png new file mode 100644 index 0000000..6c62253 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/modgui/thumbnail-gx-alembic-mono.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/screenshot-gx-alembic-mono.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/screenshot-gx-alembic-mono.png new file mode 100644 index 0000000..ef473bd Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre.lv2/screenshot-gx-alembic-mono.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/modgui/screenshot-gx-studio-preamp-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/modgui/screenshot-gx-studio-preamp-stereo.png new file mode 100644 index 0000000..034ec20 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/modgui/screenshot-gx-studio-preamp-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/modgui/thumbnail-gx-studio-preamp-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/modgui/thumbnail-gx-studio-preamp-stereo.png new file mode 100644 index 0000000..6870814 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/modgui/thumbnail-gx-studio-preamp-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/screenshot-gx-studio-preamp-stereo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/screenshot-gx-studio-preamp-stereo.png new file mode 100644 index 0000000..034ec20 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_studiopre_st.lv2/screenshot-gx-studio-preamp-stereo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/modgui/screenshot-gxsustainer.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/modgui/screenshot-gxsustainer.png new file mode 100644 index 0000000..0e0f659 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/modgui/screenshot-gxsustainer.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/modgui/thumbnail-gxsustainer.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/modgui/thumbnail-gxsustainer.png new file mode 100644 index 0000000..52c7114 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/modgui/thumbnail-gxsustainer.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/screenshot-gxsustainer.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/screenshot-gxsustainer.png new file mode 100644 index 0000000..0e0f659 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_susta.lv2/screenshot-gxsustainer.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/modgui/screenshot-gxswitchedtremolo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/modgui/screenshot-gxswitchedtremolo.png new file mode 100644 index 0000000..f6996eb Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/modgui/screenshot-gxswitchedtremolo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/modgui/thumbnail-gxswitchedtremolo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/modgui/thumbnail-gxswitchedtremolo.png new file mode 100644 index 0000000..f35b5ae Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/modgui/thumbnail-gxswitchedtremolo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/screenshot-gxswitchedtremolo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/screenshot-gxswitchedtremolo.png new file mode 100644 index 0000000..f6996eb Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_switched_tremolo.lv2/screenshot-gxswitchedtremolo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/modgui/screenshot-gxtremolo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/modgui/screenshot-gxtremolo.png new file mode 100644 index 0000000..405189a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/modgui/screenshot-gxtremolo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/modgui/thumbnail-gxtremolo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/modgui/thumbnail-gxtremolo.png new file mode 100644 index 0000000..66ccdfa Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/modgui/thumbnail-gxtremolo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/screenshot-gxtremolo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/screenshot-gxtremolo.png new file mode 100644 index 0000000..405189a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_tremolo.lv2/screenshot-gxtremolo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/screenshot-gxvibe.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/screenshot-gxvibe.png new file mode 100644 index 0000000..87e4d66 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/screenshot-gxvibe.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/screenshot-gxvibemono.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/screenshot-gxvibemono.png new file mode 100644 index 0000000..8a7889c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/screenshot-gxvibemono.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/thumbnail-gxvibe.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/thumbnail-gxvibe.png new file mode 100644 index 0000000..054b3ee Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/thumbnail-gxvibe.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/thumbnail-gxvibemono.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/thumbnail-gxvibemono.png new file mode 100644 index 0000000..f1d9a73 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/modgui/thumbnail-gxvibemono.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/screenshot-gxvibe.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/screenshot-gxvibe.png new file mode 100644 index 0000000..87e4d66 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_vibe.lv2/screenshot-gxvibe.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_w20.lv2/screenshot-w20.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_w20.lv2/screenshot-w20.png new file mode 100644 index 0000000..8654e1a Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_w20.lv2/screenshot-w20.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_w20.lv2/thumbnail-w20.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_w20.lv2/thumbnail-w20.png new file mode 100644 index 0000000..d5e19f5 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_w20.lv2/thumbnail-w20.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_zita_rev1.lv2/screenshot-zitarev1.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_zita_rev1.lv2/screenshot-zitarev1.png new file mode 100644 index 0000000..60ed1af Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_zita_rev1.lv2/screenshot-zitarev1.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gx_zita_rev1.lv2/thumbnail-zitarev1.png b/app/src/main/assets/lv2/GxPlugins.lv2/gx_zita_rev1.lv2/thumbnail-zitarev1.png new file mode 100644 index 0000000..189aa7d Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gx_zita_rev1.lv2/thumbnail-zitarev1.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/screenshot-gxautowah.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/screenshot-gxautowah.png new file mode 100644 index 0000000..65d6e2c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/screenshot-gxautowah.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/screenshot-gxwah.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/screenshot-gxwah.png new file mode 100644 index 0000000..61b82d1 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/screenshot-gxwah.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/thumbnail-gxautowah.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/thumbnail-gxautowah.png new file mode 100644 index 0000000..c0d5795 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/thumbnail-gxautowah.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/thumbnail-gxwah.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/thumbnail-gxwah.png new file mode 100644 index 0000000..9e0c932 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/modgui/thumbnail-gxwah.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/screenshot-gxautowah.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/screenshot-gxautowah.png new file mode 100644 index 0000000..65d6e2c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxautowah.lv2/screenshot-gxautowah.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/modgui/screenshot-gxbooster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/modgui/screenshot-gxbooster.png new file mode 100644 index 0000000..6142ee0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/modgui/screenshot-gxbooster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/modgui/thumbnail-gxbooster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/modgui/thumbnail-gxbooster.png new file mode 100644 index 0000000..cd66ffa Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/modgui/thumbnail-gxbooster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/screenshot-gxbooster.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/screenshot-gxbooster.png new file mode 100644 index 0000000..6142ee0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxbooster.lv2/screenshot-gxbooster.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/modgui/screenshot-gxechocat.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/modgui/screenshot-gxechocat.png new file mode 100644 index 0000000..80c2e77 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/modgui/screenshot-gxechocat.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/modgui/thumbnail-gxechocat.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/modgui/thumbnail-gxechocat.png new file mode 100644 index 0000000..87af9f0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/modgui/thumbnail-gxechocat.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/screenshot-gxechocat.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/screenshot-gxechocat.png new file mode 100644 index 0000000..80c2e77 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxechocat.lv2/screenshot-gxechocat.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_amp.lv2/screenshot-metalamp.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_amp.lv2/screenshot-metalamp.png new file mode 100644 index 0000000..d335e7c Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_amp.lv2/screenshot-metalamp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_amp.lv2/thumbnail-metalamp.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_amp.lv2/thumbnail-metalamp.png new file mode 100644 index 0000000..47f0dd7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_amp.lv2/thumbnail-metalamp.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_head.lv2/screenshot-metalhead.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_head.lv2/screenshot-metalhead.png new file mode 100644 index 0000000..b0842b7 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_head.lv2/screenshot-metalhead.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_head.lv2/thumbnail-metalhead.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_head.lv2/thumbnail-metalhead.png new file mode 100644 index 0000000..c9d8e08 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxmetal_head.lv2/thumbnail-metalhead.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtape.lv2/screenshot-tape.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtape.lv2/screenshot-tape.png new file mode 100644 index 0000000..3f7ed27 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtape.lv2/screenshot-tape.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtape.lv2/thumbnail-tape.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtape.lv2/thumbnail-tape.png new file mode 100644 index 0000000..6f6ac1b Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtape.lv2/thumbnail-tape.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtape_st.lv2/screenshot-tapest.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtape_st.lv2/screenshot-tapest.png new file mode 100644 index 0000000..3f7ed27 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtape_st.lv2/screenshot-tapest.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtape_st.lv2/thumbnail-tapest.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtape_st.lv2/thumbnail-tapest.png new file mode 100644 index 0000000..99fd668 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtape_st.lv2/thumbnail-tapest.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/modgui/screenshot-gxtilttone.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/modgui/screenshot-gxtilttone.png new file mode 100644 index 0000000..da7ddbf Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/modgui/screenshot-gxtilttone.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/modgui/thumbnail-gxtilttone.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/modgui/thumbnail-gxtilttone.png new file mode 100644 index 0000000..3c509ac Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/modgui/thumbnail-gxtilttone.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/screenshot-gxtilttone.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/screenshot-gxtilttone.png new file mode 100644 index 0000000..da7ddbf Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtilttone.lv2/screenshot-gxtilttone.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxts9.lv2/screenshot-ts9.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxts9.lv2/screenshot-ts9.png new file mode 100644 index 0000000..7b44dc8 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxts9.lv2/screenshot-ts9.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxts9.lv2/thumbnail-ts9.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxts9.lv2/thumbnail-ts9.png new file mode 100644 index 0000000..33ce8cb Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxts9.lv2/thumbnail-ts9.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/modgui/screenshot-gxtubedelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/modgui/screenshot-gxtubedelay.png new file mode 100644 index 0000000..9015178 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/modgui/screenshot-gxtubedelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/modgui/thumbnail-gxtubedelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/modgui/thumbnail-gxtubedelay.png new file mode 100644 index 0000000..23fbd15 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/modgui/thumbnail-gxtubedelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/screenshot-gxtubedelay.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/screenshot-gxtubedelay.png new file mode 100644 index 0000000..9015178 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubedelay.lv2/screenshot-gxtubedelay.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/modgui/screenshot-gxtubetremelo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/modgui/screenshot-gxtubetremelo.png new file mode 100644 index 0000000..bc46db0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/modgui/screenshot-gxtubetremelo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/modgui/thumbnail-gxtubetremelo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/modgui/thumbnail-gxtubetremelo.png new file mode 100644 index 0000000..e532428 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/modgui/thumbnail-gxtubetremelo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/screenshot-gxtubetremelo.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/screenshot-gxtubetremelo.png new file mode 100644 index 0000000..bc46db0 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubetremelo.lv2/screenshot-gxtubetremelo.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/modgui/screenshot-gxtubevibrato.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/modgui/screenshot-gxtubevibrato.png new file mode 100644 index 0000000..5cc4c7f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/modgui/screenshot-gxtubevibrato.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/modgui/thumbnail-gxtubevibrato.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/modgui/thumbnail-gxtubevibrato.png new file mode 100644 index 0000000..49db1a4 Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/modgui/thumbnail-gxtubevibrato.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/screenshot-gxtubevibrato.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/screenshot-gxtubevibrato.png new file mode 100644 index 0000000..5cc4c7f Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtubevibrato.lv2/screenshot-gxtubevibrato.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtuner.lv2/screenshot-tuner.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtuner.lv2/screenshot-tuner.png new file mode 100644 index 0000000..a99aaac Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtuner.lv2/screenshot-tuner.png differ diff --git a/app/src/main/assets/lv2/GxPlugins.lv2/gxtuner.lv2/thumbnail-tuner.png b/app/src/main/assets/lv2/GxPlugins.lv2/gxtuner.lv2/thumbnail-tuner.png new file mode 100644 index 0000000..bd8a89e Binary files /dev/null and b/app/src/main/assets/lv2/GxPlugins.lv2/gxtuner.lv2/thumbnail-tuner.png differ diff --git a/app/src/main/assets/lv2/ImpulseLoader.lv2/screenshot-impulseloader.png b/app/src/main/assets/lv2/ImpulseLoader.lv2/screenshot-impulseloader.png new file mode 100644 index 0000000..a672bb2 Binary files /dev/null and b/app/src/main/assets/lv2/ImpulseLoader.lv2/screenshot-impulseloader.png differ diff --git a/app/src/main/assets/lv2/ImpulseLoader.lv2/thumbnail-impulseloader.png b/app/src/main/assets/lv2/ImpulseLoader.lv2/thumbnail-impulseloader.png new file mode 100644 index 0000000..9ba80e9 Binary files /dev/null and b/app/src/main/assets/lv2/ImpulseLoader.lv2/thumbnail-impulseloader.png differ diff --git a/app/src/main/assets/lv2/MetalTone.lv2/modgui/screenshot-metaltone.png b/app/src/main/assets/lv2/MetalTone.lv2/modgui/screenshot-metaltone.png new file mode 100644 index 0000000..2ebbf6c Binary files /dev/null and b/app/src/main/assets/lv2/MetalTone.lv2/modgui/screenshot-metaltone.png differ diff --git a/app/src/main/assets/lv2/MetalTone.lv2/modgui/thumbnail-metaltone.png b/app/src/main/assets/lv2/MetalTone.lv2/modgui/thumbnail-metaltone.png new file mode 100644 index 0000000..8aa08c7 Binary files /dev/null and b/app/src/main/assets/lv2/MetalTone.lv2/modgui/thumbnail-metaltone.png differ diff --git a/app/src/main/assets/lv2/Neuralrack.lv2/screenshot-neuralrack.png b/app/src/main/assets/lv2/Neuralrack.lv2/screenshot-neuralrack.png new file mode 100644 index 0000000..16996a2 Binary files /dev/null and b/app/src/main/assets/lv2/Neuralrack.lv2/screenshot-neuralrack.png differ diff --git a/app/src/main/assets/lv2/Neuralrack.lv2/thumbnail-neuralrack.png b/app/src/main/assets/lv2/Neuralrack.lv2/thumbnail-neuralrack.png new file mode 100644 index 0000000..e835749 Binary files /dev/null and b/app/src/main/assets/lv2/Neuralrack.lv2/thumbnail-neuralrack.png differ diff --git a/app/src/main/assets/lv2/PowerAmpImpulses.lv2/modgui/screenshot-powerampimpulses.png b/app/src/main/assets/lv2/PowerAmpImpulses.lv2/modgui/screenshot-powerampimpulses.png new file mode 100644 index 0000000..be1f4b2 Binary files /dev/null and b/app/src/main/assets/lv2/PowerAmpImpulses.lv2/modgui/screenshot-powerampimpulses.png differ diff --git a/app/src/main/assets/lv2/PowerAmpImpulses.lv2/modgui/thumbnail-powerampimpulses.png b/app/src/main/assets/lv2/PowerAmpImpulses.lv2/modgui/thumbnail-powerampimpulses.png new file mode 100644 index 0000000..8d91344 Binary files /dev/null and b/app/src/main/assets/lv2/PowerAmpImpulses.lv2/modgui/thumbnail-powerampimpulses.png differ diff --git a/app/src/main/assets/lv2/PowerAmps.lv2/modgui/screenshot-poweramps.png b/app/src/main/assets/lv2/PowerAmps.lv2/modgui/screenshot-poweramps.png new file mode 100644 index 0000000..ffb03c7 Binary files /dev/null and b/app/src/main/assets/lv2/PowerAmps.lv2/modgui/screenshot-poweramps.png differ diff --git a/app/src/main/assets/lv2/PowerAmps.lv2/modgui/thumbnail-poweramps.png b/app/src/main/assets/lv2/PowerAmps.lv2/modgui/thumbnail-poweramps.png new file mode 100644 index 0000000..c2435f3 Binary files /dev/null and b/app/src/main/assets/lv2/PowerAmps.lv2/modgui/thumbnail-poweramps.png differ diff --git a/app/src/main/assets/lv2/PreAmpImpulses.lv2/modgui/screenshot-preampimpulses.png b/app/src/main/assets/lv2/PreAmpImpulses.lv2/modgui/screenshot-preampimpulses.png new file mode 100644 index 0000000..b6d71c9 Binary files /dev/null and b/app/src/main/assets/lv2/PreAmpImpulses.lv2/modgui/screenshot-preampimpulses.png differ diff --git a/app/src/main/assets/lv2/PreAmpImpulses.lv2/modgui/thumbnail-preampimpulses.png b/app/src/main/assets/lv2/PreAmpImpulses.lv2/modgui/thumbnail-preampimpulses.png new file mode 100644 index 0000000..4161e24 Binary files /dev/null and b/app/src/main/assets/lv2/PreAmpImpulses.lv2/modgui/thumbnail-preampimpulses.png differ diff --git a/app/src/main/assets/lv2/PreAmps.lv2/modgui/screenshot-preamps.png b/app/src/main/assets/lv2/PreAmps.lv2/modgui/screenshot-preamps.png new file mode 100644 index 0000000..444407e Binary files /dev/null and b/app/src/main/assets/lv2/PreAmps.lv2/modgui/screenshot-preamps.png differ diff --git a/app/src/main/assets/lv2/PreAmps.lv2/modgui/thumbnail-preamps.png b/app/src/main/assets/lv2/PreAmps.lv2/modgui/thumbnail-preamps.png new file mode 100644 index 0000000..b2bad13 Binary files /dev/null and b/app/src/main/assets/lv2/PreAmps.lv2/modgui/thumbnail-preamps.png differ diff --git a/app/src/main/assets/lv2/XDarkTerror.lv2/screenshot-xdarkterror.png b/app/src/main/assets/lv2/XDarkTerror.lv2/screenshot-xdarkterror.png new file mode 100644 index 0000000..235e970 Binary files /dev/null and b/app/src/main/assets/lv2/XDarkTerror.lv2/screenshot-xdarkterror.png differ diff --git a/app/src/main/assets/lv2/XDarkTerror.lv2/thumbnail-xdarkterror.png b/app/src/main/assets/lv2/XDarkTerror.lv2/thumbnail-xdarkterror.png new file mode 100644 index 0000000..625cef0 Binary files /dev/null and b/app/src/main/assets/lv2/XDarkTerror.lv2/thumbnail-xdarkterror.png differ diff --git a/app/src/main/assets/lv2/XTinyTerror.lv2/screenshot-xtinyterror.png b/app/src/main/assets/lv2/XTinyTerror.lv2/screenshot-xtinyterror.png new file mode 100644 index 0000000..43e5e06 Binary files /dev/null and b/app/src/main/assets/lv2/XTinyTerror.lv2/screenshot-xtinyterror.png differ diff --git a/app/src/main/assets/lv2/XTinyTerror.lv2/thumbnail-xtinyterror.png b/app/src/main/assets/lv2/XTinyTerror.lv2/thumbnail-xtinyterror.png new file mode 100644 index 0000000..4ae4f6d Binary files /dev/null and b/app/src/main/assets/lv2/XTinyTerror.lv2/thumbnail-xtinyterror.png differ diff --git a/app/src/main/assets/lv2/aidadsp.lv2/modgui/screenshot-rt-neural-generic.png b/app/src/main/assets/lv2/aidadsp.lv2/modgui/screenshot-rt-neural-generic.png new file mode 100644 index 0000000..918c53e Binary files /dev/null and b/app/src/main/assets/lv2/aidadsp.lv2/modgui/screenshot-rt-neural-generic.png differ diff --git a/app/src/main/assets/lv2/aidadsp.lv2/modgui/thumbnail-rt-neural-generic.png b/app/src/main/assets/lv2/aidadsp.lv2/modgui/thumbnail-rt-neural-generic.png new file mode 100644 index 0000000..7bd6597 Binary files /dev/null and b/app/src/main/assets/lv2/aidadsp.lv2/modgui/thumbnail-rt-neural-generic.png differ diff --git a/app/src/main/assets/lv2/neural_amp_modeler.lv2/modgui/screenshot-nam.png b/app/src/main/assets/lv2/neural_amp_modeler.lv2/modgui/screenshot-nam.png new file mode 100644 index 0000000..fcdcdff Binary files /dev/null and b/app/src/main/assets/lv2/neural_amp_modeler.lv2/modgui/screenshot-nam.png differ diff --git a/app/src/main/assets/lv2/neural_amp_modeler.lv2/modgui/thumbnail-nam.png b/app/src/main/assets/lv2/neural_amp_modeler.lv2/modgui/thumbnail-nam.png new file mode 100644 index 0000000..3e579bf Binary files /dev/null and b/app/src/main/assets/lv2/neural_amp_modeler.lv2/modgui/thumbnail-nam.png differ diff --git a/app/src/main/assets/modgui_runtime.js b/app/src/main/assets/modgui_runtime.js index 43444df..5af92ed 100644 --- a/app/src/main/assets/modgui_runtime.js +++ b/app/src/main/assets/modgui_runtime.js @@ -25,6 +25,80 @@ el._modMeta = meta; el._modValue = value; + // Enumerated select (custom-select): populate dropdown from scalePoints + var isCustomSelect = el.getAttribute('mod-widget') === 'custom-select'; + if (isCustomSelect && meta.scalePoints && meta.scalePoints.length > 0) { + var selected = el.querySelector('.mod-enumerated-selected'); + var list = el.querySelector('.mod-enumerated-list'); + // Find label for current value + function labelForValue(v) { + var best = meta.scalePoints[0]; + for (var i = 0; i < meta.scalePoints.length; i++) { + if (Math.abs(meta.scalePoints[i].value - v) < 0.001) return meta.scalePoints[i].label; + if (Math.abs(meta.scalePoints[i].value - v) < Math.abs(best.value - v)) best = meta.scalePoints[i]; + } + return best.label; + } + if (selected) selected.textContent = labelForValue(value); + // Populate list + if (list) { + list.innerHTML = ''; + meta.scalePoints.forEach(function(sp) { + var div = document.createElement('div'); + div.textContent = sp.label; + div.addEventListener('click', function(e) { + e.stopPropagation(); + el._modValue = sp.value; + if (selected) selected.textContent = sp.label; + list.style.display = 'none'; + el.style.overflow = ''; + AndroidHost.setParameter(symbol, sp.value); + }); + list.appendChild(div); + }); + } + // Toggle list on click — expand toward where there is more room + if (selected && list) { + selected.style.cursor = 'pointer'; + list.style.position = 'absolute'; + list.style.left = '0'; + selected.addEventListener('click', function(e) { + e.preventDefault(); + e.stopPropagation(); + if (list.style.display === 'block') { + list.style.display = 'none'; + el.style.overflow = ''; + return; + } + // Allow list to overflow the container + el.style.overflow = 'visible'; + list.style.display = 'block'; + // Measure room above vs below in CSS pixels (accounting for transform scale) + var selRect = selected.getBoundingClientRect(); + var scale = selRect.height / (selected.offsetHeight || 1); + if (scale < 0.01) scale = 1; + var vpH = document.documentElement.clientHeight; + var roomBelow = (vpH - selRect.bottom) / scale; + var roomAbove = selRect.top / scale; + if (roomAbove > roomBelow) { + list.style.bottom = selected.offsetHeight + 'px'; + list.style.top = 'auto'; + list.style.maxHeight = Math.min(180, roomAbove) + 'px'; + } else { + list.style.top = selected.offsetHeight + 'px'; + list.style.bottom = 'auto'; + list.style.maxHeight = Math.min(180, roomBelow) + 'px'; + } + }); + } + // Refresh handler + el._modIsSelect = true; + el._modUpdateSelect = function() { + if (selected) selected.textContent = labelForValue(el._modValue); + }; + return; // skip knob/toggle handling + } + // Detect toggle from CSS class (mod-on-off-image, mod-switch-image) // even if the LV2 port doesn't have lv2:toggled property. // Some plugins use lv2:integer + lv2:enumeration with 0/1 range instead. @@ -123,7 +197,9 @@ var newVal = AndroidHost.getParameter(el._modSymbol); if (Math.abs(newVal - el._modValue) > 0.0001) { el._modValue = newVal; - if (el._modIsToggle) { + if (el._modIsSelect && el._modUpdateSelect) { + el._modUpdateSelect(); + } else if (el._modIsToggle) { updateToggleVisual(el); } else { updateKnobVisual(el); @@ -144,14 +220,14 @@ var enabled = bypassPort ? AndroidHost.getParameter(bypassPort.symbol) > 0.5 : true; el.style.cursor = 'pointer'; el.style.touchAction = 'none'; - var light = document.querySelector('[mod-role="bypass-light"]'); + var lights = document.querySelectorAll('[mod-role="bypass-light"]'); function updateBypassVisual() { el.classList.toggle('on', enabled); el.classList.toggle('off', !enabled); - if (light) { + lights.forEach(function(light) { light.classList.toggle('on', enabled); light.classList.toggle('off', !enabled); - } + }); } updateBypassVisual(); el.addEventListener('click', function() { @@ -270,8 +346,12 @@ }); // Close list when clicking outside document.addEventListener('click', function() { - document.querySelectorAll('.mod-enumerated-list').forEach(function(el) { - el.style.display = 'none'; + document.querySelectorAll('.mod-enumerated-list').forEach(function(listEl) { + listEl.style.display = 'none'; + }); + // Restore overflow on enumerated containers + document.querySelectorAll('.mod-enumerated').forEach(function(enumEl) { + enumEl.style.overflow = ''; }); }); // Allow scrolling inside the model list by preventing parent from stealing touches diff --git a/app/src/main/cpp/x11/X11NativeDisplay.cpp b/app/src/main/cpp/x11/X11NativeDisplay.cpp index 5024c97..315426c 100644 --- a/app/src/main/cpp/x11/X11NativeDisplay.cpp +++ b/app/src/main/cpp/x11/X11NativeDisplay.cpp @@ -914,6 +914,17 @@ struct X11NativeDisplay::Impl { for (auto& r : rects) { childClip.push_back({r.x1, r.y1, r.x2, r.y2}); } + /* Also clip against mapped sibling windows above this + * window in the stacking order. On a real X11 server, + * higher siblings obscure lower ones. Without this, + * a lower sibling's PutImage overwrites higher sibling + * pixels in overlap regions. */ + if (drawable != kRootWindowId) { + auto sibRects = windowManager_.getMappedSiblingRectsAbove(drawable); + for (auto& r : sibRects) { + childClip.push_back({r.x1, r.y1, r.x2, r.y2}); + } + } } uint32_t* dstBuf = nullptr; diff --git a/app/src/main/cpp/x11/X11WindowManager.cpp b/app/src/main/cpp/x11/X11WindowManager.cpp index 2d32c53..4c8703a 100644 --- a/app/src/main/cpp/x11/X11WindowManager.cpp +++ b/app/src/main/cpp/x11/X11WindowManager.cpp @@ -217,6 +217,48 @@ std::vector X11WindowManager::getMappedChildRectsOf(uint return rects; } +std::vector X11WindowManager::getMappedSiblingRectsAbove(uint32_t wid) const { + std::vector rects; + + // Find wid's parent + auto posIt = windowPositions_.find(wid); + if (posIt == windowPositions_.end()) return rects; + uint32_t parent = posIt->second.parent; + + // Find wid's index in childWindows_ + bool found = false; + size_t widIndex = 0; + for (size_t i = 0; i < childWindows_.size(); i++) { + if (childWindows_[i] == wid) { + widIndex = i; + found = true; + break; + } + } + if (!found) return rects; + + // Collect rects for mapped siblings above wid (higher stacking = later index) + for (size_t i = widIndex + 1; i < childWindows_.size(); i++) { + uint32_t sibWid = childWindows_[i]; + if (unmappedWindows_.count(sibWid)) continue; + + auto sibPosIt = windowPositions_.find(sibWid); + if (sibPosIt == windowPositions_.end()) continue; + if (sibPosIt->second.parent != parent) continue; + + auto sizeIt = windowSizes_.find(sibWid); + if (sizeIt == windowSizes_.end()) continue; + + auto absPos = getAbsolutePos(sibWid); + rects.push_back({ + absPos.first, absPos.second, + absPos.first + sizeIt->second.first, + absPos.second + sizeIt->second.second + }); + } + return rects; +} + void X11WindowManager::clear() { childWindows_.clear(); windowSizes_.clear(); diff --git a/app/src/main/cpp/x11/X11WindowManager.h b/app/src/main/cpp/x11/X11WindowManager.h index 5f79667..1c8de47 100644 --- a/app/src/main/cpp/x11/X11WindowManager.h +++ b/app/src/main/cpp/x11/X11WindowManager.h @@ -60,6 +60,10 @@ class X11WindowManager { struct Rect { int x1, y1, x2, y2; }; std::vector getMappedChildRectsOf(uint32_t parent) const; + // Return absolute clip rects for mapped sibling windows above wid in stacking order. + // "Above" means later in childWindows_. Only considers siblings with the same parent. + std::vector getMappedSiblingRectsAbove(uint32_t wid) const; + std::pair getAbsolutePos(uint32_t wid) const; HitResult hitTest(int x, int y) const; diff --git a/app/src/main/java/com/varcain/guitarrackcraft/ui/browser/PluginBrowserScreen.kt b/app/src/main/java/com/varcain/guitarrackcraft/ui/browser/PluginBrowserScreen.kt index 41ce78e..bcd05eb 100644 --- a/app/src/main/java/com/varcain/guitarrackcraft/ui/browser/PluginBrowserScreen.kt +++ b/app/src/main/java/com/varcain/guitarrackcraft/ui/browser/PluginBrowserScreen.kt @@ -411,9 +411,7 @@ fun PluginItem( Text( text = plugin.description, style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant, - maxLines = 2, - overflow = TextOverflow.Ellipsis + color = MaterialTheme.colorScheme.onSurfaceVariant ) } diff --git a/app/src/main/java/com/varcain/guitarrackcraft/ui/modgui/ModguiScreen.kt b/app/src/main/java/com/varcain/guitarrackcraft/ui/modgui/ModguiScreen.kt index a68ba70..42261df 100644 --- a/app/src/main/java/com/varcain/guitarrackcraft/ui/modgui/ModguiScreen.kt +++ b/app/src/main/java/com/varcain/guitarrackcraft/ui/modgui/ModguiScreen.kt @@ -436,6 +436,7 @@ private fun buildAssetLoader( "png" -> "image/png" "jpg", "jpeg" -> "image/jpeg" "gif" -> "image/gif" + "webp" -> "image/webp" "svg" -> "image/svg+xml" "css" -> "text/css" else -> "application/octet-stream" @@ -452,6 +453,7 @@ private fun buildAssetLoader( "png" -> "image/png" "jpg", "jpeg" -> "image/jpeg" "gif" -> "image/gif" + "webp" -> "image/webp" "svg" -> "image/svg+xml" "css" -> "text/css" else -> "application/octet-stream" @@ -473,6 +475,7 @@ private fun buildAssetLoader( "png" -> "image/png" "jpg", "jpeg" -> "image/jpeg" "gif" -> "image/gif" + "webp" -> "image/webp" "svg" -> "image/svg+xml" else -> "application/octet-stream" } @@ -635,7 +638,7 @@ private fun buildAssetLoader( .clearfix:before, .clearfix:after { display: table; content: " "; } .clearfix:after { clear: both; } .mod-pedal { display: inline-block; z-index: 100; } - .mod-pedal .mod-drag-handle { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 20; } + .mod-pedal .mod-drag-handle { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 20; pointer-events: none; } .mod-pedal .mod-pedal-input { position: absolute; top: 106px; left: -88px; width: 88px; } .mod-pedal .mod-pedal-output { position: absolute; top: 106px; right: -87px; width: 87px; } .mod-pedal .mod-control-group { z-index: 20; } @@ -674,7 +677,12 @@ private fun buildAssetLoader( private fun buildPortsJson(pluginInfo: PluginInfo): String { val entries = pluginInfo.controlPorts.joinToString(",") { p -> - """{"symbol":"${p.symbol.replace("\"", "\\\"")}","min":${p.minValue},"max":${p.maxValue},"default":${p.defaultValue},"toggle":${p.isToggle}}""" + val sp = if (p.scalePoints.isNotEmpty()) { + p.scalePoints.joinToString(",", "[", "]") { s -> + """{"label":"${s.label.replace("\"", "\\\"")}","value":${s.value}}""" + } + } else "[]" + """{"symbol":"${p.symbol.replace("\"", "\\\"")}","min":${p.minValue},"max":${p.maxValue},"default":${p.defaultValue},"toggle":${p.isToggle},"scalePoints":$sp}""" } return "[$entries]" } diff --git a/cmake/modules/GeneratePluginMetadata.cmake b/cmake/modules/GeneratePluginMetadata.cmake index 5227ee1..459e680 100644 --- a/cmake/modules/GeneratePluginMetadata.cmake +++ b/cmake/modules/GeneratePluginMetadata.cmake @@ -16,7 +16,11 @@ # along with Guitar RackCraft. If not, see . # ============================================================================= -# cmake/modules/GeneratePluginMetadata.cmake — Refactored from generate_plugin_metadata.py +# cmake/modules/GeneratePluginMetadata.cmake +# +# Collects plugin names, categories, thumbnails, and authors from source TTLs. +# Descriptions are read from plugin_descriptions.json (maintained manually via +# tools/update_descriptions.sh). # ============================================================================= cmake_policy(SET CMP0007 NEW) @@ -31,11 +35,31 @@ set(TRUNK_LV2_DIR "${THIRD_PARTY}/guitarix/trunk/src/LV2") set(ASSETS_BASE_DIR "${ASSETS_DIR}/GxPlugins.lv2") # We will collect everything in CMake variables first, then build JSON at the end. -set(ALL_DESCRIPTIONS "") # List of "name|desc" set(ALL_THUMBNAILS "") # List of "name|path" -set(ALL_AUTHORS "") # List of "name|author" +set(ALL_AUTHORS "") # List of "name|author" set(ALL_CATEGORIES "") # List of "name|cat" set(AVAILABLE_PLUGINS "") # List of names +set(ALL_PLUGIN_NAMES "") # List of names (for description lookup) + +# --- Load descriptions from plugin_descriptions.json --- +set(DESCRIPTIONS_FILE "${PROJECT_ROOT}/plugin_descriptions.json") +if(EXISTS "${DESCRIPTIONS_FILE}") + file(READ "${DESCRIPTIONS_FILE}" DESCRIPTIONS_JSON) + message(STATUS "Loaded plugin descriptions from ${DESCRIPTIONS_FILE}") +else() + set(DESCRIPTIONS_JSON "{}") + message(WARNING "plugin_descriptions.json not found — descriptions will be empty") +endif() + +# --- Helper: Look up description for a plugin name --- +function(lookup_description plugin_name out_desc) + set(_desc "") + string(JSON _desc ERROR_VARIABLE _err GET "${DESCRIPTIONS_JSON}" "${plugin_name}") + if(_err OR "${_desc}" STREQUAL "NOTFOUND" OR "${_desc}" STREQUAL "${plugin_name}-NOTFOUND") + set(_desc "") + endif() + set(${out_desc} "${_desc}" PARENT_SCOPE) +endfunction() # --- Helper: Extract name and class from TTL --- function(extract_from_ttl plugin_dir out_results) @@ -46,53 +70,39 @@ function(extract_from_ttl plugin_dir out_results) if(_ttl_name MATCHES "^(manifest|modgui|modguis)\\.ttl(\\.in)?$") continue() endif() - + file(READ "${_ttl}" _content) # Match doap:name "Name" string(REGEX MATCHALL "doap:name[ \t]+\"([^\"]+)\"" _names "${_content}") foreach(_name_match IN LISTS _names) string(REGEX REPLACE "doap:name[ \t]+\"([^\"]+)\"" "\\1" _name "${_name_match}") - + # Match lv2:Subclass (e.g. lv2:DistortionPlugin) string(REGEX MATCH "lv2:([A-Za-z0-9]+Plugin)" _class_match "${_content}") set(_class "Plugin") if(_class_match) string(REGEX REPLACE "lv2:([A-Za-z0-9]+Plugin)" "\\1" _class "${_class_match}") endif() - + list(APPEND _found "${_name}|${_class}") endforeach() endforeach() set(${out_results} "${_found}" PARENT_SCOPE) endfunction() -# --- Helper: Parse README description --- -function(parse_readme readme_path out_name out_desc) +# --- Helper: Parse README for plugin name (description no longer needed here) --- +function(parse_readme_name readme_path out_name) file(READ "${readme_path}" _content) string(REPLACE "\r" "" _content "${_content}") string(REGEX REPLACE "\n+" "\n" _lines "${_content}") string(REPLACE "\n" ";" _lines "${_lines}") - + list(GET _lines 0 _header) if(_header MATCHES "^#[ \t]*([^ \t]+)\\.lv2") string(REGEX REPLACE "^#[ \t]*([^ \t]+)\\.lv2" "\\1" _name "${_header}") set(${out_name} "${_name}" PARENT_SCOPE) - - # Extract description - set(_desc_lines "") - list(REMOVE_AT _lines 0) - foreach(_line IN LISTS _lines) - string(STRIP "${_line}" _line) - if(NOT _line OR _line MATCHES "^#" OR _line MATCHES "^!\\[") - break() - endif() - list(APPEND _desc_lines "${_line}") - endforeach() - string(REPLACE ";" " " _desc "${_desc_lines}") - set(${out_desc} "${_desc}" PARENT_SCOPE) else() set(${out_name} "" PARENT_SCOPE) - set(${out_desc} "" PARENT_SCOPE) endif() endfunction() @@ -119,18 +129,16 @@ foreach(_bundle IN LISTS _bundles) endif() get_filename_component(_bundle_name "${_bundle}" NAME) string(REGEX REPLACE "\\.lv2$" "" _plugin_name_from_dir "${_bundle_name}") - + set(_plugin_name "${_plugin_name_from_dir}") - set(_description "") - + if(EXISTS "${_bundle}/README.md") - parse_readme("${_bundle}/README.md" _parsed_name _parsed_desc) + parse_readme_name("${_bundle}/README.md" _parsed_name) if(_parsed_name) set(_plugin_name "${_parsed_name}") - set(_description "${_parsed_desc}") endif() endif() - + # Extract category set(_category "Plugin") if(IS_DIRECTORY "${_bundle}/plugin") @@ -140,20 +148,23 @@ foreach(_bundle IN LISTS _bundles) string(REGEX REPLACE "^.*\\|" "" _category "${_first}") endif() endif() - - list(APPEND ALL_DESCRIPTIONS "${_plugin_name}|${_description}") + + list(APPEND ALL_PLUGIN_NAMES "${_plugin_name}") list(APPEND ALL_AUTHORS "${_plugin_name}|GxPlugins") list(APPEND ALL_CATEGORIES "${_plugin_name}|${_category}") - - # Thumbnail + + # Thumbnail — check source bundle root, then assets for generated screenshots file(GLOB _pngs "${_bundle}/*.png") + if(NOT _pngs) + file(GLOB _pngs "${ASSETS_BASE_DIR}/${_bundle_name}/screenshot-*.png") + endif() if(_pngs) list(GET _pngs 0 _png) get_filename_component(_png_name "${_png}" NAME) file(COPY "${_png}" DESTINATION "${ASSETS_BASE_DIR}/${_bundle_name}") list(APPEND ALL_THUMBNAILS "${_plugin_name}|GxPlugins.lv2/${_bundle_name}/${_png_name}") endif() - + # Binary check has_binary_in_assets("${ASSETS_BASE_DIR}/${_bundle_name}" _has_binary) if(_has_binary) @@ -170,29 +181,32 @@ if(IS_DIRECTORY "${TRUNK_LV2_DIR}") continue() endif() get_filename_component(_bundle_name "${_bundle}" NAME) - + extract_from_ttl("${_bundle}" _ttl_results) has_binary_in_assets("${ASSETS_BASE_DIR}/${_bundle_name}" _has_binary) - - # Check for thumbnail + + # Check for thumbnail — source modgui, then assets for generated screenshots set(_thumb "") file(GLOB _modgui_pngs "${_bundle}/modgui/screenshot-*.png" "${_bundle}/modgui/thumbnail-*.png") + if(NOT _modgui_pngs) + file(GLOB _modgui_pngs "${ASSETS_BASE_DIR}/${_bundle_name}/screenshot-*.png") + endif() if(_modgui_pngs) list(GET _modgui_pngs 0 _png) get_filename_component(_png_name "${_png}" NAME) file(COPY "${_png}" DESTINATION "${ASSETS_BASE_DIR}/${_bundle_name}") set(_thumb "GxPlugins.lv2/${_bundle_name}/${_png_name}") endif() - + if(NOT _ttl_results) string(REGEX REPLACE "\\.lv2$" "" _name "${_bundle_name}") set(_ttl_results "${_name}|Plugin") endif() - + foreach(_res IN LISTS _ttl_results) string(REGEX REPLACE "\\|.*$" "" _plugin_name "${_res}") string(REGEX REPLACE "^.*\\|" "" _category "${_res}") - + # Avoid duplicates if already added by GxPlugins set(_already_added FALSE) foreach(_existing IN LISTS ALL_AUTHORS) @@ -204,7 +218,7 @@ if(IS_DIRECTORY "${TRUNK_LV2_DIR}") endforeach() if(NOT _already_added) - list(APPEND ALL_DESCRIPTIONS "${_plugin_name}|") + list(APPEND ALL_PLUGIN_NAMES "${_plugin_name}") list(APPEND ALL_AUTHORS "${_plugin_name}|Guitarix") list(APPEND ALL_CATEGORIES "${_plugin_name}|${_category}") if(_thumb) @@ -228,25 +242,34 @@ function(scan_external_assets dir_name author) message(STATUS "Scanning external assets: ${dir_name} at ${_assets_dir}") extract_from_ttl("${_assets_dir}" _ttl_results) has_binary_in_assets("${_assets_dir}" _has_binary) - + if(NOT _has_binary) message(STATUS " NO BINARY found in ${_assets_dir}") endif() - # Check for thumbnail in modgui + # Check for thumbnail — modgui dir first, then assets root for generated screenshots set(_thumb "") file(GLOB _modgui_pngs "${_assets_dir}/modgui/screenshot-*.png" "${_assets_dir}/modgui/thumbnail-*.png") if(_modgui_pngs) list(GET _modgui_pngs 0 _png) get_filename_component(_png_name "${_png}" NAME) - set(_thumb "${dir_name}.lv2/${_png_name}") + set(_thumb "${dir_name}.lv2/modgui/${_png_name}") + else() + file(GLOB _modgui_pngs "${_assets_dir}/screenshot-*.png") + if(_modgui_pngs) + list(GET _modgui_pngs 0 _png) + get_filename_component(_png_name "${_png}" NAME) + set(_thumb "${dir_name}.lv2/${_png_name}") + endif() + endif() + if(_thumb) message(STATUS " Found thumbnail: ${_thumb}") endif() foreach(_res IN LISTS _ttl_results) string(REGEX REPLACE "\\|.*$" "" _plugin_name "${_res}") string(REGEX REPLACE "^.*\\|" "" _category "${_res}") - + set(_already_added FALSE) foreach(_existing IN LISTS ALL_AUTHORS) string(REGEX REPLACE "\\|.*$" "" _existing_name "${_existing}") @@ -258,7 +281,7 @@ function(scan_external_assets dir_name author) if(NOT _already_added) message(STATUS " Adding plugin: ${_plugin_name}") - list(APPEND ALL_DESCRIPTIONS "${_plugin_name}|") + list(APPEND ALL_PLUGIN_NAMES "${_plugin_name}") list(APPEND ALL_AUTHORS "${_plugin_name}|${author}") list(APPEND ALL_CATEGORIES "${_plugin_name}|${_category}") if(_thumb) @@ -269,7 +292,7 @@ function(scan_external_assets dir_name author) endif() endif() endforeach() - set(ALL_DESCRIPTIONS "${ALL_DESCRIPTIONS}" PARENT_SCOPE) + set(ALL_PLUGIN_NAMES "${ALL_PLUGIN_NAMES}" PARENT_SCOPE) set(ALL_AUTHORS "${ALL_AUTHORS}" PARENT_SCOPE) set(ALL_CATEGORIES "${ALL_CATEGORIES}" PARENT_SCOPE) set(AVAILABLE_PLUGINS "${AVAILABLE_PLUGINS}" PARENT_SCOPE) @@ -293,6 +316,13 @@ scan_external_assets("FatFrog" "brummer10") scan_external_assets("Neuralrack" "brummer10") scan_external_assets("doubletracker" "Varcain") +# --- Build descriptions list from plugin_descriptions.json --- +set(ALL_DESCRIPTIONS "") +foreach(_name IN LISTS ALL_PLUGIN_NAMES) + lookup_description("${_name}" _desc) + list(APPEND ALL_DESCRIPTIONS "${_name}|${_desc}") +endforeach() + # --- Helper: Populate a JSON object field from "key|value" list --- function(json_set_map JSON_VAR FIELD) set(_json "${${JSON_VAR}}") diff --git a/cmake/targets/collisiondrive.cmake b/cmake/targets/collisiondrive.cmake index a383fe5..1589344 100644 --- a/cmake/targets/collisiondrive.cmake +++ b/cmake/targets/collisiondrive.cmake @@ -23,14 +23,23 @@ set(_cd_src "${THIRD_PARTY}/CollisionDrive") set(_cd_plugin "${_cd_src}/CollisionDrive") set(_cd_assets "${ASSETS_DIR}/CollisionDrive.lv2") -# ─── Phase 1: Copy TTL ────────────────────────────────────────────────── +# ─── Phase 1: Copy TTL + modgui ────────────────────────────────────────── file(MAKE_DIRECTORY "${_cd_assets}") -if(EXISTS "${_cd_plugin}/manifest.ttl") +# Prefer MOD/manifest.ttl because it includes rdfs:seeAlso . +if(EXISTS "${_cd_plugin}/MOD/manifest.ttl") + configure_file("${_cd_plugin}/MOD/manifest.ttl" "${_cd_assets}/manifest.ttl" COPYONLY) +elseif(EXISTS "${_cd_plugin}/manifest.ttl") configure_file("${_cd_plugin}/manifest.ttl" "${_cd_assets}/manifest.ttl" COPYONLY) endif() if(EXISTS "${_cd_plugin}/CollisionDrive.ttl") configure_file("${_cd_plugin}/CollisionDrive.ttl" "${_cd_assets}/CollisionDrive.ttl" COPYONLY) endif() +if(EXISTS "${_cd_plugin}/MOD/modgui.ttl") + configure_file("${_cd_plugin}/MOD/modgui.ttl" "${_cd_assets}/modgui.ttl" COPYONLY) +endif() +if(IS_DIRECTORY "${_cd_plugin}/MOD/modgui") + file(COPY "${_cd_plugin}/MOD/modgui/" DESTINATION "${_cd_assets}/modgui/") +endif() # ─── Phase 2 & 3: Build & Sync ────────────────────────────────────────── brummer_add_plugin( diff --git a/cmake/targets/metaltone.cmake b/cmake/targets/metaltone.cmake index 9a8c392..31e6958 100644 --- a/cmake/targets/metaltone.cmake +++ b/cmake/targets/metaltone.cmake @@ -23,14 +23,23 @@ set(_mt_src "${THIRD_PARTY}/MetalTone") set(_mt_plugin "${_mt_src}/MetalTone") set(_mt_assets "${ASSETS_DIR}/MetalTone.lv2") -# ─── Phase 1: Copy TTL ────────────────────────────────────────────────── +# ─── Phase 1: Copy TTL + modgui ────────────────────────────────────────── file(MAKE_DIRECTORY "${_mt_assets}") -if(EXISTS "${_mt_plugin}/manifest.ttl") +# Prefer MOD/manifest.ttl because it includes rdfs:seeAlso . +if(EXISTS "${_mt_plugin}/MOD/manifest.ttl") + configure_file("${_mt_plugin}/MOD/manifest.ttl" "${_mt_assets}/manifest.ttl" COPYONLY) +elseif(EXISTS "${_mt_plugin}/manifest.ttl") configure_file("${_mt_plugin}/manifest.ttl" "${_mt_assets}/manifest.ttl" COPYONLY) endif() if(EXISTS "${_mt_plugin}/MetalTone.ttl") configure_file("${_mt_plugin}/MetalTone.ttl" "${_mt_assets}/MetalTone.ttl" COPYONLY) endif() +if(EXISTS "${_mt_plugin}/MOD/modgui.ttl") + configure_file("${_mt_plugin}/MOD/modgui.ttl" "${_mt_assets}/modgui.ttl" COPYONLY) +endif() +if(IS_DIRECTORY "${_mt_plugin}/MOD/modgui") + file(COPY "${_mt_plugin}/MOD/modgui/" DESTINATION "${_mt_assets}/modgui/") +endif() # ─── Phase 2 & 3: Build & Sync ────────────────────────────────────────── brummer_add_plugin( diff --git a/cmake/targets/modamptk.cmake b/cmake/targets/modamptk.cmake index 948fd02..22b573b 100644 --- a/cmake/targets/modamptk.cmake +++ b/cmake/targets/modamptk.cmake @@ -37,8 +37,19 @@ set(_pa_build "${_matk_build}/preamps") set(_pa_assets "${ASSETS_DIR}/PreAmps.lv2") file(MAKE_DIRECTORY "${_pa_assets}") -configure_file("${_pa_dir}/manifest.ttl" "${_pa_assets}/manifest.ttl" COPYONLY) +# Prefer MOD/manifest.ttl because it includes rdfs:seeAlso . +if(EXISTS "${_pa_dir}/MOD/manifest.ttl") + configure_file("${_pa_dir}/MOD/manifest.ttl" "${_pa_assets}/manifest.ttl" COPYONLY) +else() + configure_file("${_pa_dir}/manifest.ttl" "${_pa_assets}/manifest.ttl" COPYONLY) +endif() configure_file("${_pa_dir}/PreAmps.ttl" "${_pa_assets}/PreAmps.ttl" COPYONLY) +if(EXISTS "${_pa_dir}/MOD/modgui.ttl") + configure_file("${_pa_dir}/MOD/modgui.ttl" "${_pa_assets}/modgui.ttl" COPYONLY) +endif() +if(IS_DIRECTORY "${_pa_dir}/MOD/modgui") + file(COPY "${_pa_dir}/MOD/modgui/" DESTINATION "${_pa_assets}/modgui/") +endif() add_library(preamps_dsp SHARED "${_pa_dir}/PreAmps.cpp") target_include_directories(preamps_dsp PRIVATE "${_matk_lv2_compat}" "${LV2_INCLUDE}" "${_pa_dir}" "${_pa_dir}/DSP") @@ -63,8 +74,19 @@ set(_pwa_build "${_matk_build}/poweramps") set(_pwa_assets "${ASSETS_DIR}/PowerAmps.lv2") file(MAKE_DIRECTORY "${_pwa_assets}") -configure_file("${_pwa_dir}/manifest.ttl" "${_pwa_assets}/manifest.ttl" COPYONLY) +# Prefer MOD/manifest.ttl because it includes rdfs:seeAlso . +if(EXISTS "${_pwa_dir}/MOD/manifest.ttl") + configure_file("${_pwa_dir}/MOD/manifest.ttl" "${_pwa_assets}/manifest.ttl" COPYONLY) +else() + configure_file("${_pwa_dir}/manifest.ttl" "${_pwa_assets}/manifest.ttl" COPYONLY) +endif() configure_file("${_pwa_dir}/poweramps.ttl" "${_pwa_assets}/poweramps.ttl" COPYONLY) +if(EXISTS "${_pwa_dir}/MOD/modgui.ttl") + configure_file("${_pwa_dir}/MOD/modgui.ttl" "${_pwa_assets}/modgui.ttl" COPYONLY) +endif() +if(IS_DIRECTORY "${_pwa_dir}/MOD/modgui") + file(COPY "${_pwa_dir}/MOD/modgui/" DESTINATION "${_pwa_assets}/modgui/") +endif() add_library(poweramps_dsp SHARED "${_pwa_dir}/poweramps.cpp") target_include_directories(poweramps_dsp PRIVATE "${_matk_lv2_compat}" "${LV2_INCLUDE}" "${_pwa_dir}" "${_pwa_dir}/dsp") @@ -89,8 +111,19 @@ set(_pai_build "${_matk_build}/preampimpulses") set(_pai_assets "${ASSETS_DIR}/PreAmpImpulses.lv2") file(MAKE_DIRECTORY "${_pai_assets}") -configure_file("${_pai_dir}/manifest.ttl" "${_pai_assets}/manifest.ttl" COPYONLY) +# Prefer MOD/manifest.ttl because it includes rdfs:seeAlso . +if(EXISTS "${_pai_dir}/MOD/manifest.ttl") + configure_file("${_pai_dir}/MOD/manifest.ttl" "${_pai_assets}/manifest.ttl" COPYONLY) +else() + configure_file("${_pai_dir}/manifest.ttl" "${_pai_assets}/manifest.ttl" COPYONLY) +endif() configure_file("${_pai_dir}/PreAmpImpulses.ttl" "${_pai_assets}/PreAmpImpulses.ttl" COPYONLY) +if(EXISTS "${_pai_dir}/MOD/modgui.ttl") + configure_file("${_pai_dir}/MOD/modgui.ttl" "${_pai_assets}/modgui.ttl" COPYONLY) +endif() +if(IS_DIRECTORY "${_pai_dir}/MOD/modgui") + file(COPY "${_pai_dir}/MOD/modgui/" DESTINATION "${_pai_assets}/modgui/") +endif() add_library(preampimpulses_dsp SHARED "${_pai_dir}/PreAmpImpulses.cpp") target_include_directories(preampimpulses_dsp PRIVATE "${_matk_lv2_compat}" "${LV2_INCLUDE}" "${_pai_dir}" "${_pai_dir}/DSP" "${_pai_dir}/DSP/zita-resampler-1.1.0" "${_pai_dir}/DSP/zita-convolver" "${FFTW3_PREFIX}/include") @@ -117,8 +150,19 @@ set(_pwai_build "${_matk_build}/powerampimpulses") set(_pwai_assets "${ASSETS_DIR}/PowerAmpImpulses.lv2") file(MAKE_DIRECTORY "${_pwai_assets}") -configure_file("${_pwai_dir}/manifest.ttl" "${_pwai_assets}/manifest.ttl" COPYONLY) +# Prefer MOD/manifest.ttl because it includes rdfs:seeAlso . +if(EXISTS "${_pwai_dir}/MOD/manifest.ttl") + configure_file("${_pwai_dir}/MOD/manifest.ttl" "${_pwai_assets}/manifest.ttl" COPYONLY) +else() + configure_file("${_pwai_dir}/manifest.ttl" "${_pwai_assets}/manifest.ttl" COPYONLY) +endif() configure_file("${_pwai_dir}/PowerAmpImpulses.ttl" "${_pwai_assets}/PowerAmpImpulses.ttl" COPYONLY) +if(EXISTS "${_pwai_dir}/MOD/modgui.ttl") + configure_file("${_pwai_dir}/MOD/modgui.ttl" "${_pwai_assets}/modgui.ttl" COPYONLY) +endif() +if(IS_DIRECTORY "${_pwai_dir}/MOD/modgui") + file(COPY "${_pwai_dir}/MOD/modgui/" DESTINATION "${_pwai_assets}/modgui/") +endif() add_library(powerampimpulses_dsp SHARED "${_pwai_dir}/PowerAmpImpulses.cpp") target_include_directories(powerampimpulses_dsp PRIVATE "${_matk_lv2_compat}" "${LV2_INCLUDE}" "${_pwai_dir}" "${_pwai_dir}/DSP" "${_pwai_dir}/DSP/zita-resampler-1.1.0" "${_pwai_dir}/DSP/zita-convolver" "${_pwai_dir}/DSP/amp_ir" "${FFTW3_PREFIX}/include") diff --git a/plugin_descriptions.json b/plugin_descriptions.json new file mode 100644 index 0000000..62a9993 --- /dev/null +++ b/plugin_descriptions.json @@ -0,0 +1,200 @@ +{ + "AIDA-X": "Simple loader for neural models using RTNeural inference engine.", + "AIDA-X (headless)": "AIDA-X is an Amp Model Player, allowing it to load models of AI trained music gear, which you can then play through!", + "CollisionDrive": "Overdrive/Distortion", + "DoubleTracker": "Emulated dual-take track, best with headphones", + "FatFrog": "High Gain Amplifier", + "FatFrog_": "High Gain Amplifier", + "Gx Alembic": "Based on simple Alembic F-2B vstudio preamp 2 sectionos of 12AX7 together with tonestack and volume This is an identical circuit apart from coupling caps which could do with filters", + "Gx Studio Preamp Mono": "Based on simple Alembic F-2B vstudio preamp 2 sections of 12AX7 together with tonestack and volume This is an identical circuit apart from coupling caps which could do with filters", + "Gx Studio Preamp Stereo": "Based on simple Alembic F-2B vstudio preamp 2 sectionos of 12AX7 together with tonestack and volume This is an identical circuit apart from coupling caps which could do with filters", + "Gx Tape Stereo": "Filter/tone shaping effect", + "Gx w20": "Based on simple w20 F-2B vstudio preamp 2 sectionos of 12AX7 together with tonestack and volume This is an identical circuit apart from coupling caps which could do with filters", + "GxAmplifier": "Amp/cabinet simulator", + "GxAmplifier-Stereo-X": "Amp/cabinet simulator", + "GxAmplifier-X": "Amp/cabinet simulator", + "GxAutoWah": "Analog wah emulation of the classic Dunlop Crybaby (*), in a auto-wah version.", + "GxAxisFace": "Simulation of the Axis Face Silicon Pedal", + "GxBaJaTubeDriver": "Tube based overdrive pedal simulation", + "GxBarkGraphicEQ": "A Graphic Equalizer with Bark frequency scale.", + "GxBigMuffPi": "Distortion/overdrive effect", + "GxBlueAmp": "Single - ended head amplifier simulation inspired by late 1950s Fender “Princeton” and “Champ” amplifier designs, it delivers tight bass, clean mids and highs.", + "GxBoobTube": "The BoobTube is a little tube boost pedal simulation, it's a variation of the ValveCaster. It adds some overdrive and tube compression along with boosting the signal", + "GxBooster": "A 2 band boost plugin. With this plugin you can boost the high and the low frequencies independently.", + "GxBoss DS1": "Distortion/overdrive effect", + "GxBottleRocket": "Analogue simulation of a tube preamp", + "GxCabSim": "Cabinet simulation LV2 plugin", + "GxCabinet": "Amp/cabinet simulator", + "GxChorus-Stereo": "Chorus effect", + "GxClubDrive": "Overdrive Pedal Simulation based on a EF86 Pentode Valve Simulation.", + "GxColorSound Tonebender": "Distortion/overdrive effect", + "GxCompressor": "Dynamic range compressor", + "GxCreamMachine": "Simulation, based on a tube power amp circuit", + "GxDOP250": "Overdrive Preamp Pedal simulation", + "GxDelay-Stereo": "A stereo delay plugin with independent delay time and delay gain for each channel. It also has a LFO modulator and two modes: linear and pingpong.", + "GxEcho-Stereo": "A stereo echo plugin with independent delay time and delay volume for each channel. It also has a LFO modulator and two modes: linear and pingpong.", + "GxEchoCat": "A tape delay simulation plugin.", + "GxEpic": "Simulation of a class A electric guitar valve amplifier", + "GxEternity": "This low compression overdrive pedal is perfect for any style of music that requires natural sounding overdrive", + "GxExpander": "Expander/gate", + "GxFlanger": "Flanger effect", + "GxFuzz": "A Fuzz Effect", + "GxFuzzFaceFuller": "Distortion/overdrive effect", + "GxFuzzFaceJH2": "Distortion/overdrive effect", + "GxFuzzMaster": "Distortion/overdrive effect", + "GxFz1b": "Vintage Fuzz Pedal simulation", + "GxFz1s": "Vintage Fuzz Pedal simulation", + "GxGraphicEQ": "Equalizer", + "GxGuvnor": "Overdrive/distortion pedal simulation", + "GxHF_Brightener": "Equalizer", + "GxHeathkit": "Distortion Booster Pedal simulation", + "GxHogsFoot": "Filter/tone shaping effect", + "GxHornet": "Distortion/overdrive effect", + "GxHotBox": "Analouge simulation of a tube preamp with overdrive and interactive tone control", + "GxHyperion": "Simulation of the Hyperion Fuzz Pedal", + "GxKnightFuzz": "Vintage Fuzz Pedal simulation This is a really nasty Fuzz Pedal, which act at lower/ moderate settings as a ultra dark fuzz, when settings get cranked up, it becomes more and more high harmonics.", + "GxLiquidDrive": "Liquid Drive provides a tonal response with a warm mild to aggressive overdrive, which can do anything from Blues to Hard Rock", + "GxLuna": "Gnarly overdrive pedal simulation", + "GxMXR Distortion": "Distortion/overdrive effect", + "GxMetalAmp": "Amp/cabinet simulator", + "GxMetalHead": "Amp/cabinet simulator", + "GxMicroAmp": "The MicroAmp is designed to be a transparent clean volume booster.", + "GxMole": "Filter/tone shaping effect", + "GxMuff": "Equalizer", + "GxMultiBandCompressor": "Dynamic range compressor", + "GxMultiBandDelay": "Delay effect", + "GxMultiBandDistortion": "Distortion/overdrive effect", + "GxMultiBandEcho": "Delay effect", + "GxMultiBandReverb": "Reverb effect", + "GxPhaser": "Phaser effect", + "GxPlexi": "Power Amp simulation", + "GxQuack": "envelope controlled wah pedal with some extra features", + "GxRangeMaster": "Filter/tone shaping effect", + "GxRat": "Distortion/overdrive effect", + "GxRedeye": "Amplifier simulation", + "GxRedeye Big Chump": "Amplifier simulation", + "GxRedeye Chump": "Amplifier simulation", + "GxRedeye Vibro Chump": "Amplifier simulation", + "GxRedeyeFx": "Delay effect", + "GxReverb-Stereo": "Reverb effect", + "GxSD1": "Super Overdrive pedal simulation", + "GxSD2Lead": "SD2 overdirve pedal simulation", + "GxSVT": "Tube based Bass preamp simulation", + "GxSaturator": "A LV2 saturation plugin", + "GxScreamingBird": "Distortion/overdrive effect", + "GxShakaTube": "A overdrive tube pedal simulation", + "GxSloopyBlue": "Overdrive pedal simulation", + "GxSlowGear": "Noise gate", + "GxSunFace": "A classic fuzz face with some light modifications", + "GxSuperFuzz": "Analog simulation of the UniVox (*) SuperFuzz pedal as LV2 plugin. In this simulation the trim pot, which is usualy in the housing, is exposed as control parameter. It adjust the amount of harmonics.", + "GxSupersonic": "Tube amp simulation", + "GxSuppaToneBender": "Analog simulation of the Vox (*) Suppa Tone Bender pedal as LV2 plugin.", + "GxSustainer": "Distortion/overdrive effect", + "GxTape": "Filter/tone shaping effect", + "GxTapeStereo": "Filter/tone shaping effect", + "GxTiltTone": "Simple Tilt tone control", + "GxTimRay": "Overdrive pedal simulation", + "GxToneMachine": "Distortion/overdrive effect", + "GxTremolo": "Modulation effect", + "GxTubeDelay": "Delay effect", + "GxTubeDistortion": "Simulation of a Tube based Distortion Pedal.", + "GxTubeScreamer": "Analog distortion emulation of the classic Ibanez TS-9 (*)", + "GxTubeTremelo": "Modulation effect", + "GxTubeVibrato": "Attempt at a true vibrato And it works well! Sounds very sweet with tubes wrapped", + "GxTuner": "Signal analyser", + "GxUVox720k": "Analog simulation of the UniVox (*) 720k solid state amp as LV2 plugin.", + "GxUltraCab": "Cabinet simulator Lv2 stereo plugin", + "GxVBassPreAmp": "Analog Simulation of the 1984 (*) Vox Venue Bass 100 Pre Amp Section.", + "GxValveCaster": "The ValveCaster is a little tube boost pedal simulation. It adds some overdrive and tube compression along with boosting the signal", + "GxVintageFuzzMaster": "Simulation of the Vintage Fuzz Master Pedal", + "GxVmk2": "Amplifier simulation", + "GxVoodoFuzz": "simulation impressed by the Voodoo Lab (*) SuperFuzz pedal. It's basically a Bosstone circuite, followed by the tone control of the FoxToneMachine in parralel with a DarkBooster, finaly ended in a Volume control.", + "GxVoodooFuzz": "simulation impressed by the Voodoo Lab (*) SuperFuzz pedal. It's basically a Bosstone circuite, followed by the tone control of the FoxToneMachine in parralel with a DarkBooster, finaly ended in a Volume control.", + "GxWah": "Analog wah emulation of the classic Dunlop Crybaby (*), in a auto-wah version.", + "GxWahwah": "Modulation effect", + "GxZita_rev1-Stereo": "Reverb effect", + "Gx_aclipper_": "Distortion/overdrive effect", + "Gx_alembic": "Based on simple Alembic F-2B vstudio preamp 2 sectionos of 12AX7 together with tonestack and volume This is an identical circuit apart from coupling caps which could do with filters", + "Gx_barkgraphiceq_": "A Graphic Equalizer with Bark frequency scale.", + "Gx_bmp_": "Distortion/overdrive effect", + "Gx_bossds1_": "Distortion/overdrive effect", + "Gx_cabsim_": "Cabinet simulation LV2 plugin", + "Gx_chorus_stereo": "Chorus effect", + "Gx_colwah_": "Modulation effect", + "Gx_compressor": "Dynamic range compressor", + "Gx_cstb_": "Distortion/overdrive effect", + "Gx_delay_stereo": "A stereo delay plugin with independent delay time and delay gain for each channel. It also has a LFO modulator and two modes: linear and pingpong.", + "Gx_detune_": "Pitch shifting effect", + "Gx_digital_delay_": "Delay effect", + "Gx_digital_delay_st_": "Delay effect", + "Gx_duck_delay_": "The delayed signal added to output dependent of input signal amplitude. If the input signal is high. The delayed signal turned off, and vise versa. The switching controlled by envelope follower", + "Gx_duck_delay_st_": "The delayed signal added to output dependent of input signal amplitude. If the input signal is high. The delayed signal turned off, and vise versa. The switching controlled by envelope follower", + "Gx_echo_stereo": "A stereo echo plugin with independent delay time and delay volume for each channel. It also has a LFO modulator and two modes: linear and pingpong.", + "Gx_expander": "Expander/gate", + "Gx_flanger": "Flanger effect", + "Gx_fumaster_": "Distortion/overdrive effect", + "Gx_fuzz_": "A Fuzz Effect", + "Gx_fuzzface_": "Distortion/overdrive effect", + "Gx_fuzzfacefm_": "Distortion/overdrive effect", + "Gx_gcb_95_": "Modulation effect", + "Gx_graphiceq_": "Equalizer", + "Gx_hfb_": "Equalizer", + "Gx_hogsfoot_": "Filter/tone shaping effect", + "Gx_hornet_": "Distortion/overdrive effect", + "Gx_jcm800pre_": "Amplifier simulation", + "Gx_jcm800pre_ST": "Amplifier simulation", + "Gx_livelooper_": "Delay effect", + "Gx_mbcompressor_": "Dynamic range compressor", + "Gx_mbdelay_": "Delay effect", + "Gx_mbdistortion_": "Distortion/overdrive effect", + "Gx_mbecho_": "Delay effect", + "Gx_mbreverb_": "Reverb effect", + "Gx_mole_": "Filter/tone shaping effect", + "Gx_muff_": "Equalizer", + "Gx_mxrdist_": "Distortion/overdrive effect", + "Gx_oc_2_": "Pitch shifting effect", + "Gx_phaser": "Phaser effect", + "Gx_rangem_": "Filter/tone shaping effect", + "Gx_reverb_stereo": "Reverb effect", + "Gx_room_simulator_": "Reverb effect", + "Gx_scream_": "Distortion/overdrive effect", + "Gx_shimmizita_": "Reverb effect", + "Gx_studiopre": "Based on simple Alembic F-2B vstudio preamp 2 sections of 12AX7 together with tonestack and volume This is an identical circuit apart from coupling caps which could do with filters", + "Gx_studiopre_st": "Based on simple Alembic F-2B vstudio preamp 2 sectionos of 12AX7 together with tonestack and volume This is an identical circuit apart from coupling caps which could do with filters", + "Gx_susta_": "Distortion/overdrive effect", + "Gx_switched_tremolo_": "Modulation effect", + "Gx_tremolo": "Modulation effect", + "Gx_vibe_": "Modulation effect", + "Gx_vibe_mono": "Modulation effect", + "Gx_w20": "Based on simple w20 F-2B vstudio preamp 2 sectionos of 12AX7 together with tonestack and volume This is an identical circuit apart from coupling caps which could do with filters", + "Gx_zita_rev1_stereo": "Reverb effect", + "Gxbooster": "A 2 band boost plugin. With this plugin you can boost the high and the low frequencies independently.", + "Gxdetune": "Pitch shifting effect", + "Gxdigital_delay": "Delay effect", + "Gxdigital_delay_st": "Delay effect", + "Gxduck_delay": "The delayed signal added to output dependent of input signal amplitude. If the input signal is high. The delayed signal turned off, and vise versa. The switching controlled by envelope follower", + "Gxduck_delay_st": "The delayed signal added to output dependent of input signal amplitude. If the input signal is high. The delayed signal turned off, and vise versa. The switching controlled by envelope follower", + "Gxgcb_95": "Modulation effect", + "Gxjcm800pre": "Amplifier simulation", + "Gxjcm800preST": "Amplifier simulation", + "Gxlivelooper": "Delay effect", + "Gxoc_2": "Pitch shifting effect", + "Gxroom_simulator": "Reverb effect", + "Gxshimmizita": "Reverb effect", + "Gxswitched_tremolo": "Modulation effect", + "Gxts9sim": "Analog distortion emulation of the classic Ibanez TS-9 (*)", + "Gxvibe": "Modulation effect", + "GxvibeMono": "Modulation effect", + "ImpulseLoader": "ImpulseLoader is a simple mono IR-File loader/convolver.", + "MetalTone": "MetalTone is modeled after the renowned BOSS MT-2 Metal Zone(*), a high gain distortion pedal with an advanced EQ section.", + "Neural Amp Modeler": "LV2 plugin for neural network machine learning guitar amplifier simulation models", + "Neuralrack": "Neuralrack is a Neural Model loader with support for *.nam, *.aidax and *.json based model files. Neuralrack allow to load up to two model files and run them serial. The input/output could be controlled separate for each model. For tone sharping a 6 band EQ could be enabled. Additional it allow to load up a separate Impulse Response file for each output channel (stereo).", + "PowerAmpImpulses": "Mixer/routing utility", + "PowerAmps": "Mixer/routing utility", + "PreAmpImpulses": "Mixer/routing utility", + "PreAmps": "Mixer/routing utility", + "XDarkTerror": "Valve amplifier simulation", + "XTinyTerror": "Valve amplifier simulation", + "X_darkterror_": "Valve amplifier simulation", + "X_tinyterror_": "Valve amplifier simulation" +} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a22ab15..106ea7d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -73,6 +73,8 @@ if(PKG_CONFIG_FOUND) endif() endif() +enable_testing() + # CTest integration include(GoogleTest) gtest_discover_tests(x11_unit_tests) diff --git a/tools/generate_thumbnails.sh b/tools/generate_thumbnails.sh new file mode 100755 index 0000000..5b038ba --- /dev/null +++ b/tools/generate_thumbnails.sh @@ -0,0 +1,482 @@ +#!/bin/bash +# ============================================================================= +# tools/generate_thumbnails.sh — Automated LV2 plugin thumbnail generation +# +# Builds plugins natively, renders their X11 UIs in a virtual framebuffer, +# and captures screenshots for use as plugin browser thumbnails. +# +# Requirements: Xvfb, jackd, jalv.gtk3, xdotool, imagemagick (convert), xwd +# ============================================================================= + +set -euo pipefail + +PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +THIRD_PARTY="$PROJECT_ROOT/3rd_party" +ASSETS_DIR="$PROJECT_ROOT/app/src/main/assets/lv2" +TRUNK_LV2="$THIRD_PARTY/guitarix/trunk/src/LV2" + +BUILD_DIR="/tmp/lv2_thumb_build" +LV2_DIR="/tmp/lv2_thumb_plugins" +SCREENSHOTS_DIR="$PROJECT_ROOT/tools/screenshots" + +DISPLAY_NUM=99 +XVFB_PID="" +JACK_PID="" +TRUNK_RES_OBJECTS="" + +# ─── Helpers ───────────────────────────────────────────────────────────────── + +cleanup() { + [ -n "$JACK_PID" ] && kill "$JACK_PID" 2>/dev/null || true + [ -n "$XVFB_PID" ] && kill "$XVFB_PID" 2>/dev/null || true + wait 2>/dev/null || true +} +trap cleanup EXIT + +log() { echo -e "\033[1;34m[thumb]\033[0m $*"; } +warn() { echo -e "\033[1;33m[warn]\033[0m $*"; } +err() { echo -e "\033[1;31m[err]\033[0m $*"; } + +check_deps() { + local missing=() + for cmd in Xvfb jackd jalv.gtk3 xdotool convert xwd g++ pkg-config; do + command -v "$cmd" >/dev/null 2>&1 || missing+=("$cmd") + done + if [ ${#missing[@]} -gt 0 ]; then + err "Missing tools: ${missing[*]}" + err "Install with: sudo apt-get install -y xvfb jackd2 jalv xdotool imagemagick x11-apps build-essential pkg-config" + exit 1 + fi +} + +start_services() { + log "Starting Xvfb on :$DISPLAY_NUM" + Xvfb ":$DISPLAY_NUM" -screen 0 1280x1024x24 -ac >/dev/null 2>&1 & + XVFB_PID=$! + sleep 1 + + export DISPLAY=":$DISPLAY_NUM" + + log "Starting JACK dummy driver" + jackd --no-realtime -d dummy -r 48000 -p 1024 >/dev/null 2>&1 & + JACK_PID=$! + sleep 2 +} + +# ─── Screenshot capture ───────────────────────────────────────────────────── + +capture_plugin() { + local uri="$1" + local name="$2" + local output_dir="$3" + + export LV2_PATH="$LV2_DIR" + + # Launch jalv with the plugin + jalv.gtk3 -s 48000 "$uri" >/dev/null 2>&1 & + local jalv_pid=$! + sleep 3 + + # Find the plugin window + local win_id + win_id=$(xdotool search --pid "$jalv_pid" 2>/dev/null | tail -1) + + if [ -z "$win_id" ]; then + # Fallback: search by name + win_id=$(xdotool search --name "$name" 2>/dev/null | head -1) + fi + + if [ -z "$win_id" ]; then + warn "No window found for $name ($uri)" + kill "$jalv_pid" 2>/dev/null || true + wait "$jalv_pid" 2>/dev/null || true + return 1 + fi + + # Capture the window + mkdir -p "$output_dir" + local raw="/tmp/thumb_${name}_raw.xwd" + local screenshot="$output_dir/screenshot-${name}.png" + local thumbnail="$output_dir/thumbnail-${name}.png" + + xwd -id "$win_id" -out "$raw" 2>/dev/null + + # Convert: crop jalv menu bar (27px), save screenshot + convert "$raw" -crop +0+27 +repage "$screenshot" 2>/dev/null + + # Create thumbnail (256px wide, proportional) + convert "$screenshot" -resize 256x "$thumbnail" 2>/dev/null + + rm -f "$raw" + + local dims + dims=$(identify -format "%wx%h" "$screenshot" 2>/dev/null) + log " Captured $name: $dims -> $screenshot" + + kill "$jalv_pid" 2>/dev/null || true + wait "$jalv_pid" 2>/dev/null || true + sleep 1 + return 0 +} + +# ─── Build: Brummer plugins ───────────────────────────────────────────────── + +build_brummer_plugin() { + local src_dir="$1" + local bundle_name="$2" + + log "Building $bundle_name (brummer Makefile)" + cd "$src_dir" + make clean >/dev/null 2>&1 || true + if make -j"$(nproc)" >/dev/null 2>&1; then + make INSTALL_DIR="$LV2_DIR" install >/dev/null 2>&1 + log " Built and installed $bundle_name" + cd "$PROJECT_ROOT" + return 0 + else + warn " Failed to build $bundle_name" + cd "$PROJECT_ROOT" + return 1 + fi +} + +# ─── Build: xputty static library (shared by all trunk plugins) ────────────── + +build_xputty() { + local xputty="$TRUNK_LV2/xputty" + local cairo_flags + cairo_flags=$(pkg-config --cflags cairo x11) + local objects="" + + log "Building xputty static library..." + + # Compile widget sources + for f in "$xputty"/widgets/*.cpp; do + local base obj + base=$(basename "${f%.cpp}") + obj="$BUILD_DIR/xputty_${base}.o" + if g++ -O2 -fPIC $cairo_flags \ + -I"$xputty/header" -I"$xputty/header/widgets" -I"$xputty/header/dialogs" \ + -I"$xputty/resources" -I"$xputty/xdgmime" \ + -c "$f" -o "$obj" 2>/dev/null; then + objects="$objects $obj" + fi + done + + # Compile xdgmime + for f in "$xputty"/xdgmime/*.c; do + local base obj + base=$(basename "${f%.c}") + obj="$BUILD_DIR/xputty_${base}.o" + if gcc -O2 -fPIC -I"$xputty/xdgmime" -c "$f" -o "$obj" 2>/dev/null; then + objects="$objects $obj" + fi + done + + # Compile core xputty sources (xwidget, xputty, xcolor, etc.) + for f in "$xputty"/*.cpp; do + local base obj + base=$(basename "${f%.cpp}") + obj="$BUILD_DIR/xputty_${base}.o" + if g++ -O2 -fPIC $cairo_flags \ + -I"$xputty/header" -I"$xputty/header/widgets" -I"$xputty/header/dialogs" \ + -I"$xputty/resources" -I"$xputty/xdgmime" \ + -c "$f" -o "$obj" 2>/dev/null; then + objects="$objects $obj" + fi + done + + # Compile dialogs + for f in "$xputty"/dialogs/*.cpp; do + local base obj + base=$(basename "${f%.cpp}") + obj="$BUILD_DIR/xputty_${base}.o" + if g++ -O2 -fPIC $cairo_flags \ + -I"$xputty/header" -I"$xputty/header/widgets" -I"$xputty/header/dialogs" \ + -I"$xputty/resources" -I"$xputty/xdgmime" \ + -c "$f" -o "$obj" 2>/dev/null; then + objects="$objects $obj" + fi + done + + ar rcs "$BUILD_DIR/libxputty_trunk.a" $objects 2>/dev/null + log " xputty: $(echo $objects | wc -w) objects" + + # Embed PNG resources (must cd so symbol names are just filenames) + TRUNK_RES_OBJECTS="" + local _orig_dir + _orig_dir=$(pwd) + cd "$xputty/resources" + for png in *.png; do + local base obj + base="${png%.png}" + obj="$BUILD_DIR/res_${base}.o" + ld -r -b binary -o "$obj" "$png" 2>/dev/null + TRUNK_RES_OBJECTS="$TRUNK_RES_OBJECTS $obj" + done + cd "$_orig_dir" + log " resources: $(echo $TRUNK_RES_OBJECTS | wc -w) PNGs embedded" +} + +# ─── Build: Trunk plugin (stub DSP + full UI with xputty) ─────────────────── + +build_trunk_plugin() { + local plugin_dir="$1" # e.g., gx_bmp.lv2 + local plugin_base="$2" # e.g., gx_bmp + local plugin_uri_full="$3" # full URI from manifest + + local src="$TRUNK_LV2/$plugin_dir" + local xputty="$TRUNK_LV2/xputty" + local faust="$TRUNK_LV2/faust-generated" + + log "Building $plugin_dir (trunk stub+UI)" + + # Find UI source + local ui_src + ui_src=$(find "$src" -name "*_ui.cpp" 2>/dev/null | head -1) + if [ -z "$ui_src" ]; then + warn " No UI source found for $plugin_dir" + return 1 + fi + + local build="$BUILD_DIR/$plugin_dir" + mkdir -p "$build" + + # Find the header that defines GXPLUGIN_URI and PortIndex + local header + header=$(find "$src" -name "*.h" ! -name "gx_common.h" 2>/dev/null | head -1) + if [ -z "$header" ]; then + warn " No header found for $plugin_dir" + return 1 + fi + + local header_name + header_name=$(basename "$header") + + # Count ports from the PortIndex enum + local num_ports + num_ports=$(grep -cE "^\s+[A-Z_]+," "$header" 2>/dev/null || true) + : "${num_ports:=5}" + num_ports=$((num_ports + 1)) # account for last entry without comma + + # Create DSP stub with explicit URI (avoids header guard collisions) + cat > "$build/stub_dsp.cpp" << STUBEOF +#include +#include +#include +struct StubPlugin { float *ports[$num_ports]; }; +static LV2_Handle inst(const LV2_Descriptor*, double, const char*, const LV2_Feature* const*) { + return (LV2_Handle)calloc(1, sizeof(StubPlugin)); +} +static void conn(LV2_Handle h, uint32_t p, void *d) { + if (p < $num_ports) ((StubPlugin*)h)->ports[p] = (float*)d; +} +static void run(LV2_Handle h, uint32_t n) { + StubPlugin *s = (StubPlugin*)h; + if (s->ports[0] && s->ports[1]) memcpy(s->ports[0], s->ports[1], n*sizeof(float)); +} +static void clean(LV2_Handle h) { free(h); } +static const LV2_Descriptor desc = { "$plugin_uri_full", inst, conn, NULL, run, NULL, clean, NULL }; +extern "C" __attribute__((visibility("default"))) +const LV2_Descriptor* lv2_descriptor(uint32_t i) { return i==0 ? &desc : NULL; } +STUBEOF + + # Compile DSP stub (no plugin header needed - URI is inline) + if ! g++ -O2 -fPIC -shared -o "$build/${plugin_base}.so" "$build/stub_dsp.cpp" \ + $(pkg-config --cflags lv2) -lm 2>/dev/null; then + warn " DSP stub failed for $plugin_dir" + return 1 + fi + + # Compile real UI with xputty + resources + if ! g++ -O2 -fPIC -shared -o "$build/${plugin_base}_ui.so" "$ui_src" \ + -I"$src" \ + -I"$xputty/header" -I"$xputty/header/widgets" -I"$xputty/header/dialogs" \ + -I"$xputty/resources" -I"$xputty/lv2_plugin" -I"$xputty/xdgmime" \ + -I"$faust" \ + $(pkg-config --cflags --libs lv2 cairo x11) \ + -Wl,--whole-archive "$BUILD_DIR/libxputty_trunk.a" -Wl,--no-whole-archive \ + $TRUNK_RES_OBJECTS \ + -lm -fvisibility=hidden 2>/dev/null; then + warn " UI build failed for $plugin_dir" + return 1 + fi + + # Install to LV2 path + local dest="$LV2_DIR/$plugin_dir" + mkdir -p "$dest" + cp "$build/${plugin_base}.so" "$build/${plugin_base}_ui.so" "$dest/" + + # Copy TTL from assets + local assets_src="$ASSETS_DIR/GxPlugins.lv2/$plugin_dir" + if [ -d "$assets_src" ]; then + cp "$assets_src"/*.ttl "$dest/" 2>/dev/null || true + fi + + log " Built and installed $plugin_dir" + return 0 +} + +# ─── Capture trunk plugin via custom host ──────────────────────────────────── + +capture_trunk_plugin() { + local dir="$1" base="$2" uri="$3" display="$4" output_dir="$5" + + local ui_so="$LV2_DIR/$dir/${base}_ui.so" + local bundle="$LV2_DIR/$dir/" + + if [ ! -f "$ui_so" ]; then + warn "No UI .so for $dir" + return 1 + fi + + # Get UI URI from the plugin TTL (look for guiext:ui ) + local ui_uri + ui_uri=$(grep "guiext:ui" "$LV2_DIR/$dir/"*.ttl 2>/dev/null | grep -o '<[^>]*>' | head -1 | tr -d '<>') + if [ -z "$ui_uri" ]; then + # Fallback: look for X11UI + ui_uri=$(grep -B1 "X11UI" "$LV2_DIR/$dir/"*.ttl 2>/dev/null | grep -o '<[^>]*>' | head -1 | tr -d '<>') + fi + if [ -z "$ui_uri" ]; then + ui_uri="${uri}_gui" + fi + + mkdir -p "$output_dir" + local ppm="/tmp/thumb_${display}.ppm" + local screenshot="$output_dir/screenshot-${display}.png" + local thumbnail="$output_dir/thumbnail-${display}.png" + + local dims + dims=$("$BUILD_DIR/lv2_screenshot" "$ui_so" "$uri" "$ui_uri" "$bundle" "$ppm" 2>/dev/null) + + if [ -f "$ppm" ] && [ -s "$ppm" ]; then + convert "$ppm" "$screenshot" 2>/dev/null + convert "$screenshot" -resize 256x "$thumbnail" 2>/dev/null + rm -f "$ppm" + + # Verify non-black capture + local mean + mean=$(convert "$screenshot" -format '%[fx:mean]' info: 2>/dev/null) + if [ "$(echo "$mean > 0.01" | bc -l 2>/dev/null)" = "1" ] 2>/dev/null; then + log " Captured $display: $dims -> $screenshot" + return 0 + else + warn " Capture was black for $dir ($display)" + rm -f "$screenshot" "$thumbnail" + return 1 + fi + else + rm -f "$ppm" + warn " Screenshot failed for $dir ($display)" + return 1 + fi +} + +# ─── Plugin definitions ───────────────────────────────────────────────────── + +declare -A BRUMMER_PLUGINS=( + ["FatFrog.lv2"]="$THIRD_PARTY/FatFrog.lv2" + ["XDarkTerror"]="$THIRD_PARTY/XDarkTerror" + ["XTinyTerror"]="$THIRD_PARTY/XTinyTerror" + ["GxCabSim.lv2"]="$THIRD_PARTY/GxCabSim.lv2" +) + +# plugin_dir|plugin_base|full_uri|display_name +TRUNK_PLUGINS=( + "gx_aclipper.lv2|gx_aclipper|http://guitarix.sourceforge.net/plugins/gx_aclipper_#_aclipper_|aclipper" + "gx_bmp.lv2|gx_bmp|http://guitarix.sourceforge.net/plugins/gx_bmp_#_bmp_|bmp" + "gx_bossds1.lv2|gx_bossds1|http://guitarix.sourceforge.net/plugins/gx_bossds1_#_bossds1_|bossds1" + "gx_gcb_95.lv2|gx_gcb_95|http://guitarix.sourceforge.net/plugins/gx_gcb_95_#_gcb_95_|gcb95" + "gx_mole.lv2|gx_mole|http://guitarix.sourceforge.net/plugins/gx_mole_#_mole_|mole" + "gx_muff.lv2|gx_muff|http://guitarix.sourceforge.net/plugins/gx_muff_#_muff_|muff" + "gx_mxrdist.lv2|gx_mxrdist|http://guitarix.sourceforge.net/plugins/gx_mxrdist_#_mxrdist_|mxrdist" + "gx_w20.lv2|gx_w20|http://guitarix.sourceforge.net/plugins/gx_w20#w20|w20" + "gx_zita_rev1.lv2|gx_zita_rev1|http://guitarix.sourceforge.net/plugins/gx_zita_rev1_stereo#_zita_rev1_stereo|zitarev1" + "gxmetal_amp.lv2|gxmetal_amp|http://guitarix.sourceforge.net/plugins/gxmetal_amp#metal_amp|metalamp" + "gxmetal_head.lv2|gxmetal_head|http://guitarix.sourceforge.net/plugins/gxmetal_head#metal_head|metalhead" + "gxtape.lv2|gxtape|http://guitarix.sourceforge.net/plugins/gxtape#tape|tape" + "gxtape_st.lv2|gxtape_st|http://guitarix.sourceforge.net/plugins/gxtape_st#tape|tapest" + "gxts9.lv2|gxts9|http://guitarix.sourceforge.net/plugins/gxts9#ts9sim|ts9" + "gxtuner.lv2|gxtuner|http://guitarix.sourceforge.net/plugins/gxtuner#tuner|tuner" +) + +# Brummer plugin URIs (from their manifest.ttl files) +declare -A BRUMMER_URIS=( + ["FatFrog.lv2"]="https://github.com/brummer10/FatFrog#_FatFrog_" + ["XDarkTerror.lv2"]="http://guitarix.sourceforge.net/plugins/XDarkTerror_#_darkterror_" + ["XTinyTerror.lv2"]="http://guitarix.sourceforge.net/plugins/XTinyTerror_#_tinyterror_" + ["gx_cabsim.lv2"]="http://guitarix.sourceforge.net/plugins/gx_cabsim_#_cabsim_" +) + +# ─── Main ──────────────────────────────────────────────────────────────────── + +main() { + check_deps + + rm -rf "$BUILD_DIR" "$LV2_DIR" + mkdir -p "$BUILD_DIR" "$LV2_DIR" "$SCREENSHOTS_DIR" + + log "Phase 1: Building plugins natively" + + # Build brummer plugins + for bundle in "${!BRUMMER_PLUGINS[@]}"; do + build_brummer_plugin "${BRUMMER_PLUGINS[$bundle]}" "$bundle" || true + done + + # Build xputty (shared by all trunk plugins) + build_xputty + + # Build trunk plugins + for entry in "${TRUNK_PLUGINS[@]}"; do + IFS='|' read -r dir base uri display <<< "$entry" + build_trunk_plugin "$dir" "$base" "$uri" || true + done + + # Build the custom screenshot host + log "Building lv2_screenshot host..." + gcc -O2 -o "$BUILD_DIR/lv2_screenshot" "$PROJECT_ROOT/tools/lv2_screenshot.c" \ + $(pkg-config --cflags --libs x11 lv2) -ldl 2>/dev/null + + log "Phase 2: Starting virtual display and audio" + start_services + + log "Phase 3: Capturing screenshots" + local captured=0 + local failed=0 + + # Capture brummer plugins (via jalv — they have full DSP+UI) + for bundle in "${!BRUMMER_URIS[@]}"; do + local uri="${BRUMMER_URIS[$bundle]}" + local name + name=$(echo "$bundle" | sed 's/\.lv2$//' | tr '[:upper:]' '[:lower:]') + local dest="$ASSETS_DIR/${bundle}" + + if [ -d "$LV2_DIR/$bundle" ]; then + if capture_plugin "$uri" "$name" "$dest"; then + captured=$((captured + 1)) + else + failed=$((failed + 1)) + fi + fi + done + + # Capture trunk plugins (via custom lv2_screenshot host for proper X11 UI) + for entry in "${TRUNK_PLUGINS[@]}"; do + IFS='|' read -r dir base uri display <<< "$entry" + local dest="$ASSETS_DIR/GxPlugins.lv2/$dir" + + if [ -d "$LV2_DIR/$dir" ]; then + if capture_trunk_plugin "$dir" "$base" "$uri" "$display" "$dest"; then + captured=$((captured + 1)) + else + failed=$((failed + 1)) + fi + fi + done + + log "Done! Captured: $captured, Failed: $failed" + log "Screenshots saved to asset directories" + log "Re-run cmake configure to regenerate plugin_metadata.json" +} + +main "$@" diff --git a/tools/lv2_screenshot.c b/tools/lv2_screenshot.c new file mode 100644 index 0000000..594966e --- /dev/null +++ b/tools/lv2_screenshot.c @@ -0,0 +1,267 @@ +/* + * lv2_screenshot.c — Minimal LV2 X11 UI host for screenshot capture. + * + * Opens an LV2 plugin UI, renders it, captures the child window to PPM. + * + * Usage: lv2_screenshot + * Build: gcc -O2 -o lv2_screenshot lv2_screenshot.c $(pkg-config --cflags --libs x11 lv2) -ldl + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static void stub_write(LV2UI_Controller c, uint32_t pi, uint32_t bs, + uint32_t pp, const void *b) { + (void)c; (void)pi; (void)bs; (void)pp; (void)b; +} + +typedef struct { int w, h; } ReqSize; +static int resize_cb(LV2UI_Feature_Handle h, int w, int ht) { + ReqSize *rs = (ReqSize *)h; rs->w = w; rs->h = ht; return 0; +} + +static int save_ppm(const char *path, XImage *img) { + FILE *f = fopen(path, "wb"); + if (!f) return -1; + fprintf(f, "P6\n%d %d\n255\n", img->width, img->height); + for (int y = 0; y < img->height; y++) { + for (int x = 0; x < img->width; x++) { + unsigned long px = XGetPixel(img, x, y); + unsigned char rgb[3] = { + (px >> 16) & 0xff, (px >> 8) & 0xff, px & 0xff + }; + fwrite(rgb, 1, 3, f); + } + } + fclose(f); + return 0; +} + +/* Recursively find the deepest window with actual content */ +static Window find_content_window(Display *dpy, Window win, int depth) { + Window root_ret, parent_ret, *children = NULL; + unsigned int nchildren = 0; + if (!XQueryTree(dpy, win, &root_ret, &parent_ret, &children, &nchildren)) + return win; + + Window best = win; + int best_area = 0; + + for (unsigned int c = 0; c < nchildren; c++) { + XWindowAttributes cwa; + if (XGetWindowAttributes(dpy, children[c], &cwa)) { + int area = cwa.width * cwa.height; + if (area > best_area && cwa.map_state == IsViewable) { + best_area = area; + best = children[c]; + } + } + } + if (children) XFree(children); + + /* Recurse one level deeper if we found a child */ + if (best != win && depth < 3) { + Window deeper = find_content_window(dpy, best, depth + 1); + if (deeper != best) return deeper; + } + return best; +} + +/* Composite all child windows onto a pixmap for proper capture */ +static XImage *capture_composited(Display *dpy, Window top, int w, int h) { + int screen = DefaultScreen(dpy); + Pixmap pix = XCreatePixmap(dpy, top, w, h, DefaultDepth(dpy, screen)); + GC gc = XCreateGC(dpy, pix, 0, NULL); + + /* Fill with black */ + XSetForeground(dpy, gc, BlackPixel(dpy, screen)); + XFillRectangle(dpy, pix, gc, 0, 0, w, h); + + /* Copy top window content */ + XCopyArea(dpy, top, pix, gc, 0, 0, w, h, 0, 0); + + /* Copy each child window */ + Window root_ret, parent_ret, *children = NULL; + unsigned int nchildren = 0; + if (XQueryTree(dpy, top, &root_ret, &parent_ret, &children, &nchildren)) { + for (unsigned int c = 0; c < nchildren; c++) { + XWindowAttributes cwa; + if (XGetWindowAttributes(dpy, children[c], &cwa) && + cwa.map_state == IsViewable) { + XCopyArea(dpy, children[c], pix, gc, + 0, 0, cwa.width, cwa.height, cwa.x, cwa.y); + + /* Also copy grandchildren */ + Window gr, gp, *gchildren = NULL; + unsigned int gn = 0; + if (XQueryTree(dpy, children[c], &gr, &gp, &gchildren, &gn)) { + for (unsigned int g = 0; g < gn; g++) { + XWindowAttributes gwa; + if (XGetWindowAttributes(dpy, gchildren[g], &gwa) && + gwa.map_state == IsViewable) { + XCopyArea(dpy, gchildren[g], pix, gc, + 0, 0, gwa.width, gwa.height, + cwa.x + gwa.x, cwa.y + gwa.y); + } + } + if (gchildren) XFree(gchildren); + } + } + } + if (children) XFree(children); + } + + XSync(dpy, False); + XImage *img = XGetImage(dpy, pix, 0, 0, w, h, AllPlanes, ZPixmap); + XFreePixmap(dpy, pix); + XFreeGC(dpy, gc); + return img; +} + +int main(int argc, char **argv) { + if (argc < 6) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + const char *ui_so_path = argv[1]; + const char *plugin_uri = argv[2]; + const char *ui_uri = argv[3]; + const char *bundle_path = argv[4]; + const char *output_path = argv[5]; + + Display *dpy = XOpenDisplay(NULL); + if (!dpy) { fprintf(stderr, "Cannot open X display\n"); return 1; } + int screen = DefaultScreen(dpy); + + Window parent = XCreateSimpleWindow(dpy, RootWindow(dpy, screen), + 0, 0, 800, 600, 0, + BlackPixel(dpy, screen), + BlackPixel(dpy, screen)); + XSelectInput(dpy, parent, ExposureMask | StructureNotifyMask | SubstructureNotifyMask); + XMapWindow(dpy, parent); + XFlush(dpy); + + void *handle = dlopen(ui_so_path, RTLD_NOW); + if (!handle) { fprintf(stderr, "dlopen: %s\n", dlerror()); return 1; } + + typedef const LV2UI_Descriptor *(*DescFunc)(uint32_t); + DescFunc desc_func = (DescFunc)dlsym(handle, "lv2ui_descriptor"); + if (!desc_func) { fprintf(stderr, "No lv2ui_descriptor\n"); return 1; } + + const LV2UI_Descriptor *desc = NULL; + for (uint32_t i = 0; ; i++) { + const LV2UI_Descriptor *d = desc_func(i); + if (!d) break; + if (strcmp(d->URI, ui_uri) == 0) { desc = d; break; } + } + if (!desc) desc = desc_func(0); + if (!desc) { fprintf(stderr, "No UI descriptor\n"); return 1; } + + ReqSize req = { 800, 600 }; + LV2UI_Resize resize_feat = { &req, resize_cb }; + LV2_Feature parent_feature = { LV2_UI__parent, (void *)parent }; + LV2_Feature resize_feature = { LV2_UI__resize, &resize_feat }; + const LV2_Feature *features[] = { &parent_feature, &resize_feature, NULL }; + + LV2UI_Widget widget = NULL; + LV2UI_Handle ui = desc->instantiate(desc, plugin_uri, bundle_path, + stub_write, NULL, &widget, features); + if (!ui) { fprintf(stderr, "UI instantiate failed\n"); dlclose(handle); return 1; } + + if (req.w > 0 && req.h > 0) + XResizeWindow(dpy, parent, req.w, req.h); + + /* Force-map all child windows created by the plugin */ + XMapSubwindows(dpy, parent); + XFlush(dpy); + + /* Initial event processing */ + for (int i = 0; i < 30; i++) { + /* Keep mapping any new subwindows that appear */ + XMapSubwindows(dpy, parent); + while (XPending(dpy)) { XEvent ev; XNextEvent(dpy, &ev); } + usleep(20000); + } + + /* Map any grandchild windows too */ + { + Window root_ret, parent_ret, *children = NULL; + unsigned int nchildren = 0; + XQueryTree(dpy, parent, &root_ret, &parent_ret, &children, &nchildren); + for (unsigned int c = 0; c < nchildren; c++) + XMapSubwindows(dpy, children[c]); + if (children) XFree(children); + XFlush(dpy); + } + + /* Get the idle interface — this is critical for xputty-based UIs */ + const LV2UI_Idle_Interface *idle_iface = NULL; + if (desc->extension_data) + idle_iface = (const LV2UI_Idle_Interface *)desc->extension_data(LV2_UI__idleInterface); + + /* Send port events to trigger control redraws */ + if (desc->port_event) { + float bypass = 0.0f; + desc->port_event(ui, 0, sizeof(float), 0, &bypass); + for (uint32_t p = 1; p < 20; p++) { + float val = 0.5f; + desc->port_event(ui, p, sizeof(float), 0, &val); + } + } + + /* Pump the idle interface + X events to let the UI fully render */ + for (int i = 0; i < 120; i++) { + if (idle_iface && idle_iface->idle) + idle_iface->idle(ui); + while (XPending(dpy)) { XEvent ev; XNextEvent(dpy, &ev); } + usleep(16000); /* ~60fps */ + } + + /* Try capturing child windows directly, then fall back to compositing */ + XImage *img = NULL; + int cap_w = 0, cap_h = 0; + { + Window root_ret, parent_ret, *children = NULL; + unsigned int nchildren = 0; + XQueryTree(dpy, parent, &root_ret, &parent_ret, &children, &nchildren); + + for (unsigned int c = 0; c < nchildren && !img; c++) { + XWindowAttributes cwa; + if (XGetWindowAttributes(dpy, children[c], &cwa) && + cwa.width > 10 && cwa.height > 10 && cwa.map_state == IsViewable) { + img = XGetImage(dpy, children[c], 0, 0, cwa.width, cwa.height, + AllPlanes, ZPixmap); + cap_w = cwa.width; cap_h = cwa.height; + } + } + if (children) XFree(children); + } + + /* Fall back to compositing if no child captured */ + if (!img) { + XWindowAttributes pwa; + XGetWindowAttributes(dpy, parent, &pwa); + img = capture_composited(dpy, parent, pwa.width, pwa.height); + if (img) { cap_w = img->width; cap_h = img->height; } + } + + if (!img) { + fprintf(stderr, "Capture failed\n"); + } else { + save_ppm(output_path, img); + fprintf(stdout, "%dx%d\n", cap_w, cap_h); + XDestroyImage(img); + } + + desc->cleanup(ui); + dlclose(handle); + XDestroyWindow(dpy, parent); + XCloseDisplay(dpy); + return 0; +} diff --git a/tools/update_descriptions.sh b/tools/update_descriptions.sh new file mode 100755 index 0000000..f13a969 --- /dev/null +++ b/tools/update_descriptions.sh @@ -0,0 +1,249 @@ +#!/bin/bash +# ============================================================================= +# tools/update_descriptions.sh — Extract plugin descriptions from source TTLs, +# READMEs, and category heuristics. Only fills in empty/missing entries in +# plugin_descriptions.json; never overwrites existing descriptions. +# +# Run manually when new plugins are added. +# ============================================================================= + +set -euo pipefail + +PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +THIRD_PARTY="$PROJECT_ROOT/3rd_party" +DESC_FILE="$PROJECT_ROOT/plugin_descriptions.json" +ASSETS_DIR="$PROJECT_ROOT/app/src/main/assets/lv2" + +python3 - "$THIRD_PARTY" "$DESC_FILE" "$ASSETS_DIR" << 'PYEOF' +import json, re, sys, os, glob + +THIRD_PARTY = sys.argv[1] +DESC_FILE = sys.argv[2] +ASSETS_DIR = sys.argv[3] + +# ── Load existing descriptions ────────────────────────────────────────────── + +if os.path.exists(DESC_FILE): + with open(DESC_FILE) as f: + descriptions = json.load(f) +else: + descriptions = {} + +original = dict(descriptions) + +# ── Helpers ───────────────────────────────────────────────────────────────── + +def extract_comment(path): + """Extract first paragraph of rdfs:comment from a TTL file.""" + try: + text = open(path).read() + # Try multiline """...""" + m = re.search(r'rdfs:comment\s+"""(.*?)"""', text, re.DOTALL) + if not m: + m = re.search(r'rdfs:comment\s+"([^"]*)"', text) + if m: + c = m.group(1).strip() + if c and c != "...": + # Take first paragraph + c = re.split(r'\n\n', c)[0] + c = re.split(r'\nFeatures:', c)[0] + c = re.split(r'\nBased on:', c)[0] + c = re.split(r'\n\*', c)[0] + c = re.split(r'\nsource:', c)[0] + c = re.sub(r'\n+', ' ', c).strip() + return c + except: + pass + return None + +def extract_comment_from_dir(d): + """Try all TTL files in a directory.""" + for ttl in sorted(glob.glob(os.path.join(d, "*.ttl"))): + base = os.path.basename(ttl) + if base in ("manifest.ttl", "modgui.ttl", "modguis.ttl"): + continue + c = extract_comment(ttl) + if c: + return c + return None + +def parse_readme(path): + """Extract name and description from README.md (first paragraph after # header).""" + try: + lines = open(path).read().replace('\r', '').split('\n') + header = lines[0] + m = re.match(r'^#\s*(\S+?)\.lv2', header) + if not m: + m = re.match(r'^#\s*(\S+)', header) + if m: + desc_lines = [] + for line in lines[1:]: + line = line.strip() + if not line or line.startswith('#') or line.startswith('![') or line.startswith('<'): + break + desc_lines.append(line) + return ' '.join(desc_lines).strip() if desc_lines else None + except: + pass + return None + +CATEGORY_DESCS = { + "DistortionPlugin": "Distortion/overdrive effect", + "AmplifierPlugin": "Amplifier simulation", + "SimulatorPlugin": "Amp/cabinet simulator", + "CompressorPlugin": "Dynamic range compressor", + "DelayPlugin": "Delay effect", + "ReverbPlugin": "Reverb effect", + "ChorusPlugin": "Chorus effect", + "FlangerPlugin": "Flanger effect", + "PhaserPlugin": "Phaser effect", + "FilterPlugin": "Filter/tone shaping effect", + "EQPlugin": "Equalizer", + "ModulatorPlugin": "Modulation effect", + "GatePlugin": "Noise gate", + "ExpanderPlugin": "Expander/gate", + "UtilityPlugin": "Utility", + "PitchPlugin": "Pitch shifting effect", + "AnalyserPlugin": "Signal analyser", + "MixerPlugin": "Mixer/routing utility", +} + +def extract_names_and_category(d): + """Extract doap:name values and lv2 category from TTL files in a directory.""" + names = [] + category = "Plugin" + for ttl in glob.glob(os.path.join(d, "*.ttl")): + base = os.path.basename(ttl) + if base in ("manifest.ttl", "modgui.ttl", "modguis.ttl"): + continue + text = open(ttl).read() + for m in re.finditer(r'doap:name\s+"([^"]+)"', text): + names.append(m.group(1)) + cm = re.search(r'lv2:(\w+Plugin)', text) + if cm: + category = cm.group(1) + return names, category + +def set_if_empty(name, desc): + """Set description only if the entry is missing or empty.""" + if desc and (name not in descriptions or not descriptions[name]): + descriptions[name] = desc + +# ── Process GxPlugins ─────────────────────────────────────────────────────── + +gx_dir = os.path.join(THIRD_PARTY, "GxPlugins.lv2.Android") +for bundle in sorted(glob.glob(os.path.join(gx_dir, "*.lv2"))): + if not os.path.isdir(bundle): + continue + bundle_name = os.path.basename(bundle) + plugin_name = bundle_name.replace(".lv2", "") + + # README + desc = None + readme = os.path.join(bundle, "README.md") + if os.path.exists(readme): + desc = parse_readme(readme) + + # TTL fallback + if not desc: + plugin_dir = os.path.join(bundle, "plugin") + if os.path.isdir(plugin_dir): + desc = extract_comment_from_dir(plugin_dir) + + # Category fallback + _, cat = (extract_names_and_category(os.path.join(bundle, "plugin")) + if os.path.isdir(os.path.join(bundle, "plugin")) else ([], "Plugin")) + if not desc: + desc = CATEGORY_DESCS.get(cat, "") + + set_if_empty(plugin_name, desc) + +# ── Process Trunk Plugins ─────────────────────────────────────────────────── + +trunk_dir = os.path.join(THIRD_PARTY, "guitarix/trunk/src/LV2") +if os.path.isdir(trunk_dir): + for bundle in sorted(glob.glob(os.path.join(trunk_dir, "*.lv2"))): + if not os.path.isdir(bundle): + continue + desc = extract_comment_from_dir(bundle) + names, cat = extract_names_and_category(bundle) + + if not desc: + desc = CATEGORY_DESCS.get(cat, "") + + for name in names: + set_if_empty(name, desc) + +# ── Process External Plugins ──────────────────────────────────────────────── + +EXTERNALS = [ + ("neural_amp_modeler", ["neural-amp-modeler-lv2/resources"]), + ("aidadsp", ["aidadsp-lv2/rt-neural-generic/ttl"]), + ("AIDA-X", ["AIDA-X"]), + ("ImpulseLoader", ["ImpulseLoader/ImpulseLoader/lv2", "ImpulseLoader"]), + ("XDarkTerror", ["XDarkTerror/XDarkTerror/plugin", "XDarkTerror"]), + ("XTinyTerror", ["XTinyTerror/XTinyTerror/plugin", "XTinyTerror"]), + ("CollisionDrive", ["CollisionDrive/CollisionDrive", "CollisionDrive"]), + ("MetalTone", ["MetalTone/MetalTone", "MetalTone"]), + ("GxCabSim", ["GxCabSim.lv2/plugin", "GxCabSim.lv2"]), + ("FatFrog", ["FatFrog.lv2/FatFrog/plugin", "FatFrog.lv2"]), + ("Neuralrack", ["NeuralRack/NeuralRack/lv2", "NeuralRack"]), + ("doubletracker", ["doubletracker.lv2"]), + ("PreAmps", ["ModularAmpToolKit.lv2/PreAmps"]), + ("PowerAmps", ["ModularAmpToolKit.lv2/PowerAmps"]), + ("PreAmpImpulses", ["ModularAmpToolKit.lv2/PreAmpImpulses"]), + ("PowerAmpImpulses", ["ModularAmpToolKit.lv2/PowerAmpImpulses"]), +] + +for dir_name, source_dirs in EXTERNALS: + # Try assets TTL first + assets_plugin = os.path.join(ASSETS_DIR, f"{dir_name}.lv2") + desc = None + if os.path.isdir(assets_plugin): + desc = extract_comment_from_dir(assets_plugin) + + # Try source TTLs + if not desc: + for sd in source_dirs: + src = os.path.join(THIRD_PARTY, sd) + if os.path.isdir(src): + desc = extract_comment_from_dir(src) + if desc: + break + + # Try README + if not desc: + for sd in source_dirs: + readme = os.path.join(THIRD_PARTY, sd, "README.md") + if os.path.exists(readme): + desc = parse_readme(readme) + if desc: + break + + # Category fallback + if not desc: + if os.path.isdir(assets_plugin): + _, cat = extract_names_and_category(assets_plugin) + desc = CATEGORY_DESCS.get(cat, "") + + # Get all plugin names from the TTLs + names = [] + if os.path.isdir(assets_plugin): + names, _ = extract_names_and_category(assets_plugin) + if not names: + names = [dir_name] + + for name in names: + set_if_empty(name, desc) + +# ── Write output ──────────────────────────────────────────────────────────── + +added = [k for k in descriptions if k not in original or (not original.get(k) and descriptions[k])] +with open(DESC_FILE, 'w') as f: + json.dump(dict(sorted(descriptions.items())), f, indent=2, ensure_ascii=False) + f.write('\n') + +print(f"Total: {len(descriptions)}, Updated: {len(added)}") +for k in sorted(added): + print(f" + {k}: {descriptions[k][:80]}") +PYEOF