HISE Logo Forum
    • Categories
    • Register
    • Login

    How to make dynamic expansion Artwork accessible for Webview?

    Scheduled Pinned Locked Moved Solved General Questions
    26 Posts 5 Posters 1.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • StraticahS
      Straticah @d.healey
      last edited by

      @d-healey I use the HISE expansion System.

      Hise Side:

      // Build path to Images/artwork.png in the expansion folder
      var artworkFile = rootFolder.getChildFile("Images").getChildFile("artwork.png");
      
      // Copy the artwork file to the webview folder for guaranteed access
      var sourceArtwork = rootFolder.getChildFile("Images").getChildFile("artwork.png");
      var webviewArtwork = webroot.getChildFile(expansionFolders[i] + "_artwork.png");
      
      // Copy the file using the correct copy() method
      Console.print("Copying artwork to webview folder...");
      sourceArtwork.copy(webviewArtwork);
      Console.print("Successfully copied artwork to: " + webviewArtwork.toString(0));
      
      // Use the local copy in the webview folder
      coverArtPath = expansionFolders[i] + "_artwork.png";
      Console.print("Using local artwork: " + coverArtPath);
      

      Problem was webview has no access to files outside of root - which on the other hand is essential for using external expansions.

      creating user interfaces: www.vst-design.com
      founder @prototype.audio https://www.prototype.audio/

      d.healeyD 1 Reply Last reply Reply Quote 0
      • d.healeyD
        d.healey @Straticah
        last edited by

        @Straticah For each expansion you can include an image called "Icon.png" in the expansion's Images folder. This should be available without having to load the expansion or doing any special handling. I don't know about accessing it in the webview though.

        Libre Wave - Freedom respecting instruments and effects
        My Patreon - HISE tutorials
        YouTube Channel - Public HISE tutorials

        StraticahS 1 Reply Last reply Reply Quote 0
        • StraticahS
          Straticah @d.healey
          last edited by

          @d-healey Yes this is the same approach i am using.

          Expansions/Images/artwork.png
          

          I have no problems displaying any artworks in HISEs preset browser - but HISE is not able to pass images into Webview. It only exposes the image path which is not enough.

          System paths can not be read by webview. Because lt is not able to access any folders outside of root - for security reasons.

          creating user interfaces: www.vst-design.com
          founder @prototype.audio https://www.prototype.audio/

          d.healeyD 1 Reply Last reply Reply Quote 0
          • d.healeyD
            d.healey @Straticah
            last edited by

            @Straticah Are you able to use the FileSystem API to copy the images to where they are accessible?

            Libre Wave - Freedom respecting instruments and effects
            My Patreon - HISE tutorials
            YouTube Channel - Public HISE tutorials

            StraticahS 1 Reply Last reply Reply Quote 0
            • StraticahS
              Straticah @d.healey
              last edited by

              @d-healey this would be inside the VST which is not possible since its compiled.

              = any other place would be outside of root.

              creating user interfaces: www.vst-design.com
              founder @prototype.audio https://www.prototype.audio/

              d.healeyD 1 Reply Last reply Reply Quote 0
              • d.healeyD
                d.healey @Straticah
                last edited by

                @Straticah Aha I get it. What about pulling from a server?

                Libre Wave - Freedom respecting instruments and effects
                My Patreon - HISE tutorials
                YouTube Channel - Public HISE tutorials

                StraticahS 1 Reply Last reply Reply Quote 0
                • StraticahS
                  Straticah @d.healey
                  last edited by Straticah

                  @d-healey I guess that is what i am going for if local url with a Base64 string fails.
                  I just thought there has to be an easier solution if i can send so much stuff via API already.

                  Also i have no test so far if web based hosting in VST plugins is cached reliably, but will explore :)

                  creating user interfaces: www.vst-design.com
                  founder @prototype.audio https://www.prototype.audio/

                  1 Reply Last reply Reply Quote 0
                  • Oli UllmannO
                    Oli Ullmann @Straticah
                    last edited by

                    @Straticah
                    I can't help you with your problem but your browser looks great! 😊

                    StraticahS 1 Reply Last reply Reply Quote 1
                    • StraticahS
                      Straticah @Oli Ullmann
                      last edited by

                      @Oli-Ullmann 🙌

                      creating user interfaces: www.vst-design.com
                      founder @prototype.audio https://www.prototype.audio/

                      HISEnbergH 1 Reply Last reply Reply Quote 1
                      • HISEnbergH
                        HISEnberg @Straticah
                        last edited by

                        @Straticah You've certainly peaked my interest with a webview based preset browser, so I'll test some things out and let you know if I find a solution to the image distribution issue. 😉

                        Screenshot 2025-09-14 091356.png

                        StraticahS 1 Reply Last reply Reply Quote 1
                        • StraticahS
                          Straticah @HISEnberg
                          last edited by

                          @HISEnberg currently i load via url which i try to integrate into expansion_info.xml without breaking it and bypassing any caching errors (that i currently experience in build).

                          https://prototype-audio-public.s3.eu-west-1.amazonaws.com/Expansions/Immersive/artwork.png
                          

                          But @oskarsh suggested shipping base64 encoded artworks in expansion instead.

                          creating user interfaces: www.vst-design.com
                          founder @prototype.audio https://www.prototype.audio/

                          Christoph HartC 1 Reply Last reply Reply Quote 0
                          • Christoph HartC
                            Christoph Hart @Straticah
                            last edited by

                            @Straticah there's actually a system built into the webview wrapper that allows you to create virtual assets from the embedded images in a plugin - this is a very common use case so you shouldn't have to hack around loading images from a server every time.

                            It's been a while that I've implemented it so I have to look into it again, but it should be possible to reference image data using the normal HISE expansion wildcards in your HTML:

                            <img src="{EXP::MyExpansion}thumbnail.png">
                            

                            I haven't tested this with expansions though, but I can take a look how to make it work.

                            StraticahS 2 Replies Last reply Reply Quote 5
                            • StraticahS
                              Straticah @Christoph Hart
                              last edited by

                              @Christoph-Hart oh this would be very helpful?! :)

                              creating user interfaces: www.vst-design.com
                              founder @prototype.audio https://www.prototype.audio/

                              1 Reply Last reply Reply Quote 0
                              • StraticahS
                                Straticah @Christoph Hart
                                last edited by

                                @Christoph-Hart I was not able to get it to work with my Expansions so far. If you have an example or rough script this would be very helpful :)

                                creating user interfaces: www.vst-design.com
                                founder @prototype.audio https://www.prototype.audio/

                                Christoph HartC 1 Reply Last reply Reply Quote 0
                                • Christoph HartC
                                  Christoph Hart @Straticah
                                  last edited by

                                  @Straticah yeah, I haven't implemented it yet, but it was pretty simple to add:

                                  const var WebView1 = Content.getComponent("WebView1");
                                  WebView1.set("x", 0);
                                  WebView1.set("y", 0);
                                  WebView1.set("width", 600);
                                  WebView1.set("height", 600);
                                  
                                  WebView1.setHtmlContent("
                                  <style>
                                  body { background: #888; }
                                  </style>
                                  <p>Hallo</p>
                                  <img src=\"{EXP::noicenoicenoice}hise.png\"/>
                                  ");
                                  

                                  Compile the latest commit, create an expansion called noicenoicenoice and slap the hise logo in there, then load this script and it should display the image. I haven't tested it in a compiled plugin but since it uses the default HISE image loading mechanism this should work without issues. Let me know if there are any hiccups / problems.

                                  Christoph HartC StraticahS 2 Replies Last reply Reply Quote 1
                                  • Christoph HartC
                                    Christoph Hart @Christoph Hart
                                    last edited by

                                    @Christoph-Hart oh and it needs to be a PNG file because the webview can only load those.

                                    StraticahS 1 Reply Last reply Reply Quote 0
                                    • StraticahS
                                      Straticah @Christoph Hart
                                      last edited by

                                      @Christoph-Hart works thank you very much this saved on a lot of time and potential bugs.

                                      165cb42f-f7ec-4c41-a0da-5b8380cba220-image.png

                                      creating user interfaces: www.vst-design.com
                                      founder @prototype.audio https://www.prototype.audio/

                                      1 Reply Last reply Reply Quote 3
                                      • StraticahS Straticah has marked this topic as solved
                                      • StraticahS
                                        Straticah @Christoph Hart
                                        last edited by Straticah

                                        @Christoph-Hart

                                        Let me know if there are any hiccups / problems.

                                        prototype_sampler_04:! WebView Resource for /%7BEXP::Hardware%20Lab%7Dartwork.png not found
                                        prototype_sampler_04:! WebView Resource for /%7BEXP::Pro%20Essentials%7Dartwork.png not found
                                        

                                        Mac works just fine as you have seen.
                                        Win works fine if expansion name has no spaces like "Immersive".

                                        I have some problems on windows encoding url from expansions with a separator.

                                        creating user interfaces: www.vst-design.com
                                        founder @prototype.audio https://www.prototype.audio/

                                        Christoph HartC 1 Reply Last reply Reply Quote 0
                                        • Christoph HartC
                                          Christoph Hart @Straticah
                                          last edited by

                                          @Straticah said in How to make dynamic expansion Artwork accessible for Webview?:

                                          %20

                                          ah yes, somehow the illegal URL characters are not converted properly - I half-assed it myself to convert the {} brackets of the wildcard, but I guess I have to look up exactly which characters are supposed to be encoded and reverse that process before checking the reference string in HISE.

                                          I will so use ChatGPT for that lol...

                                          StraticahS 1 Reply Last reply Reply Quote 2
                                          • StraticahS
                                            Straticah @Christoph Hart
                                            last edited by

                                            @Christoph-Hart Thats the way to go! I used Cursor for the webview.

                                            creating user interfaces: www.vst-design.com
                                            founder @prototype.audio https://www.prototype.audio/

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            19

                                            Online

                                            1.9k

                                            Users

                                            12.5k

                                            Topics

                                            108.9k

                                            Posts