<?xml version='1.0' encoding='utf-8'?>
<MNPreset formatVersion="1"><metadata name="Guide - DAW Automation" description="Expose a native Scene knob and a shader zone, then record and replay them in a DAW." author="MNodes" category="Scene Studio" pluginVersion="1.1.5" createdAt="1790467200000" modifiedAt="1790467200000" type="Utility" preferredOpenMode="edit" tags="scene, tutorial, automation, zones" /><state><marionietoworld.MNodes_State gridActive="0" gridSize="20" viewOffsetX="12" viewOffsetY="48" zoom=".62" didInitView="1" toolbarExpanded="0" pv="1.1.5"><nodes nextId="18"><node id="1" type="visual.canvas.knob" title="Native Level" expanded="1" x="32" y="390" w="420" h="550"><state value="35" positionOut="0.0" min="0" max="100" log="0" unit=" %" default="0.5" decimals="2.0" step="0.0" units="1" x="24" y="48" size="32" rotation="0.0" opacity="1.0" label="Native Level" showValue="1" fine="1.0" accent="FF4FD1FF" body="FF171B26" edge="FF262C3A" trackColour="FF222838" textColour="FFE8ECF4" labelColour="FF8A93A6" textSize="12" labelSize="7" textWeight="1" textSpacing="0.0" textOffsetX="0.0" textOffsetY="0.0" labelOffsetX="0.0" labelOffsetY="0.0" textMaxWidth="72" labelMaxWidth="80" glow="0.07000000029802322" showRing="1" partBody="0.0" partPointer="0.0" appearanceRow="0.0" canvasOut="0.0" tooltip="" mouseOut="0.0" exposeToDAW="1" /></node><node id="2" type="visual.shadercode" title="Code - shader knob" expanded="1" x="492" y="390" w="420" h="550"><state file="" textsize="13.0" out="0.0" code="// Scene Studio knob. Edit STYLE, ACCENT, the cap or the ring here.&#10;// The ShaderAmount zone supplies dragging, keyboard focus and an output value.&#10;const int STYLE=5;&#10;const vec3 ACCENT=vec3(.3,.8,1.0);&#10;const float PI=3.14159265;&#10;float aa;&#10;float ink(float d){return 1.0-smoothstep(-aa,aa,d);}&#10;float line(vec2 p,vec2 a,vec2 b){vec2 q=p-a,v=b-a;return length(q-v*clamp(dot(q,v)/dot(v,v),0.0,1.0));}&#10;vec3 hue(float h){return .55+.45*cos(6.283185*(h+vec3(0.0,.33,.67)));}&#10;void mainImage(out vec4 fragColor,in vec2 p){&#10;    vec2 center=zoneCenter(ShaderAmount);&#10;    float radius=min(zoneSize(ShaderAmount).x,zoneSize(ShaderAmount).y)*.46;&#10;    vec2 q=(p-center)/radius;float r=length(q),angle=atan(q.x,q.y);&#10;    aa=1.0/max(radius*mnPixelScale,1.0);&#10;    float value=zoneValue(ShaderAmount),held=zonePressed(ShaderAmount),hover=zoneHover(ShaderAmount);&#10;    float time=0.0;&#10;    float t=(angle+2.356194)/4.712389;&#10;    float range=step(0.0,t)*step(t,1.0),litArc=range*step(t,value);&#10;    vec3 tint=ACCENT;&#10;    if(STYLE==9||STYLE==11||STYLE==13)tint=hue(t*.55+time*.075);&#10;    vec3 col=vec3(.035,.045,.065);&#10;    col+=tint*.035*exp(-r*r*1.7);&#10;    float ring=abs(r-.94)-.026;&#10;    float segments=1.0;&#10;    if(STYLE==3||STYLE==11)segments=smoothstep(.08,.18,fract(t*40.0))*(1.0-smoothstep(.85,.98,fract(t*40.0)));&#10;    col=mix(col,vec3(.15,.18,.22),ink(ring)*range*segments);&#10;    col=mix(col,tint*(1.0+.3*held),ink(ring)*litArc*segments);&#10;    if(STYLE==4||STYLE&gt;=8)col+=tint*.22*exp(-abs(ring)*36.0)*litArc;&#10;    float capRadius=.77;&#10;    float turn=-2.356194+value*4.712389;&#10;    float localAngle=angle-turn;&#10;    if(STYLE==2)capRadius=.735+.028*cos(localAngle*12.0);&#10;    float cap=ink(r-capRadius);&#10;    vec3 body=mix(vec3(.065,.085,.12),vec3(.19,.22,.28),clamp(q.y*.6+.45,0.0,1.0));&#10;    if(STYLE==0)body=vec3(.86,.87,.83)*(.8+.13*q.y)-vec3(.06)*r;&#10;    if(STYLE==1)body=vec3(.55,.35,.12)*(.6+.6*pow(abs(cos(angle+.5)),12.0))+.13*sin(r*210.0);&#10;    if(STYLE==2)body=vec3(.07,.065,.10)+tint*.10*(.5+.5*cos(localAngle*12.0))+.10*pow(max(0.0,q.y*.6-q.x*.3),3.0);&#10;    if(STYLE==3)body=vec3(.055,.075,.07);&#10;    if(STYLE==4)body=vec3(.07,.05,.11)+vec3(.10,.05,.17)*q.y;&#10;    if(STYLE==5){body=vec3(.04,.12,.15)+tint*.12*(q.y+.7);body+=vec3(.35)*exp(-pow(length(q-vec2(-.23,.35))/.2,2.0));body+=tint*.14*exp(-abs(r-.62)*35.0);}&#10;    if(STYLE==6)body=vec3(.055)+.022*sin(r*220.0)+tint*.22*ink(r-.29);&#10;    if(STYLE==7)body=vec3(.095,.13,.14);&#10;    if(STYLE==8){float wave=sin(q.x*6.0+time*.9)+cos(q.y*8.0-time*.7)+sin((q.x+q.y)*7.0-time*.4);body=hue(wave*.16+time*.04)*(.20+.20*r);}&#10;    if(STYLE==9)body=vec3(.035,.065,.09)+hue(q.y*.7+time*.08)*.24*pow(.5+.5*sin(q.x*5.0+q.y*3.0+time*.5),3.0);&#10;    if(STYLE==10)body=vec3(.06,.055,.12)+tint*.06*cos(r*30.0);&#10;    if(STYLE==11)body=vec3(.08,.05,.10)+hue(floor(angle*5.0)/5.0+time*.06)*.16;&#10;    if(STYLE==12){float fire=pow(.5+.5*sin(angle*7.0+r*18.0-time*1.5),4.0);body=vec3(.15,.045,.015)+vec3(.8,.18,.025)*fire*r*.8;}&#10;    if(STYLE==13)body=vec3(.045,.05,.12)+hue(angle/6.28+r*.8-time*.06)*.22*pow(.5+.5*sin(angle*4.0+r*24.0-time),3.0);&#10;    col=mix(col,body,cap);&#10;    col+=vec3(.25)*ink(abs(r-capRadius)-.006)*clamp(q.y+.25,0.0,1.0);&#10;    if(STYLE==7||STYLE==3){float tick=ink(abs(r-.84)-.017)*step(.8,cos(angle*48.0));col+=tint*.55*tick;}&#10;    if(STYLE==10){&#10;        for(int i=0;i&lt;3;++i){float a=time*(.28+float(i)*.12)+float(i)*2.0944;vec2 at=vec2(sin(a),cos(a))*(.55-float(i)*.08);float orb=length(q-at)-.026;col+=hue(float(i)*.25)*(.7*ink(orb)+.14*exp(-abs(orb)*35.0));}&#10;    }&#10;    vec2 dir=vec2(sin(-2.356194+value*4.712389),cos(-2.356194+value*4.712389));&#10;    float pointer=line(q,dir*.36,dir*.65)-.021;&#10;    vec3 pointerColour=STYLE==0?vec3(.12,.20,.22):vec3(.93,.96,1.0);&#10;    col=mix(col,pointerColour,ink(pointer));&#10;    col+=tint*.08*hover*ink(r-.74);&#10;    col=mix(col,STYLE==0?vec3(.15,.20,.22):vec3(.82,.88,.93),drawNumber(p,zoneOutput(ShaderAmount),2,center+vec2(0.0,-radius*.3),radius*.18,.5));&#10;    col=mix(col,vec3(.68,.74,.81),labelText(p,0,vec2(iResolution.x*0.2400,iResolution.y*0.8400),iResolution.y*0.0260,.5));&#10;    col=mix(col,vec3(.68,.74,.81),labelText(p,1,vec2(iResolution.x*0.7500,iResolution.y*0.8400),iResolution.y*0.0260,.5));&#10;    col=mix(col,vec3(.68,.74,.81),labelText(p,2,vec2(iResolution.x*0.5000,iResolution.y*0.0800),iResolution.y*0.0220,.5));&#10;    fragColor=vec4(col,1.0);&#10;}&#10;" live="1" /></node><node id="3" type="visual.gpucanvas" title="Automation lesson" expanded="1" x="1010" y="390" w="720" h="820"><state in="0.0" inb="0.0" codein="0.0" zonesin="0.0" setrow="0.0" scriptin="0.0" editObjects="0" appearanceRow="0.0" pcount="1" speed="1.0" p1="0.0" p2="0.0" p3="0.0" p4="0.0" p5="0.0" p6="0.0" p7="0.0" p8="0.0" mousex="0.5" mousey="0.5" wheel="0.0" dragx="0.0" dragy="0.0" imouse="0 0 0 0" code="" zones="[{&quot;id&quot;: 1, &quot;name&quot;: &quot;ShaderAmount&quot;, &quot;type&quot;: &quot;knob&quot;, &quot;shape&quot;: &quot;circle&quot;, &quot;x&quot;: 0.59, &quot;y&quot;: 0.28, &quot;w&quot;: 0.32, &quot;h&quot;: 0.48, &quot;min&quot;: 0, &quot;max&quot;: 100, &quot;default&quot;: 62, &quot;unit&quot;: &quot; %&quot;, &quot;decimals&quot;: 1}]" zonevalues="" labels="NATIVE OBJECT&#10;SHADER + ZONE&#10;Drag vertically. Hold Shift for a smaller change." image1="" image2="" fontFile="" preserveBuffers="0" resolution="0" framerate="1" transparent="0" background="FF0F131A" keyboard="0" zoneinputs="1" showOrientation="0" showObjectAxes="0" visible="1" ignoreClicks="0" panelX="0.0" panelY="0.0" panelW="0.0" panelH="0.0" tooltipStyle="1" exposeToDAW="1" /></node><node id="4" type="visual.canvas.text" title="Shader value readout" expanded="0" x="32" y="1000" w="420" h="280"><state units="1" x="75" y="79" size="3" rotation="0.0" opacity="1.0" text="62.0" align="1" baseline="0" decimals="1" textSpacing="0.0" textMaxWidth="0.0" colour="ff99d7ef" glow="0.0" glowColour="FFFFFFFF" shadowColour="00000000" shadowX="0.0" shadowY="4.0" shadowBlur="12.0" blur="0.0" blend="0" trail="0.0" appearanceRow="0.0" canvasOut="0.0" tooltip="" mouseOut="0.0" /></node><node id="5" type="comment" title="Comment" expanded="0" x="32" y="16" w="1690" h="50"><state text="Guide - DAW Automation" fontSize="32" fontWeight="3" align="0" textColour="ffe5ecee" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="6" type="comment" title="Comment" expanded="0" x="32" y="86" w="548" h="32"><state text="1 / Open inside a DAW" fontSize="21" fontWeight="3" align="0" textColour="ff80d9de" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="7" type="comment" title="Comment" expanded="0" x="32" y="121" w="548" h="103"><state text="Use the VST3 instrument. Standalone has no DAW automation lanes. Switch between Edit for the wiring and Perform for the finished controls." fontSize="17" fontWeight="1" align="0" textColour="ffcad5d9" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="8" type="comment" title="Comment" expanded="0" x="608" y="86" w="548" h="32"><state text="2 / Native object" fontSize="21" fontWeight="3" align="0" textColour="ff80d9de" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="9" type="comment" title="Comment" expanded="0" x="608" y="121" w="548" h="103"><state text="Select Native Level. In its settings, Expose to DAW is already on. Value is 0..100; Position is 0..1. Connect Value to the sound parameter you want to control." fontSize="17" fontWeight="1" align="0" textColour="ffcad5d9" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="10" type="comment" title="Comment" expanded="0" x="1184" y="86" w="548" h="32"><state text="3 / Shader control" fontSize="21" fontWeight="3" align="0" textColour="ff80d9de" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="11" type="comment" title="Comment" expanded="0" x="1184" y="121" w="548" h="103"><state text="Select Automation lesson. Expose to DAW is on here too. The Shader Code draws the knob; the ShaderAmount zone handles gestures and stores its value. A drawing alone is not an automatable parameter." fontSize="17" fontWeight="1" align="0" textColour="ffcad5d9" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="12" type="comment" title="Comment" expanded="0" x="32" y="228" w="548" h="32"><state text="4 / Record and play back" fontSize="21" fontWeight="3" align="0" textColour="ff80d9de" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="13" type="comment" title="Comment" expanded="0" x="32" y="263" w="548" h="103"><state text="Open the DAW parameter list. Find Native Level and ShaderAmount, enable automation recording, then move each knob. On playback both pictures follow the automation. The visible ShaderAmount cable also updates its numeric readout." fontSize="17" fontWeight="1" align="0" textColour="ffcad5d9" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="14" type="comment" title="Comment" expanded="0" x="608" y="228" w="548" h="32"><state text="5 / External control" fontSize="21" fontWeight="3" align="0" textColour="ff80d9de" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="15" type="comment" title="Comment" expanded="0" x="608" y="263" w="548" h="103"><state text="Zone Inputs is on: ShaderAmount also has an input for values in 0..100. For shader P1..P8, connect the Value of an exposed native control to that P input. For a Shader node, expose the source control the same way." fontSize="17" fontWeight="1" align="0" textColour="ffcad5d9" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="16" type="comment" title="Comment" expanded="0" x="1184" y="228" w="548" h="32"><state text="6 / Keep sessions stable" fontSize="21" fontWeight="3" align="0" textColour="ff80d9de" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="17" type="comment" title="Comment" expanded="0" x="1184" y="263" w="548" h="103"><state text="MNodes offers 128 automation slots. XY zones use two, one per axis. Finish zone IDs, names and order before recording: adding/removing zones can reassign slots. Save the project with the DAW session." fontSize="17" fontWeight="1" align="0" textColour="ffcad5d9" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node></nodes><edges><e fn="1" fp="100" tn="3" tp="6" /><e fn="2" fp="0" tn="3" tp="2" /><e fn="3" fp="202" tn="4" tp="16" /><e fn="4" fp="100" tn="3" tp="6" /></edges><panel width="900" height="600" locked="1" zoom="1" performScale="1" gridEnabled="0" toolbarExpanded="0" panelBgColour="ff101820"><entry nodeId="3" x="0" y="0" w="900" h="600" z="0" auto="0" /></panel></marionietoworld.MNodes_State></state></MNPreset>