Forum
    • Categories
    • Register
    • Login

    MAJOR UPDATE // NEW: Online KNOB BUILDER for HISE!! // Factory/User Preset System

    Scheduled Pinned Locked Moved Scripting
    lafknobsknob designerscalable knobonline editor
    98 Posts 17 Posters 23.2k 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.
    • David HealeyD
      David Healey @Chazrox
      last edited by

      @Chazrox How are you drawing circular noise?

      Free HISE Bootcamp Full Course for beginners.
      YouTube Channel - HISE tutorials
      My Patreon - More HISE tutorials

      ChazroxC 1 Reply Last reply Reply Quote 0
      • ChazroxC
        Chazrox @David Healey
        last edited by

        @David-Healey multiple layers. Theres a 'cap' in front of the ellipse that has noise applied to it.

        David HealeyD 1 Reply Last reply Reply Quote 0
        • David HealeyD
          David Healey @Chazrox
          last edited by

          @Chazrox This will probably be useful to you when Christoph merges it: https://github.com/christophhart/HISE/pull/936

          And maybe this one: https://github.com/christophhart/HISE/pull/943

          Free HISE Bootcamp Full Course for beginners.
          YouTube Channel - HISE tutorials
          My Patreon - More HISE tutorials

          ChazroxC 1 Reply Last reply Reply Quote 1
          • ChazroxC
            Chazrox @David Healey
            last edited by

            @David-Healey Niiice! 🕶 I can definitely think of some cool ways to use that already..

            1 Reply Last reply Reply Quote 0
            • ChazroxC
              Chazrox
              last edited by Chazrox

              Update:

              https://rox-knob-builder-for-hise.netlify.app/

              Just added the option to inherit 'obj.text' for 'Component Label' element. You can still set a text for mockup and placement in the designer ui but ticking the box will inherit obj.text on compile.

              Screenshot 2026-06-25 at 5.14.03 AM.png

              ILIAMI 1 Reply Last reply Reply Quote 2
              • ILIAMI
                ILIAM @Chazrox
                last edited by

                @Chazrox Thank you so muhc man, This is amazing,
                any chance we could have this Offline?

                ChazroxC 1 Reply Last reply Reply Quote 1
                • ChazroxC
                  Chazrox @ILIAM
                  last edited by

                  @ILIAM Possibly soon. 🙏 How are you liking the web version?

                  1 Reply Last reply Reply Quote 0
                  • T
                    thewind433
                    last edited by

                    @Chazrox said in NEW: Online Knob Builder for HISE!! by Me :):

                    https://rox-knob-builder-for-hise.netlify.app/

                    THANKS BROTHA

                    1 Reply Last reply Reply Quote 1
                    • C
                      ccbl
                      last edited by

                      Is it possible to do sliders? Or is that a future feature maybe?

                      ChazroxC 1 Reply Last reply Reply Quote 0
                      • ChazroxC
                        Chazrox @ccbl
                        last edited by

                        @ccbl Working on it. 👍

                        1 Reply Last reply Reply Quote 1
                        • A
                          Anhuarcin @Chazrox
                          last edited by

                          @Chazrox

                          I loved it! Are you planning to add a button creator as well?
                          MadeWithRoxKNFH_snapshot.png

                          const var MadeWithRoxKNFH = Content.createLocalLookAndFeel();
                          
                          MadeWithRoxKNFH.registerFunction("drawRotarySlider", function(g, obj)
                          {
                              var a = obj.area;
                              var range = obj.max - obj.min;
                              var stableSize = a[2] * (1.0 - 2.0 * 0.15);
                              var ox = a[0] + (a[2] - stableSize) / 2;
                              var oy = a[1] + (a[2] - stableSize) / 2;
                              var cx = ox + stableSize / 2;
                              var cy = oy + stableSize / 2;
                              var sw = stableSize / 200.0;
                              var startOffset = 2.5;
                              var totalSweep = 2.0 * startOffset;
                              var endOffset = -startOffset + totalSweep * (obj.value - obj.min) / range;
                          
                              // ============ COLOUR CONTROL ============
                              // -- Skirt --
                              var cSkirtFlat = 0xff121212;
                              var cSkirtHover = 0xffFFFFFF;
                              // -- Arc Track --
                              var cArcTrackOuter = 0x00000000;
                              var cArcTrackBackground = 0xff000000;
                              // -- Arc Value Basic --
                              var cArcBasicGlow = 0x4d007BFF;
                              var cArcBasicLow = 0xff004FA3;
                              var cArcBasicHigh = 0xff2D61C8;
                              // -- Body 1 --
                              var cFace1Top = 0xff555558;
                              var cFace1Bot = 0xff2A2A2E;
                              var cFace1Hover = 0xffFFFFFF;
                              var cFace1Outline = 0x4d000000;
                          
                              // -- skirt --
                              var skirtR = stableSize * 0.49;
                              var skirtcx = cx + 0 * sw;
                              var skirtcy = cy + 0 * sw;
                              g.setColour(cSkirtFlat);
                              g.fillEllipse([skirtcx - skirtR, skirtcy - skirtR, skirtR * 2, skirtR * 2]);
                              g.beginLayer(false);
                              g.setColour(cSkirtFlat);
                              g.fillEllipse([skirtcx - skirtR, skirtcy - skirtR, skirtR * 2, skirtR * 2]);
                              var skirtnp = Content.createPath();
                              skirtnp.addRoundedRectangle([skirtcx - skirtR, skirtcy - skirtR, skirtR * 2, skirtR * 2], skirtR);
                              g.applyMask(skirtnp, [skirtcx - skirtR, skirtcy - skirtR, skirtR * 2, skirtR * 2], false);
                              g.rotate(endOffset, [skirtcx, skirtcy]);
                              g.addNoise({"alpha": 0.03, "monochromatic": false, "area": [skirtcx - skirtR, skirtcy - skirtR, skirtR * 2, skirtR * 2]});
                              g.rotate(-endOffset, [skirtcx, skirtcy]);
                              g.endLayer();
                              if (obj.hover || obj.clicked) {
                                  g.setColour(Colours.withAlpha(cSkirtHover, 0.03));
                                  g.fillEllipse([skirtcx - skirtR, skirtcy - skirtR, skirtR * 2, skirtR * 2]);
                              }
                          
                              // -- ARC TRACK --
                              var trkW = 0.45 * 2;
                              var Ktrk = Content.createPath();
                              Ktrk.addArc([(1.0-trkW)/2, (1.0-trkW)/2, trkW, trkW], -startOffset, startOffset);
                              var arTrk = Ktrk.getBounds(stableSize); arTrk[0]+=ox; arTrk[1]+=oy + stableSize * 0;
                              g.setColour(cArcTrackOuter);
                              g.drawPath(Ktrk, arTrk, {Thickness: stableSize * 0.08 + 0 * sw, EndCapStyle: "rounded", JointStyle: "curved"});
                              g.setColour(cArcTrackBackground);
                              g.drawPath(Ktrk, arTrk, {Thickness: stableSize * 0.08, EndCapStyle: "rounded", JointStyle: "curved"});
                          
                              // -- ARC BASIC (gradient) --
                              var basW = 0.45 * 2;
                              var basR = stableSize * 0.45;
                              var Kbas = Content.createPath();
                              Kbas.addArc([(1.0-basW)/2, (1.0-basW)/2, basW, basW], -startOffset, endOffset);
                              var arBas = Kbas.getBounds(stableSize); arBas[0]+=ox; arBas[1]+=oy + stableSize * 0;
                              var basGlowW = stableSize * 0.08 + stableSize * 0.08 * 20 / 10;
                              g.setColour(cArcBasicGlow);
                              g.drawPath(Kbas, arBas, {Thickness: basGlowW, EndCapStyle: "rounded", JointStyle: "curved"});
                              var gx1 = cx + basR * Math.sin(-startOffset);
                              var gy1 = cy - basR * Math.cos(-startOffset) + stableSize * 0;
                              var gx2 = cx + basR * Math.sin(startOffset);
                              var gy2 = cy - basR * Math.cos(startOffset) + stableSize * 0;
                              g.setGradientFill([cArcBasicLow, gx1, gy1, cArcBasicHigh, gx2, gy2, false]);
                              g.drawPath(Kbas, arBas, {Thickness: stableSize * 0.08, EndCapStyle: "rounded", JointStyle: "curved"});
                          
                              // -- face1 --
                              var face1R = stableSize * 0.41;
                              var face1cx = cx + 0 * sw;
                              var face1cy = cy + 0 * sw;
                              g.setGradientFill([cFace1Top, face1cx, face1cy - face1R + (2 * face1R * (0.5 - 0.5)), cFace1Bot, face1cx, face1cy + face1R + (2 * face1R * (0.5 - 0.5)), false]);
                              g.fillEllipse([face1cx - face1R, face1cy - face1R, face1R * 2, face1R * 2]);
                              g.beginLayer(false);
                              g.setGradientFill([cFace1Top, face1cx, face1cy - face1R + (2 * face1R * (0.5 - 0.5)), cFace1Bot, face1cx, face1cy + face1R + (2 * face1R * (0.5 - 0.5)), false]);
                              g.fillEllipse([face1cx - face1R, face1cy - face1R, face1R * 2, face1R * 2]);
                              var face1np = Content.createPath();
                              face1np.addRoundedRectangle([face1cx - face1R, face1cy - face1R, face1R * 2, face1R * 2], face1R);
                              g.applyMask(face1np, [face1cx - face1R, face1cy - face1R, face1R * 2, face1R * 2], false);
                              g.rotate(endOffset, [face1cx, face1cy]);
                              g.addNoise({"alpha": 0.04, "monochromatic": false, "area": [face1cx - face1R, face1cy - face1R, face1R * 2, face1R * 2]});
                              g.rotate(-endOffset, [face1cx, face1cy]);
                              g.endLayer();
                              if (obj.hover || obj.clicked) {
                                  g.setColour(Colours.withAlpha(cFace1Hover, 0.07));
                                  g.fillEllipse([face1cx - face1R, face1cy - face1R, face1R * 2, face1R * 2]);
                              }
                              g.setColour(cFace1Outline);
                              g.drawEllipse([face1cx - face1R, face1cy - face1R, face1R * 2, face1R * 2], 1);
                          
                          });
                          
                          ChazroxC 1 Reply Last reply Reply Quote 1
                          • ChazroxC
                            Chazrox @Anhuarcin
                            last edited by

                            @Anhuarcin said in NEW: Online Knob Builder for HISE!! by Me :):

                            button creator

                            Glad you love it! Most definitely working buttons also. I'll let everyone know when thats done. 👍 Thanks for giving it a go! 🙏

                            1 Reply Last reply Reply Quote 2
                            • ChazroxC
                              Chazrox
                              last edited by

                              Pointer Grips?

                              Screenshot 2026-06-26 at 4.50.51 PM.png

                              1 Reply Last reply Reply Quote 1
                              • ChazroxC
                                Chazrox
                                last edited by Chazrox

                                I just pushed a couple of really cool updates!

                                Updates:

                                'Star Body' Layer Elements x 3

                                Screenshot 2026-06-26 at 7.41.04 PM.png

                                Fully Customizable Star knob shapes:
                                Screenshot 2026-06-26 at 7.43.38 PM.png

                                Examples in HISE:
                                Screenshot 2026-06-26 at 7.46.21 PM.png
                                Screenshot 2026-06-26 at 8.00.08 PM.png

                                'Pointer Grip' Layer Element
                                Screenshot 2026-06-26 at 7.41.21 PM.png

                                Pointer grip parameters:
                                Screenshot 2026-06-26 at 7.41.56 PM.png

                                Examples in HISE:
                                Screenshot 2026-06-26 at 4.50.51 PM.png
                                Screenshot 2026-06-26 at 4.46.15 PM.png

                                Enjoy!

                                Here's the link again:
                                https://rox-knob-builder-for-hise.netlify.app/

                                1 Reply Last reply Reply Quote 2
                                • resonantR
                                  resonant @Chazrox
                                  last edited by

                                  @Chazrox Phenomenal work! Thank you for this!

                                  ChazroxC 1 Reply Last reply Reply Quote 1
                                  • ChazroxC
                                    Chazrox @resonant
                                    last edited by

                                    @resonant Go buck! haha. You're welcome 🙏

                                    1 Reply Last reply Reply Quote 0
                                    • ChazroxC
                                      Chazrox
                                      last edited by Chazrox

                                      Just a warning...rotation is unstable at point counts around 12 and under. Im working on fixing this now. 🤔

                                      ChazroxC 1 Reply Last reply Reply Quote 1
                                      • ChazroxC
                                        Chazrox @Chazrox
                                        last edited by Chazrox

                                        STABLE!

                                        MyKnobLaf_snapshot (17).png

                                        StarKnobWickedFixed.gif
                                        You can truly get wicked now! 😎

                                        Knob Designer:
                                        https://rox-knob-builder-for-hise.netlify.app/

                                        Thank you @ustk for the low down on boundaries! 🙏 ⚡

                                        dannytaurusD 1 Reply Last reply Reply Quote 3
                                        • ChazroxC Chazrox marked this topic as a question
                                        • ChazroxC Chazrox has marked this topic as solved
                                        • ChazroxC Chazrox marked this topic as a regular topic
                                        • dannytaurusD
                                          dannytaurus @Chazrox
                                          last edited by

                                          @Chazrox Excellent work! 👏

                                          Meat Beats: https://meatbeats.com
                                          Klippr Video: https://klippr.video

                                          1 Reply Last reply Reply Quote 1
                                          • ChazroxC
                                            Chazrox
                                            last edited by Chazrox

                                            Major Update! :

                                            SVG's has entered the chat!

                                            KnobBuilderV2_SVG_2STEP.gif
                                            (I just noticed I knocked the svg a little off center but you get the point lol)

                                            You are now able to import your own SVG file and place it anywhere on the knob.
                                            Aside from free placement, you can also choose whether or not the image will rotate with knob or not.
                                            You can also shift the image around the knobs center to get some cool effects (heart examples shown below).

                                            The process for importing SVG's is easy.

                                            Step 1: Activate 'SVG BODY' layer element in the layers column to the left of the UI.
                                            Screenshot 2026-06-28 at 12.48.36 AM.png

                                            Step 2. Drop in your raw SVG file into the 'SVG Dropzone' (strictly for UI visual reference)
                                            Screenshot 2026-06-28 at 12.49.14 AM 2.png

                                            Step 3. Get 'HiseScript Path Number Array' with HISE's built in 'SVG to Path Converter'. Paste this into the second dropzone that accepts the HiseScript Path Number Array.
                                            Screenshot 2026-06-28 at 12.51.59 AM.png

                                            Make sure you use the right conversion or else your code will not work. This is the actual path that gets baked into your exported LAF function.
                                            Screenshot 2026-06-28 at 12.54.29 AM.png

                                            Paste Hise path number here:
                                            Screenshot 2026-06-28 at 12.49.14 AM.png

                                            From this point you can continue to design the rest of your knob!
                                            These are the available parameters for SVG layers.
                                            Screenshot 2026-06-28 at 1.28.26 AM.png

                                            Here's an example of how you can offset the SVG and get some unique results:
                                            SVG_Offset_Rotation_ExampleWorking.gif

                                            ENJOY!

                                            LINK:
                                            https://rox-knob-builder-for-hise.netlify.app/

                                            David HealeyD 1 Reply Last reply Reply Quote 3
                                            • First post
                                              Last post

                                            28

                                            Online

                                            2.4k

                                            Users

                                            13.9k

                                            Topics

                                            120.7k

                                            Posts