Browse Source

updated help files and made code for loading files backwards compatible

Jonathan Higgins 5 months ago
parent
commit
7e6cb1efdf

+ 111 - 59
examples/automation.thd

@@ -1,49 +1,31 @@
 {
 {
 	"connections": [
 	"connections": [
 		{
 		{
-			"from_node_id": 2,
+			"from_node_id": 1,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 1,
+			"to_node_id": 4,
 			"to_port": 0
 			"to_port": 0
 		},
 		},
 		{
 		{
-			"from_node_id": 1,
+			"from_node_id": 4,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 6,
+			"to_node_id": 5,
 			"to_port": 0
 			"to_port": 0
 		},
 		},
 		{
 		{
-			"from_node_id": 6,
+			"from_node_id": 5,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 3,
+			"to_node_id": 6,
 			"to_port": 0
 			"to_port": 0
 		}
 		}
 	],
 	],
 	"nodes": [
 	"nodes": [
 		{
 		{
-			"command": "modify_speed_2",
-			"id": 1,
-			"name": "modify_speed_2",
-			"notes": {
+			"checkbutton_states": {
 
 
 			},
 			},
-			"offset": {
-				"x": 591.5556640625,
-				"y": 80.6666870117188
-			},
-			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
-					"editable": true,
-					"meta": {
-						"brk": true
-					},
-					"value": 0.0
-				}
-			}
-		},
-		{
 			"command": "inputfile",
 			"command": "inputfile",
-			"id": 2,
+			"id": 1,
 			"name": "inputfile",
 			"name": "inputfile",
 			"notes": {
 			"notes": {
 
 
@@ -52,8 +34,12 @@
 				"x": 110.444465637207,
 				"x": 110.444465637207,
 				"y": 80.0
 				"y": 80.0
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@4895": 1,
+				"@OptionButton@4936": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@5578/@MarginContainer@5618/Tree/@Popup@5604/@VBoxContainer@5605/@HSlider@5613": {
+				"AudioPlayer/FileDialog/@VBoxContainer@4883/@MarginContainer@4923/Tree/@Popup@4909/@VBoxContainer@4910/@HSlider@4918": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -63,29 +49,11 @@
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "outputfile",
-			"id": 3,
-			"name": "outputfile",
-			"notes": {
+			"checkbutton_states": {
 
 
 			},
 			},
-			"offset": {
-				"x": 1353.22216796875,
-				"y": 81.2222213745117
-			},
-			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@5687/@MarginContainer@5727/Tree/@Popup@5713/@VBoxContainer@5714/@HSlider@5722": {
-					"editable": true,
-					"meta": {
-
-					},
-					"value": 0.0
-				}
-			}
-		},
-		{
 			"command": "notes",
 			"command": "notes",
-			"id": 4,
+			"id": 2,
 			"name": "notes2",
 			"name": "notes2",
 			"notes": {
 			"notes": {
 				"CodeEdit": "When automation is applied the slider will lock and its value cannot be changed.\n\nAutomation can be edited or removed by right clicking on a locked slider.\n\nGrainsize~ already has some automation applied, right click it to edit the automation."
 				"CodeEdit": "When automation is applied the slider will lock and its value cannot be changed.\n\nAutomation can be edited or removed by right clicking on a locked slider.\n\nGrainsize~ already has some automation applied, right click it to edit the automation."
@@ -93,14 +61,20 @@
 			"offset": {
 			"offset": {
 				"x": 924.000183105469,
 				"x": 924.000183105469,
 				"y": 451.000091552734
 				"y": 451.000091552734
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
-			"id": 5,
+			"id": 3,
 			"name": "notes",
 			"name": "notes",
 			"notes": {
 			"notes": {
 				"CodeEdit": "Parametes with a tilde (~) next to their name can have automation applied to them to change their value over time.\n\nRight click on the Semitones~ slider to apply automation to that parameter.\n\nIn the automation window, automation timings (% of input file) are on the x axis and the value change is on the y axis. "
 				"CodeEdit": "Parametes with a tilde (~) next to their name can have automation applied to them to change their value over time.\n\nRight click on the Semitones~ slider to apply automation to that parameter.\n\nIn the automation window, automation timings (% of input file) are on the x axis and the value change is on the y axis. "
@@ -108,47 +82,125 @@
 			"offset": {
 			"offset": {
 				"x": 515.777954101563,
 				"x": 515.777954101563,
 				"y": 452.222320556641
 				"y": 452.222320556641
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
+			"command": "modify_speed_2",
+			"id": 4,
+			"name": "modify_speed_2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 591.5556640625,
+				"y": 79.5555725097656
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+				"Semitones/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": -12.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
 			"command": "modify_brassage_4",
 			"command": "modify_brassage_4",
-			"id": 6,
+			"id": 5,
 			"name": "modify_brassage_4",
 			"name": "modify_brassage_4",
 			"notes": {
 			"notes": {
 
 
 			},
 			},
 			"offset": {
 			"offset": {
 				"x": 957.000244140625,
 				"x": 957.000244140625,
-				"y": 80.6666870117188
+				"y": 79.5555725097656
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"Grainsize/HSplitContainer/HSlider": {
 					"editable": false,
 					"editable": false,
 					"meta": {
 					"meta": {
 						"brk": true,
 						"brk": true,
 						"brk_data": [
 						"brk_data": [
-							"(0.0, 231.0)",
+							"(0.0, 105.0)",
 							"(700.0, 128.0)",
 							"(700.0, 128.0)",
-							"(123.0, 253.0)",
-							"(170.0, 105.0)",
-							"(342.0, 251.0)",
-							"(552.0, 250.0)"
-						]
+							"(77.0, 212.0)",
+							"(171.0, 246.0)",
+							"(405.0, 163.0)",
+							"(585.0, 243.0)",
+							"(313.0, 236.0)"
+						],
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
 					"value": 10.0
 					"value": 10.0
 				},
 				},
-				"VBoxContainer2/HSplitContainer/HSlider": {
+				"Range/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 						"brk": true,
 						"brk": true,
-						"flag": "-r"
+						"flag": "-r",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
 					"value": 2500.0
 					"value": 2500.0
 				}
 				}
 			}
 			}
+		},
+		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
+			"command": "outputfile",
+			"id": 6,
+			"name": "outputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1353.22216796875,
+				"y": 79.0
+			},
+			"optionbutton_values": {
+				"@OptionButton@5004": 1,
+				"@OptionButton@5045": 0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@4992/@MarginContainer@5032/Tree/@Popup@5018/@VBoxContainer@5019/@HSlider@5027": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
 		}
 		}
 	]
 	]
 }
 }

+ 116 - 28
examples/building_a_thread.thd

@@ -39,6 +39,9 @@
 	],
 	],
 	"nodes": [
 	"nodes": [
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "inputfile",
 			"command": "inputfile",
 			"id": 1,
 			"id": 1,
 			"name": "inputfile",
 			"name": "inputfile",
@@ -49,8 +52,12 @@
 				"x": 20.0,
 				"x": 20.0,
 				"y": 80.0
 				"y": 80.0
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@3423": 1,
+				"@OptionButton@3464": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@2996/@MarginContainer@3036/Tree/@Popup@3022/@VBoxContainer@3023/@HSlider@3031": {
+				"AudioPlayer/FileDialog/@VBoxContainer@3411/@MarginContainer@3451/Tree/@Popup@3437/@VBoxContainer@3438/@HSlider@3446": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -60,6 +67,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "modify_brassage_5",
 			"command": "modify_brassage_5",
 			"id": 2,
 			"id": 2,
 			"name": "modify_brassage_5",
 			"name": "modify_brassage_5",
@@ -69,18 +79,28 @@
 			"offset": {
 			"offset": {
 				"x": 481.111206054688,
 				"x": 481.111206054688,
 				"y": 80.0000152587891
 				"y": 80.0000152587891
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"Density/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 0.4
+					"value": 0.6
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "distort_interpolate",
 			"command": "distort_interpolate",
 			"id": 3,
 			"id": 3,
 			"name": "distort_interpolate",
 			"name": "distort_interpolate",
@@ -90,18 +110,28 @@
 			"offset": {
 			"offset": {
 				"x": 818.889099121094,
 				"x": 818.889099121094,
 				"y": 80.0000152587891
 				"y": 80.0000152587891
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"Multiplier/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
 					"value": 2.0
 					"value": 2.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "filter_bank_5",
 			"command": "filter_bank_5",
 			"id": 4,
 			"id": 4,
 			"name": "filter_bank_5",
 			"name": "filter_bank_5",
@@ -111,53 +141,85 @@
 			"offset": {
 			"offset": {
 				"x": 1165.55578613281,
 				"x": 1165.55578613281,
 				"y": 78.8889083862305
 				"y": 78.8889083862305
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"HighestBand/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": false,
+						"flag": "",
+						"max": true,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 400.0
+					"value": 3520.0
 				},
 				},
-				"VBoxContainer2/HSplitContainer/HSlider": {
+				"LowestBand/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": true,
+						"time": false
 					},
 					},
-					"value": 1.0
+					"value": 110.0
 				},
 				},
-				"VBoxContainer3/HSplitContainer/HSlider": {
+				"MakeupGain/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 110.0
+					"value": 1.5
 				},
 				},
-				"VBoxContainer4/HSplitContainer/HSlider": {
+				"NumberofFilters/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 1600.0
+					"value": 10.0
 				},
 				},
-				"VBoxContainer5/HSplitContainer/HSlider": {
+				"Q/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 10.0
+					"value": 400.0
 				},
 				},
-				"VBoxContainer6/HSplitContainer/HSlider": {
+				"Scatter/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"flag": "-s"
+						"brk": false,
+						"flag": "-s",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 0.1
+					"value": 0.03
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
 			"command": "outputfile",
 			"command": "outputfile",
 			"id": 5,
 			"id": 5,
 			"name": "outputfile",
 			"name": "outputfile",
@@ -168,8 +230,12 @@
 				"x": 1524.44445800781,
 				"x": 1524.44445800781,
 				"y": 78.8888931274414
 				"y": 78.8888931274414
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@3592": 1,
+				"@OptionButton@3633": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@3105/@MarginContainer@3145/Tree/@Popup@3131/@VBoxContainer@3132/@HSlider@3140": {
+				"AudioPlayer/FileDialog/@VBoxContainer@3580/@MarginContainer@3620/Tree/@Popup@3606/@VBoxContainer@3607/@HSlider@3615": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -179,6 +245,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "modify_speed_2",
 			"command": "modify_speed_2",
 			"id": 6,
 			"id": 6,
 			"name": "modify_speed_2",
 			"name": "modify_speed_2",
@@ -188,33 +257,49 @@
 			"offset": {
 			"offset": {
 				"x": 818.889099121094,
 				"x": 818.889099121094,
 				"y": 244.44450378418
 				"y": 244.44450378418
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"Semitones/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
 					"value": -12.0
 					"value": -12.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 7,
 			"id": 7,
 			"name": "notes",
 			"name": "notes",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Multiple nodes can be combined to create a thread.\n\nThey will be run in the order that they are connected in your thread.\n\nNote: all nodes must have a route to and from \"Input File\" and \"Output File\" to run. Anything not connected will be ignored."
+				"CodeEdit": "Multiple nodes can be combined to create a thread.\n\nThey will be run in the order that they are connected in your thread.\n\nNote: all nodes must have a route to and from an input and \"Output File\" to run. Anything not connected will be ignored."
 			},
 			},
 			"offset": {
 			"offset": {
 				"x": 553.333435058594,
 				"x": 553.333435058594,
 				"y": 573.333435058594
 				"y": 573.333435058594
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 8,
 			"id": 8,
 			"name": "notes2",
 			"name": "notes2",
@@ -224,6 +309,9 @@
 			"offset": {
 			"offset": {
 				"x": 1004.44464111328,
 				"x": 1004.44464111328,
 				"y": 573.333435058594
 				"y": 573.333435058594
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 

+ 177 - 81
examples/frequency_domain.thd

@@ -13,44 +13,47 @@
 			"to_port": 0
 			"to_port": 0
 		},
 		},
 		{
 		{
-			"from_node_id": 6,
+			"from_node_id": 10,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 5,
+			"to_node_id": 11,
 			"to_port": 0
 			"to_port": 0
 		},
 		},
 		{
 		{
-			"from_node_id": 5,
+			"from_node_id": 11,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 4,
+			"to_node_id": 12,
 			"to_port": 0
 			"to_port": 0
 		},
 		},
 		{
 		{
 			"from_node_id": 2,
 			"from_node_id": 2,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 7,
+			"to_node_id": 4,
 			"to_port": 0
 			"to_port": 0
 		},
 		},
 		{
 		{
 			"from_node_id": 2,
 			"from_node_id": 2,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 6,
+			"to_node_id": 10,
 			"to_port": 0
 			"to_port": 0
 		},
 		},
 		{
 		{
-			"from_node_id": 7,
+			"from_node_id": 4,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 8,
+			"to_node_id": 9,
 			"to_port": 0
 			"to_port": 0
 		},
 		},
 		{
 		{
-			"from_node_id": 8,
+			"from_node_id": 9,
 			"from_port": 0,
 			"from_port": 0,
-			"to_node_id": 4,
+			"to_node_id": 12,
 			"to_port": 0
 			"to_port": 0
 		}
 		}
 	],
 	],
 	"nodes": [
 	"nodes": [
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "inputfile",
 			"command": "inputfile",
 			"id": 1,
 			"id": 1,
 			"name": "inputfile",
 			"name": "inputfile",
@@ -61,8 +64,12 @@
 				"x": 20.0,
 				"x": 20.0,
 				"y": 80.0
 				"y": 80.0
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@4557": 1,
+				"@OptionButton@4598": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@3995/@MarginContainer@4035/Tree/@Popup@4021/@VBoxContainer@4022/@HSlider@4030": {
+				"AudioPlayer/FileDialog/@VBoxContainer@4545/@MarginContainer@4585/Tree/@Popup@4571/@VBoxContainer@4572/@HSlider@4580": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -72,6 +79,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "spectstr_stretch",
 			"command": "spectstr_stretch",
 			"id": 2,
 			"id": 2,
 			"name": "spectstr_stretch",
 			"name": "spectstr_stretch",
@@ -81,32 +91,50 @@
 			"offset": {
 			"offset": {
 				"x": 785.555725097656,
 				"x": 785.555725097656,
 				"y": 80.0000152587891
 				"y": 80.0000152587891
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"D-Random/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 3.001
+					"value": 0.0
 				},
 				},
-				"VBoxContainer2/HSplitContainer/HSlider": {
+				"D-Ratio/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
 					"value": 0.0
 					"value": 0.0
 				},
 				},
-				"VBoxContainer3/HSplitContainer/HSlider": {
+				"StretchMultiplier/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 0.0
+					"value": 4.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "pvoc_anal_1",
 			"command": "pvoc_anal_1",
 			"id": 3,
 			"id": 3,
 			"name": "pvoc_anal_1",
 			"name": "pvoc_anal_1",
@@ -116,162 +144,230 @@
 			"offset": {
 			"offset": {
 				"x": 466.666778564453,
 				"x": 466.666778564453,
 				"y": 80.0000152587891
 				"y": 80.0000152587891
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "outputfile",
+			"checkbutton_states": {
+
+			},
+			"command": "blur_blur",
 			"id": 4,
 			"id": 4,
-			"name": "outputfile",
+			"name": "blur_blur",
 			"notes": {
 			"notes": {
 
 
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1795.5556640625,
-				"y": 79.0000076293945
+				"x": 1115.74475097656,
+				"y": 223.444488525391
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@4104/@MarginContainer@4144/Tree/@Popup@4130/@VBoxContainer@4131/@HSlider@4139": {
+				"Blurring/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 0.0
+					"value": 150.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "pvoc_synth",
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
 			"id": 5,
 			"id": 5,
-			"name": "pvoc_synth",
+			"name": "notes",
 			"notes": {
 			"notes": {
-
+				"CodeEdit": "The \"Frequency Domain\" (PVOC) processes allow you to perform unique transformations to a sound. Load a file into \"Input File\" to test it out.\n\nThese processes work by manipulating FFT analysis files of the audio and as such your audio must first be analysed using \"PVOC: Analyse\"."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1448.18920898438,
-				"y": 79.2222518920898
+				"x": 30.4112148284912,
+				"y": 488.666778564453
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "hilite_trace_1",
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
 			"id": 6,
 			"id": 6,
-			"name": "hilite_trace_1",
+			"name": "notes2",
 			"notes": {
 			"notes": {
-
+				"CodeEdit": "This enables processing that is difficult/impossible to do in the time domain. \n\nE.g. PVOC: Stretch allows extreme time stretching without changing pitch."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1117.77807617188,
-				"y": 78.7777938842773
+				"x": 481.411315917969,
+				"y": 493.5556640625
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
-					"editable": true,
-					"meta": {
-						"brk": true
-					},
-					"value": 4.0
-				}
+
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "blur_blur",
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
 			"id": 7,
 			"id": 7,
-			"name": "blur_blur",
+			"name": "notes4",
 			"notes": {
 			"notes": {
-
+				"CodeEdit": "You can use both Time Domain and Frequency Domain processes in the same Thread. You just need to convert between the two using \"PVOC: Analyse\" and \"PVOC: Resynthesise\".\n\nTime domain inputs and outputs are white and Frequency Domain inputs and outputs are black."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1115.74475097656,
-				"y": 223.444488525391
+				"x": 1376.078125,
+				"y": 492.333435058594
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
-					"editable": true,
-					"meta": {
-						"brk": true
-					},
-					"value": 300.0
-				}
+
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "pvoc_synth",
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
 			"id": 8,
 			"id": 8,
-			"name": "pvoc_synth2",
+			"name": "notes3",
 			"notes": {
 			"notes": {
-
+				"CodeEdit": "Frequency Domain PVOC signals can be split but they cannot be mixed directly, if you want to mix the signals you will need to convert them back using \"PVOC: Resynthesise\".\n\nThis process will take the analysis files that PVOC uses and turn it back into audio."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1445.74475097656,
-				"y": 224.666732788086
+				"x": 931.189208984375,
+				"y": 491.111206054688
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "notes",
+			"checkbutton_states": {
+
+			},
+			"command": "pvoc_synth",
 			"id": 9,
 			"id": 9,
-			"name": "notes",
+			"name": "pvoc_synth2",
 			"notes": {
 			"notes": {
-				"CodeEdit": "The \"Frequency Domain\" processes allow you to perform unique transformations to a sound. Load a file into \"Input File\" to test it out.\n\nThese processes work by manipulating FFT analysis files of the audio and as such your audio must first be analysed using \"PVOC: Analyse\"."
+
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 30.4112148284912,
-				"y": 488.666778564453
+				"x": 1445.74475097656,
+				"y": 223.555618286133
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "notes",
+			"checkbutton_states": {
+
+			},
+			"command": "hilite_trace_1",
 			"id": 10,
 			"id": 10,
-			"name": "notes2",
+			"name": "hilite_trace_1",
 			"notes": {
 			"notes": {
-				"CodeEdit": "This enables processing that is difficult/impossible to do in the time domain. \n\nE.g. PVOC: Stretch allows extreme time stretching without changing pitch."
+
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 481.411315917969,
-				"y": 493.5556640625
+				"x": 1115.55590820313,
+				"y": 79.8889007568359
 			},
 			},
-			"slider_values": {
+			"optionbutton_values": {
 
 
+			},
+			"slider_values": {
+				"AmountKept/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 16.0
+				}
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "notes",
+			"checkbutton_states": {
+
+			},
+			"command": "pvoc_synth",
 			"id": 11,
 			"id": 11,
-			"name": "notes4",
+			"name": "pvoc_synth",
 			"notes": {
 			"notes": {
-				"CodeEdit": "You can use both Time Domain and Frequency Domain processes in the same Thread. You just need to convert between the two using \"PVOC: Analyse\" and \"PVOC: Resynthesise\".\n\nTime domain inputs and outputs are white and Frequency Domain inputs and outputs are black."
+
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1376.078125,
-				"y": 492.333435058594
+				"x": 1448.18920898438,
+				"y": 80.333366394043
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "notes",
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
+			"command": "outputfile",
 			"id": 12,
 			"id": 12,
-			"name": "notes3",
+			"name": "outputfile",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Frequency Domain PVOC signals can be split but they cannot be mixed directly, if you want to mix the signals you will need to convert them back using \"PVOC: Resynthesise\".\n\nThis process will take the analysis files that PVOC uses and turn it back into audio."
+
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 931.189208984375,
-				"y": 491.111206054688
+				"x": 1795.5556640625,
+				"y": 80.1111221313477
+			},
+			"optionbutton_values": {
+				"@OptionButton@4693": 1,
+				"@OptionButton@4734": 0
 			},
 			},
 			"slider_values": {
 			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@4681/@MarginContainer@4721/Tree/@Popup@4707/@VBoxContainer@4708/@HSlider@4716": {
+					"editable": true,
+					"meta": {
 
 
+					},
+					"value": 0.0
+				}
 			}
 			}
 		}
 		}
 	]
 	]

+ 56 - 6
examples/getting_started.thd

@@ -2,6 +2,9 @@
 	"connections": [],
 	"connections": [],
 	"nodes": [
 	"nodes": [
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 1,
 			"id": 1,
 			"name": "notes2",
 			"name": "notes2",
@@ -11,12 +14,18 @@
 			"offset": {
 			"offset": {
 				"x": 530.0,
 				"x": 530.0,
 				"y": 595.555541992188
 				"y": 595.555541992188
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 2,
 			"id": 2,
 			"name": "notes3",
 			"name": "notes3",
@@ -26,27 +35,39 @@
 			"offset": {
 			"offset": {
 				"x": 992.22216796875,
 				"x": 992.22216796875,
 				"y": 596.666687011719
 				"y": 596.666687011719
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 3,
 			"id": 3,
 			"name": "notes",
 			"name": "notes",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Welcome to SoundThread!\n\nTo get started, load a sound file into \"Input File\"\n\nIt supports a mono or stereo .wav file."
+				"CodeEdit": "Welcome to SoundThread!\n\nTo get started, load a sound file into \"Input File\"\n\nIt supports a mono or stereo .wav files."
 			},
 			},
 			"offset": {
 			"offset": {
 				"x": 70.0,
 				"x": 70.0,
 				"y": 596.666687011719
 				"y": 596.666687011719
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 4,
 			"id": 4,
 			"name": "notes4",
 			"name": "notes4",
@@ -56,12 +77,20 @@
 			"offset": {
 			"offset": {
 				"x": 1461.0654296875,
 				"x": 1461.0654296875,
 				"y": 593.270690917969
 				"y": 593.270690917969
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
 			"command": "outputfile",
 			"command": "outputfile",
 			"id": 5,
 			"id": 5,
 			"name": "outputfile",
 			"name": "outputfile",
@@ -72,8 +101,12 @@
 				"x": 1415.55541992188,
 				"x": 1415.55541992188,
 				"y": 72.2222290039063
 				"y": 72.2222290039063
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@2925": 1,
+				"@OptionButton@2966": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1711/@MarginContainer@1751/Tree/@Popup@1737/@VBoxContainer@1738/@HSlider@1746": {
+				"AudioPlayer/FileDialog/@VBoxContainer@2913/@MarginContainer@2953/Tree/@Popup@2939/@VBoxContainer@2940/@HSlider@2948": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -83,6 +116,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "inputfile",
 			"command": "inputfile",
 			"id": 6,
 			"id": 6,
 			"name": "inputfile",
 			"name": "inputfile",
@@ -93,8 +129,12 @@
 				"x": 55.5555572509766,
 				"x": 55.5555572509766,
 				"y": 67.7777786254883
 				"y": 67.7777786254883
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@3034": 1,
+				"@OptionButton@3075": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1820/@MarginContainer@1860/Tree/@Popup@1846/@VBoxContainer@1847/@HSlider@1855": {
+				"AudioPlayer/FileDialog/@VBoxContainer@3022/@MarginContainer@3062/Tree/@Popup@3048/@VBoxContainer@3049/@HSlider@3057": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -104,6 +144,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "distort_average",
 			"command": "distort_average",
 			"id": 7,
 			"id": 7,
 			"name": "distort_average",
 			"name": "distort_average",
@@ -113,14 +156,21 @@
 			"offset": {
 			"offset": {
 				"x": 778.888916015625,
 				"x": 778.888916015625,
 				"y": 66.6666641235352
 				"y": 66.6666641235352
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"CycleCount/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 18.0
+					"value": 5.0
 				}
 				}
 			}
 			}
 		}
 		}

+ 267 - 0
examples/multiple_inputs.thd

@@ -0,0 +1,267 @@
+{
+	"connections": [
+		{
+			"from_node_id": 5,
+			"from_port": 0,
+			"to_node_id": 3,
+			"to_port": 0
+		},
+		{
+			"from_node_id": 3,
+			"from_port": 0,
+			"to_node_id": 1,
+			"to_port": 0
+		},
+		{
+			"from_node_id": 2,
+			"from_port": 0,
+			"to_node_id": 4,
+			"to_port": 0
+		},
+		{
+			"from_node_id": 4,
+			"from_port": 0,
+			"to_node_id": 1,
+			"to_port": 0
+		}
+	],
+	"nodes": [
+		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
+			"command": "outputfile",
+			"id": 1,
+			"name": "outputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1608.88891601563,
+				"y": 114.444450378418
+			},
+			"optionbutton_values": {
+				"@OptionButton@7546": 1,
+				"@OptionButton@7587": 0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@7534/@MarginContainer@7574/Tree/@Popup@7560/@VBoxContainer@7561/@HSlider@7569": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "inputfile",
+			"id": 2,
+			"name": "inputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 506.666687011719,
+				"y": 575.555541992188
+			},
+			"optionbutton_values": {
+				"@OptionButton@9155": 1,
+				"@OptionButton@9196": 0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@9143/@MarginContainer@9183/Tree/@Popup@9169/@VBoxContainer@9170/@HSlider@9178": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "modify_loudness_1",
+			"id": 3,
+			"name": "modify_loudness_1",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1017.77783203125,
+				"y": 116.66667175293
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+				"Gain/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 0.12
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "modify_brassage_5",
+			"id": 4,
+			"name": "modify_brassage_5",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1016.66668701172,
+				"y": 575.555541992188
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+				"Density/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 0.6
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "synspline_synspline",
+			"id": 5,
+			"name": "synspline_synspline",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 503.333343505859,
+				"y": 116.66667175293
+			},
+			"optionbutton_values": {
+				"SampleRate": 0
+			},
+			"slider_values": {
+				"Frequency/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 60.0
+				},
+				"MorphSpeed/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 24.0
+				},
+				"OutputDuration/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 30.0
+				},
+				"Seed/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 0.0
+				},
+				"SplineCount/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 4.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
+			"id": 6,
+			"name": "notes",
+			"notes": {
+				"CodeEdit": "You can have multiple input nodes in one thread including both synthesis and Input File nodes.\n\nInput File nodes require a process in between them and the Output File. Synthesis nodes can be connected to the Output File directly."
+			},
+			"offset": {
+				"x": 68.8888931274414,
+				"y": 110.0
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
+			"id": 7,
+			"name": "notes2",
+			"notes": {
+				"CodeEdit": "You can make additional Input File nodes by searching for \"Input\" in the search menu or by opening the explore menu (ctrl/cmd + E) and going to Utilities."
+			},
+			"offset": {
+				"x": 74.4444427490234,
+				"y": 574.444458007813
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+
+			}
+		}
+	]
+}

+ 54 - 20
examples/navigating.thd

@@ -2,6 +2,9 @@
 	"connections": [],
 	"connections": [],
 	"nodes": [
 	"nodes": [
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 1,
 			"id": 1,
 			"name": "notes",
 			"name": "notes",
@@ -11,48 +14,62 @@
 			"offset": {
 			"offset": {
 				"x": 104.444465637207,
 				"x": 104.444465637207,
 				"y": 165.555587768555
 				"y": 165.555587768555
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 2,
 			"id": 2,
 			"name": "notes3",
 			"name": "notes3",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Click and drag on the background to select multiple nodes at once.\n\nPressing Backspace/Delete will remove selected nodes. Note: \"Input File\" and \"Output File\" can't be deleted.\n\nSoundThread allows you to undo most major changes with ctrl/cmd and Z. Note: this not yet fully implemented."
+				"CodeEdit": "Click and drag on the background to select multiple nodes at once.\n\nPressing Backspace/Delete will remove selected nodes. Note: \"Output File\" can't be deleted.\n\nSoundThread allows you to undo most major changes with ctrl/cmd and Z. \nNote: this not yet fully implemented."
 			},
 			},
 			"offset": {
 			"offset": {
 				"x": 964.444641113281,
 				"x": 964.444641113281,
 				"y": 165.555587768555
 				"y": 165.555587768555
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "inputfile",
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
 			"id": 3,
 			"id": 3,
-			"name": "inputfile",
+			"name": "notes2",
 			"notes": {
 			"notes": {
-
+				"CodeEdit": "Press ctrl/cmd and E to browse all processes in SoundThread. Right click anywhere in empty space or press ctrl/cmd and F to search and add nodes. You can navigate the search menu with tab and press enter or click to add a node.\n\nNodes can be dragged around to rearrange and you can copy and paste nodes with ctrl/cmd+c and ctrl/cmd+v."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1383.33361816406,
-				"y": 164.444458007813
+				"x": 531.111267089844,
+				"y": 166.666702270508
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@2892/@MarginContainer@2932/Tree/@Popup@2918/@VBoxContainer@2919/@HSlider@2927": {
-					"editable": true,
-					"meta": {
 
 
-					},
-					"value": 0.0
-				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
 			"command": "outputfile",
 			"command": "outputfile",
 			"id": 4,
 			"id": 4,
 			"name": "outputfile",
 			"name": "outputfile",
@@ -60,11 +77,15 @@
 
 
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1384.44445800781,
-				"y": 393.333435058594
+				"x": 1401.11120605469,
+				"y": 410.000122070313
+			},
+			"optionbutton_values": {
+				"@OptionButton@3296": 1,
+				"@OptionButton@3337": 0
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@3001/@MarginContainer@3041/Tree/@Popup@3027/@VBoxContainer@3028/@HSlider@3036": {
+				"AudioPlayer/FileDialog/@VBoxContainer@3284/@MarginContainer@3324/Tree/@Popup@3310/@VBoxContainer@3311/@HSlider@3319": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -74,18 +95,31 @@
 			}
 			}
 		},
 		},
 		{
 		{
-			"command": "notes",
+			"checkbutton_states": {
+
+			},
+			"command": "inputfile",
 			"id": 5,
 			"id": 5,
-			"name": "notes2",
+			"name": "inputfile",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Press ctrl/cmd and E to browse all processes in SoundThread or, right click anywhere in empty space to search and add nodes.\n\nNodes can be dragged around to rearrange and you can copy and paste nodes with ctrl/cmd+c and ctrl/cmd+v."
+
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 531.111267089844,
-				"y": 166.666702270508
+				"x": 1401.11145019531,
+				"y": 164.444473266602
+			},
+			"optionbutton_values": {
+				"@OptionButton@3187": 1,
+				"@OptionButton@3228": 0
 			},
 			},
 			"slider_values": {
 			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@3175/@MarginContainer@3215/Tree/@Popup@3201/@VBoxContainer@3202/@HSlider@3210": {
+					"editable": true,
+					"meta": {
 
 
+					},
+					"value": 0.0
+				}
 			}
 			}
 		}
 		}
 	]
 	]

+ 236 - 0
examples/preview_nodes.thd

@@ -0,0 +1,236 @@
+{
+	"connections": [
+		{
+			"from_node_id": 1,
+			"from_port": 0,
+			"to_node_id": 2,
+			"to_port": 0
+		},
+		{
+			"from_node_id": 4,
+			"from_port": 0,
+			"to_node_id": 5,
+			"to_port": 0
+		},
+		{
+			"from_node_id": 2,
+			"from_port": 0,
+			"to_node_id": 6,
+			"to_port": 0
+		},
+		{
+			"from_node_id": 2,
+			"from_port": 0,
+			"to_node_id": 3,
+			"to_port": 0
+		},
+		{
+			"from_node_id": 3,
+			"from_port": 0,
+			"to_node_id": 4,
+			"to_port": 0
+		}
+	],
+	"nodes": [
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "inputfile",
+			"id": 1,
+			"name": "inputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 20.0,
+				"y": 80.0
+			},
+			"optionbutton_values": {
+				"@OptionButton@11575": 1,
+				"@OptionButton@11616": 0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@11563/@MarginContainer@11603/Tree/@Popup@11589/@VBoxContainer@11590/@HSlider@11598": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "modify_brassage_2",
+			"id": 2,
+			"name": "modify_brassage_2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 507.222259521484,
+				"y": 79.444450378418
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+				"Speed/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 0.5
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "modify_brassage_1",
+			"id": 3,
+			"name": "modify_brassage_1",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 877.555541992188,
+				"y": 78.2222366333008
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+				"PitchShift/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 12.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "distort_delete_2",
+			"id": 4,
+			"name": "distort_delete_2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1245.44458007813,
+				"y": 78.2222290039063
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+				"CycleCount/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
+					},
+					"value": 4.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
+			"command": "outputfile",
+			"id": 5,
+			"name": "outputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1612.33337402344,
+				"y": 77.5555572509766
+			},
+			"optionbutton_values": {
+				"@OptionButton@11684": 1,
+				"@OptionButton@11725": 0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@11672/@MarginContainer@11712/Tree/@Popup@11698/@VBoxContainer@11699/@HSlider@11707": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "preview",
+			"id": 6,
+			"name": "preview",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1002.22229003906,
+				"y": 347.111145019531
+			},
+			"optionbutton_values": {
+				"@OptionButton@12106": 1,
+				"@OptionButton@12147": 0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@12094/@MarginContainer@12134/Tree/@Popup@12120/@VBoxContainer@12121/@HSlider@12129": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
+			"id": 7,
+			"name": "notes",
+			"notes": {
+				"CodeEdit": "Preview nodes can be connected anywhere in a thread. When the thread is run it will allow you to hear the audio at that point in the thread.\n\nFiles loaded into a Preview node will be excluded from \"Delete Intermediate Files\".\n\nNote: including many of these in a thread may introduce some lag."
+			},
+			"offset": {
+				"x": 488.888885498047,
+				"y": 347.111145019531
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+
+			}
+		}
+	]
+}

+ 112 - 34
examples/resonant_filters.thd

@@ -27,6 +27,9 @@
 	],
 	],
 	"nodes": [
 	"nodes": [
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "inputfile",
 			"command": "inputfile",
 			"id": 1,
 			"id": 1,
 			"name": "inputfile",
 			"name": "inputfile",
@@ -37,8 +40,12 @@
 				"x": 20.0,
 				"x": 20.0,
 				"y": 80.0
 				"y": 80.0
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@7122": 1,
+				"@OptionButton@7163": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1675/@MarginContainer@1715/Tree/@Popup@1701/@VBoxContainer@1702/@HSlider@1710": {
+				"AudioPlayer/FileDialog/@VBoxContainer@7110/@MarginContainer@7150/Tree/@Popup@7136/@VBoxContainer@7137/@HSlider@7145": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -48,6 +55,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "modify_brassage_5",
 			"command": "modify_brassage_5",
 			"id": 2,
 			"id": 2,
 			"name": "modify_brassage_5",
 			"name": "modify_brassage_5",
@@ -57,18 +67,28 @@
 			"offset": {
 			"offset": {
 				"x": 519.111083984375,
 				"x": 519.111083984375,
 				"y": 80.0
 				"y": 80.0
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"Density/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 0.23
+					"value": 0.6
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "silend_silend_1",
 			"command": "silend_silend_1",
 			"id": 3,
 			"id": 3,
 			"name": "silend_silend_1",
 			"name": "silend_silend_1",
@@ -78,18 +98,28 @@
 			"offset": {
 			"offset": {
 				"x": 890.666687011719,
 				"x": 890.666687011719,
 				"y": 80.0
 				"y": 80.0
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"LengthofSilence/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 30.28
+					"value": 15.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "filter_bank_6",
 			"command": "filter_bank_6",
 			"id": 4,
 			"id": 4,
 			"name": "filter_bank_6",
 			"name": "filter_bank_6",
@@ -99,53 +129,85 @@
 			"offset": {
 			"offset": {
 				"x": 1256.66674804688,
 				"x": 1256.66674804688,
 				"y": 80.0
 				"y": 80.0
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"HighestBand/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": false,
+						"flag": "",
+						"max": true,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 5353.44
+					"value": 12000.0
 				},
 				},
-				"VBoxContainer2/HSplitContainer/HSlider": {
+				"LowestBand/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": true,
+						"time": false
 					},
 					},
-					"value": 1.5
+					"value": 110.0
 				},
 				},
-				"VBoxContainer3/HSplitContainer/HSlider": {
+				"MakeupGain/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 110.0
+					"value": 1.5
 				},
 				},
-				"VBoxContainer4/HSplitContainer/HSlider": {
+				"Q/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 12000.0
+					"value": 400.0
 				},
 				},
-				"VBoxContainer5/HSplitContainer/HSlider": {
+				"Scatter/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-
+						"brk": false,
+						"flag": "-s",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 7.0
+					"value": 0.0
 				},
 				},
-				"VBoxContainer6/HSplitContainer/HSlider": {
+				"Semitones/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"flag": "-s"
+						"brk": false,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 0.0
+					"value": 7.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
 			"command": "outputfile",
 			"command": "outputfile",
 			"id": 5,
 			"id": 5,
 			"name": "outputfile",
 			"name": "outputfile",
@@ -156,8 +218,12 @@
 				"x": 1624.88879394531,
 				"x": 1624.88879394531,
 				"y": 80.0
 				"y": 80.0
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@7291": 1,
+				"@OptionButton@7332": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1784/@MarginContainer@1824/Tree/@Popup@1810/@VBoxContainer@1811/@HSlider@1819": {
+				"AudioPlayer/FileDialog/@VBoxContainer@7279/@MarginContainer@7319/Tree/@Popup@7305/@VBoxContainer@7306/@HSlider@7314": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -167,30 +233,42 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 6,
 			"id": 6,
-			"name": "notes2",
+			"name": "notes",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Resonant filters and other processes that add durational elements onto a sound (such as PVOC: Blur) can often get their tails cut off during the process. Using Append Silence we can add some silence onto our sound before processing by the filter to allow some room for the tail to decay. "
+				"CodeEdit": "Applying a low density granular process before a resonant filter can help the sound ping and activate the filter making it rhythmic and percussive rather than a constant drone."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 994.444458007813,
-				"y": 534.444458007813
+				"x": 494.444458007813,
+				"y": 524.444458007813
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 7,
 			"id": 7,
-			"name": "notes",
+			"name": "notes2",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Applying a low density granular process before a resonant filter can help the sound ping and activate the filter making it rhythmic and percussive rather than a constant drone."
+				"CodeEdit": "Resonant filters and other processes that add durational elements onto a sound (such as PVOC: Blur) can often get their tails cut off during the process. Using Append Silence we can add some silence onto our sound before processing by the filter to allow some room for the tail to decay. "
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 494.444458007813,
-				"y": 524.444458007813
+				"x": 992.222229003906,
+				"y": 525.555541992188
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 

+ 42 - 4
examples/trimming.thd

@@ -15,6 +15,9 @@
 	],
 	],
 	"nodes": [
 	"nodes": [
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "distort_multiply",
 			"command": "distort_multiply",
 			"id": 1,
 			"id": 1,
 			"name": "distort_multiply",
 			"name": "distort_multiply",
@@ -24,18 +27,30 @@
 			"offset": {
 			"offset": {
 				"x": 595.555541992188,
 				"x": 595.555541992188,
 				"y": 88.8888931274414
 				"y": 88.8888931274414
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"Multiplier/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
 					"value": 3.0
 					"value": 3.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
 			"command": "outputfile",
 			"command": "outputfile",
 			"id": 2,
 			"id": 2,
 			"name": "outputfile",
 			"name": "outputfile",
@@ -46,8 +61,12 @@
 				"x": 967.77783203125,
 				"x": 967.77783203125,
 				"y": 88.8888931274414
 				"y": 88.8888931274414
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@5755": 1,
+				"@OptionButton@5796": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@2083/@MarginContainer@2123/Tree/@Popup@2109/@VBoxContainer@2110/@HSlider@2118": {
+				"AudioPlayer/FileDialog/@VBoxContainer@5743/@MarginContainer@5783/Tree/@Popup@5769/@VBoxContainer@5770/@HSlider@5778": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -57,6 +76,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "inputfile",
 			"command": "inputfile",
 			"id": 3,
 			"id": 3,
 			"name": "inputfile",
 			"name": "inputfile",
@@ -67,8 +89,12 @@
 				"x": 111.111114501953,
 				"x": 111.111114501953,
 				"y": 88.8888931274414
 				"y": 88.8888931274414
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@5864": 1,
+				"@OptionButton@5905": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1974/@MarginContainer@2014/Tree/@Popup@2000/@VBoxContainer@2001/@HSlider@2009": {
+				"AudioPlayer/FileDialog/@VBoxContainer@5852/@MarginContainer@5892/Tree/@Popup@5878/@VBoxContainer@5879/@HSlider@5887": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -78,6 +104,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 4,
 			"id": 4,
 			"name": "notes",
 			"name": "notes",
@@ -87,12 +116,18 @@
 			"offset": {
 			"offset": {
 				"x": 117.777778625488,
 				"x": 117.777778625488,
 				"y": 368.888885498047
 				"y": 368.888885498047
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "notes",
 			"command": "notes",
 			"id": 5,
 			"id": 5,
 			"name": "notes2",
 			"name": "notes2",
@@ -102,6 +137,9 @@
 			"offset": {
 			"offset": {
 				"x": 542.222229003906,
 				"x": 542.222229003906,
 				"y": 367.777801513672
 				"y": 367.777801513672
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 

+ 80 - 13
examples/wetdry.thd

@@ -33,6 +33,9 @@
 	],
 	],
 	"nodes": [
 	"nodes": [
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "inputfile",
 			"command": "inputfile",
 			"id": 1,
 			"id": 1,
 			"name": "inputfile",
 			"name": "inputfile",
@@ -43,8 +46,12 @@
 				"x": 20.0,
 				"x": 20.0,
 				"y": 80.0
 				"y": 80.0
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@5996": 1,
+				"@OptionButton@6037": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@2389/@MarginContainer@2429/Tree/@Popup@2415/@VBoxContainer@2416/@HSlider@2424": {
+				"AudioPlayer/FileDialog/@VBoxContainer@5984/@MarginContainer@6024/Tree/@Popup@6010/@VBoxContainer@6011/@HSlider@6019": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -54,6 +61,11 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+				"Autoplay": true,
+				"DeleteIntermediateFilesToggle": true,
+				"ReuseFolderToggle": true
+			},
 			"command": "outputfile",
 			"command": "outputfile",
 			"id": 2,
 			"id": 2,
 			"name": "outputfile",
 			"name": "outputfile",
@@ -64,8 +76,12 @@
 				"x": 1440.0,
 				"x": 1440.0,
 				"y": 80.0
 				"y": 80.0
 			},
 			},
+			"optionbutton_values": {
+				"@OptionButton@6105": 1,
+				"@OptionButton@6146": 0
+			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@2498/@MarginContainer@2538/Tree/@Popup@2524/@VBoxContainer@2525/@HSlider@2533": {
+				"AudioPlayer/FileDialog/@VBoxContainer@6093/@MarginContainer@6133/Tree/@Popup@6119/@VBoxContainer@6120/@HSlider@6128": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
 
 
@@ -75,6 +91,9 @@
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "modify_brassage_1",
 			"command": "modify_brassage_1",
 			"id": 3,
 			"id": 3,
 			"name": "modify_brassage_1",
 			"name": "modify_brassage_1",
@@ -84,18 +103,28 @@
 			"offset": {
 			"offset": {
 				"x": 608.888916015625,
 				"x": 608.888916015625,
 				"y": 83.3333358764648
 				"y": 83.3333358764648
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"PitchShift/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 12.0
+					"value": -12.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "modify_loudness_1",
 			"command": "modify_loudness_1",
 			"id": 4,
 			"id": 4,
 			"name": "modify_loudness_1",
 			"name": "modify_loudness_1",
@@ -105,18 +134,28 @@
 			"offset": {
 			"offset": {
 				"x": 973.333374023438,
 				"x": 973.333374023438,
 				"y": 83.3333358764648
 				"y": 83.3333358764648
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"Gain/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 0.5
+					"value": 1.0
 				}
 				}
 			}
 			}
 		},
 		},
 		{
 		{
+			"checkbutton_states": {
+
+			},
 			"command": "modify_loudness_1",
 			"command": "modify_loudness_1",
 			"id": 5,
 			"id": 5,
 			"name": "modify_loudness_2",
 			"name": "modify_loudness_2",
@@ -124,18 +163,46 @@
 
 
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 965.555603027344,
-				"y": 286.666687011719
+				"x": 971.111145019531,
+				"y": 260.0
+			},
+			"optionbutton_values": {
+
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"Gain/HSplitContainer/HSlider": {
 					"editable": true,
 					"editable": true,
 					"meta": {
 					"meta": {
-						"brk": true
+						"brk": true,
+						"flag": "",
+						"max": false,
+						"min": false,
+						"time": false
 					},
 					},
-					"value": 1.0
+					"value": 0.5
 				}
 				}
 			}
 			}
+		},
+		{
+			"checkbutton_states": {
+
+			},
+			"command": "notes",
+			"id": 6,
+			"name": "notes",
+			"notes": {
+				"CodeEdit": "Many processes in CDP do not have a way to mix between the original dry signal and the wet processed signal.\n\nHowever, by using Gain nodes it is possible to mix between these as well as mix other aspects of your thread."
+			},
+			"offset": {
+				"x": 952.222229003906,
+				"y": 481.111114501953
+			},
+			"optionbutton_values": {
+
+			},
+			"slider_values": {
+
+			}
 		}
 		}
 	]
 	]
 }
 }

+ 19 - 15
scenes/main/control.tscn

@@ -313,7 +313,7 @@ item_2/id = 2
 [node name="HelpButton" type="PopupMenu" parent="MenuBar"]
 [node name="HelpButton" type="PopupMenu" parent="MenuBar"]
 auto_translate_mode = 1
 auto_translate_mode = 1
 title = "Help"
 title = "Help"
-item_count = 13
+item_count = 15
 item_0/text = "Tutorials"
 item_0/text = "Tutorials"
 item_0/id = 0
 item_0/id = 0
 item_0/separator = true
 item_0/separator = true
@@ -329,20 +329,24 @@ item_5/text = "Automation"
 item_5/id = 5
 item_5/id = 5
 item_6/text = "Trimming Input Files"
 item_6/text = "Trimming Input Files"
 item_6/id = 6
 item_6/id = 6
-item_7/text = "Tips"
-item_7/id = 7
-item_7/separator = true
-item_8/text = "Wet/Dry Mix"
-item_8/id = 8
-item_9/text = "Resonant Filters"
-item_9/id = 12
-item_10/text = "Other Help"
-item_10/id = 9
-item_10/separator = true
-item_11/text = "CDP Documentation"
-item_11/id = 10
-item_12/text = "Report a Bug"
-item_12/id = 11
+item_7/text = "Multiple Inputs"
+item_7/id = 13
+item_8/text = "Preview Nodes"
+item_8/id = 14
+item_9/text = "Tips"
+item_9/id = 7
+item_9/separator = true
+item_10/text = "Wet/Dry Mix"
+item_10/id = 8
+item_11/text = "Resonant Filters"
+item_11/id = 12
+item_12/text = "Other Help"
+item_12/id = 9
+item_12/separator = true
+item_13/text = "CDP Documentation"
+item_13/id = 10
+item_14/text = "Report a Bug"
+item_14/id = 11
 
 
 [node name="About" type="PopupMenu" parent="MenuBar"]
 [node name="About" type="PopupMenu" parent="MenuBar"]
 item_count = 1
 item_count = 1

+ 21 - 5
scenes/main/scripts/control.gd

@@ -489,8 +489,24 @@ func _on_help_button_index_pressed(index: int) -> void:
 				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
 				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
 				save_load.load_graph_edit("res://examples/trimming.thd")
 				save_load.load_graph_edit("res://examples/trimming.thd")
 		7:
 		7:
-			pass
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/multiple_inputs.thd"
+				$SaveChangesPopup.popup_centered()
+			else:
+				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
+				save_load.load_graph_edit("res://examples/multiple_inputs.thd")
 		8:
 		8:
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/preview_nodes.thd"
+				$SaveChangesPopup.popup_centered()
+			else:
+				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
+				save_load.load_graph_edit("res://examples/preview_nodes.thd")
+		9:
+			pass
+		10:
 			if changesmade == true:
 			if changesmade == true:
 				savestate = "helpfile"
 				savestate = "helpfile"
 				helpfile = "res://examples/wetdry.thd"
 				helpfile = "res://examples/wetdry.thd"
@@ -498,7 +514,7 @@ func _on_help_button_index_pressed(index: int) -> void:
 			else:
 			else:
 				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
 				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
 				save_load.load_graph_edit("res://examples/wetdry.thd")
 				save_load.load_graph_edit("res://examples/wetdry.thd")
-		9:
+		11:
 			if changesmade == true:
 			if changesmade == true:
 				savestate = "helpfile"
 				savestate = "helpfile"
 				helpfile = "res://examples/resonant_filters.thd"
 				helpfile = "res://examples/resonant_filters.thd"
@@ -506,11 +522,11 @@ func _on_help_button_index_pressed(index: int) -> void:
 			else:
 			else:
 				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
 				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
 				save_load.load_graph_edit("res://examples/resonant_filters.thd")
 				save_load.load_graph_edit("res://examples/resonant_filters.thd")
-		10:
+		12:
 			pass
 			pass
-		11:
+		13:
 			OS.shell_open("https://www.composersdesktop.com/docs/html/ccdpndex.htm")
 			OS.shell_open("https://www.composersdesktop.com/docs/html/ccdpndex.htm")
-		12:
+		14:
 			OS.shell_open("https://github.com/j-p-higgins/SoundThread/issues")
 			OS.shell_open("https://github.com/j-p-higgins/SoundThread/issues")
 
 
 #func _recycle_outfile():
 #func _recycle_outfile():

+ 12 - 10
scenes/main/scripts/save_load.gd

@@ -179,17 +179,19 @@ func load_graph_edit(path: String):
 			if codeedit and (codeedit is CodeEdit):
 			if codeedit and (codeedit is CodeEdit):
 				codeedit.text = node_data["notes"][codeedit_name]
 				codeedit.text = node_data["notes"][codeedit_name]
 				
 				
-		# Restore check buttons
-		for checkbutton_name in node_data["checkbutton_states"]:
-			var checkbutton = new_node.find_child(checkbutton_name, true, false)
-			if checkbutton and (checkbutton is CheckButton):
-				checkbutton.button_pressed = node_data["checkbutton_states"][checkbutton_name]
+		# Restore check buttons if this exists in the file (if statement is to stop crashes when opening old save files)
+		if node_data.has("checkbutton_states"):
+			for checkbutton_name in node_data["checkbutton_states"]:
+				var checkbutton = new_node.find_child(checkbutton_name, true, false)
+				if checkbutton and (checkbutton is CheckButton):
+					checkbutton.button_pressed = node_data["checkbutton_states"][checkbutton_name]
 					
 					
-		# Restore option buttons
-		for optionbutton_name in node_data["optionbutton_values"]:
-			var optionbutton = new_node.find_child(optionbutton_name, true, false)
-			if optionbutton and (optionbutton is OptionButton):
-				optionbutton.selected = node_data["optionbutton_values"][optionbutton_name]
+		# Restore option buttons if this exists in the file (if statement is to stop crashes when opening old save files)
+		if node_data.has("optionbutton_values"):
+			for optionbutton_name in node_data["optionbutton_values"]:
+				var optionbutton = new_node.find_child(optionbutton_name, true, false)
+				if optionbutton and (optionbutton is OptionButton):
+					optionbutton.selected = node_data["optionbutton_values"][optionbutton_name]
 
 
 		register_input.call(new_node)
 		register_input.call(new_node)