HISE's Best Kept Secret: Dynamic Plugins
-
How or why is there no mention of this anywhere? Here's a quick demo. Works in compiled VST3i on Windows.
HiseSnippet 2203.3oc4Y80abbaDeOKuN4NG6z.zf9J6gBnSnJR5tj31ZACKa8Ga0XYI3SwNEv.BT6x6tMZOxKjbk7AC8Inu2OO4w9X+Hzm5y8aP6ugbWc6Jc5hpZSqJhdvRjblg+3L+lgbVumVEILFkNnV88GORDT6iB6NVZGr9.dhLX6MBpc+vc3FqPy7S8zwi3FiHNnVs4dFMQs52Nv8ye+wOkmxkQhISED7ZURj3EICSrSlcu09pjzzs3wh8SFVR5uXssiTx0UopLfm4BWIXDO5HdewK4jX2JLn1c1LNwpzcsbqvDT61OUEOt6.0IRu7uNwjbXpfFzNnKLje5sTowDhoYCVePRZ7dEmaSPPsv8l3Ely6E94g6jDmb17S7F+L2BrIZT1eT6VUg2bUfW6xvakRvaJPpVIHcaOj9jvtQ5jQ1IqP34tgaKQvoGGt8xPwKavs9S2MbcEjPZWZH+HwVZL3LMZ8fUVYQF9mEVsQiFKurQMTvxLhdYordYxHahRZZzHQllHEmMCSXh3iDcs5DY+VFqdA16uWCF9IUEwSYpC+V1iXu+zUcygQKYvXHmeB2+nE1LsjY0DJbhrvprkWlkJrrmuc2MYwJlcfvuUXaX8TZfr603zKBmXwkBHXwMDeleYXxL37YeWlBAG+5m.GufzXIP7rHFaZM+aeay4W3LKP+f08GfkzhQoDhcBsHadH4pd4N0+qorsRwIDdm4NJuJ6nj1QRzosk4NTxK6bR.BmHX8UVKmYDxXFEasCHWoNo+.6iaf82XYGy0rQXuZ7dmYZ1KQarGv08yFBNSyGxdvuqAhjd6MeZJ1AkV3hMmE.5oUCcyXD5iQghDokhdIFx5Ib3zWhQFfaXCyhFP+NwxNQkkFyNTvhTpTFzP7NQTlUPqEmnEQ1zwvTkMLXWoGhRBKx1FhDyjJKa.+XrdVDkSvNIwN.562NwwfLBGbRrXZFA7AgwYhSTZXRwwBIKomacQr2TwhT93FjOpG7QqrZitNarjQXeJ2H95W8hVMGXsiLOb4kGQUIOLQh.6vk07SVtomRenHhibJxzmPjP47VJGy6fnXhJdQOmeDB1HTYXKyrd5OHNGQ9.BSDf1a2t6y3HZRKRS5NDjE6SJnUY8GTfQZ42.cd1l62p4uumdv29rgun4hrQKdVjC7PtMyrHXOlQfNHVHmF.rluF6QOh0AEHbS6WrN4KJzXIxVtyogBDnxMhmvgabIirABsXQ5zf3LEOxPgwXVJ9Ws2Vn3jQABxHHtsUysxQ1CYMY+5paxB9xGm13zE77Q5xCxzTcMG8lQoTZUp4W1nD69vLqEjzGwJpCxiiepatVM2Cg2CdxAuDUDfmoymipgcbUC8JQw4WCPKZ0imBuCcNAlPMJXvDIHpfJWDJbbJkDjVbz62WnMjTVclvg10SSv5jv4.BHGo1iYbhChLD.BbUIC2VPRoEySjSFOxlAZrymR0.IUHGKYHROvFFeBI9YoJtB+4oaTZF90nLGk9b4oWnPpRVxert2W1BrYDCfeaQFE+bTj5D+HeTcLrNEZa0yy28aPDJHAJQFNQelmpWD98drb9A.GRU7GOhWysVwvQVS05AXGNCFShIHNUuQ8SckmJhs8E10KjrZ3cARw7C054gqVS6D6tK7B7mNSm.8UR0gsOXe0A6veWACp8rXPksrS4R1sJ3cqhZH9xOc70e7gUm+DhwH2JtwWZSvIZr2fS1R+PX0VMGB3svBqtXYeuTHvqhJRNcWVE6JbZnZIbKwdRUpiLnLDxvZdoV+sj4eKY+lj59haho7LAh.6rL9MtfG1WxsIGK7E5GSEO5owa8nBxTxialhKU5QxOHOgqfy13e0JxSs53Nluq+wGezW9ua0w50cwop0FwrW2hbWLA04z2WA11LyOmAQHQRApF0urj3NzhSKcqf.OyLtJ4CWRJ2ENC40ycgKyCYtAWZLr3lrYJTQ.sjmixv2U1x4dvCjXmeod8l5Z4PLUnm5xzcP5YoXKY1vCE5xAGRP7p9psJDd4sJTtSlHuWujfJ413hncwCGtr9aBxCUnsh4xQE9Kqqoh6m2TgudVPB5c3dgkpIF3fMZQ6NEMzEbYlnaJdnk1YhOHzEiOS4a+Cpbo8+9gkIQSwFe81avsbpIo7CFNriDZaB4Gqsg3XbMpuko5gaHLGYUibm7bRJb8Wwy96PXo1eC63X5O9yd7eYVYJG+2cFr+9z0FeN+vU.MmySTENwtNouPWhn+TUbFdfU0lVoN0yW.zyJcJRcChGIaGWtS9+i0I6UEheR3dI1nASGi2ZJXDw+eLvXd++2Kbyd8PKHS.3sC25a9woY+xa+m5296F9F7ZZ2Ghws4epaLt9bH6YBoPS9t1y3Sw7WtpeJlQW4OEytQV.g80bIttxHZW1xmasNkWaCzXprp39opHEc71BGuRx8gqULYmxStGWVwXXbEKsSxjztf+5i2TR8e1UfSS7tlHbXIeWYp9dY3ds2jDaGztrhSltS4oeNWGi3RTEh3by5qR09Z9UotyMtuJ0+GTtoxGN6i8X7CBexy2n6qxKy39a1lR7pSbqQ0jncTR0nAJYRkv6qD4MzUFwS8X7DqEOwY8L7Byp78H93yMagvkS47y7BAfVY0eN3ISF+qVyYtIWs7GWqalwVI8+O78uRjJvygKa8MiTHjHtlt81y1sGdEoF2KzeHcMueC7Zn6WfOeT3lG.+nPW3+lp+6iCyIi2Xcf2OLO23lpKbluDZtex7RnYeACtkmci98r+hP7ZiNLWnj8+lX4qTY1DY+c335Kp2gWlMrKdNWj.nTJEoTWm0tE0Lhe7JzXBBcExX2f+A9Iew1z3Z4K1tXw+qrGC4QZ0AEeaW3g9P2L3bKc++BVObGZLaJ8aNDuJ5fnnpl5BJ145p3mecU7KttJ9kWWEev0Uwey0Uwe6OrhziVeRlUMzmafGuu2ltd6qUy+tcWZRv+DJycuxA
-
Interesting. I haven't actually thought about that use case but I think that it's a rather exotic one (usually you know what logic your plugin should have when you distribute it and I can only think of a few very unusual examples where this could become benefitial) and the ratio of things that can go wrong to benefits is not very favorable in my opinion (what if there is a compile error? There's no reporting here, what if you cannot absolutely trust the source to not cause havoc (like
FileSystem.getSystemRoot().deleteFile()
)? -
@Christoph-Hart well true, that's why encoding everything would be a good idea. You can also sanitize it for dangerous functions like that.
I tested it, you can dynamically add components in on init.
So you could theoretically keep the entire plugin online and have it rebuild itself on init for a true "live service" audio experience, though that is an incredibly niche idea for an industry where the ability to reproduce consistency is key.
But if you're working on an open source plugin, you can have it pull your scripts one by one from github, so it's always fresh.
Then you can choose to be on the master branch or choose any of the commits. For important projects, you could lock it to a certain version so that it always inits to that version. Github has 5000 requests per file per IP rate limit according to online sources. So it's more or less enough. Closed source becomes problematic and you'll have to rely on your server.
Imagine a software that evolves daily or biweekly. And if you have 3-4 plugins like that. AI related or whatever, something that moves at breakneck speeds. How annoying would it be to have to download 5 installers every other day without being able to keep track of versions between projects.
I definitely don't think this is something 99% of projects need but it opens a door to something truly next gen.
Plus, it lets you offload the authentication functionality to the server for those who need copy protection. Then you can only crack it by debugging in the memory or whatever, I'm not sure who the hell would still bother with that in this day and age. I'm suspecting most plugins are cracked by scripts because they use the same JUCE copy protection methods.
But this is a bit questionable right now because as I wrote in my example, eval currently does not work inside of a server callback.
-