{
  "SchemaVersion": 1,
  "Kind": "folder",
  "Name": "Prediction Animation",
  "Description": null,
  "Tags": null,
  "CreatedUtc": "2026-07-27T09:25:08.8452492+00:00",
  "Source": {
    "App": "Streaming Hub",
    "AppVersion": "1.0.0.0",
    "ExportedUtc": "2026-07-27T09:25:08.8453411+00:00"
  },
  "Data": {
    "Folder": {
      "Color": "#F59E0B",
      "ConcurrencyEnabled": false,
      "ConcurrencyMode": "Queue",
      "ConcurrencyOptions": {
        "DebounceMs": 500,
        "CooldownMs": 1000,
        "QueueMaxLength": 50,
        "QueueOverflowBehavior": "DropOldest",
        "MaxParallelPerAutomation": 4
      }
    },
    "Automations": [
      {
        "SourceId": "e8692531-324f-4a37-a044-cd6da413076e",
        "Name": "Prediction Begin Message",
        "RelativeOrder": 0,
        "IsEnabled": true,
        "Script": {
          "Sequence": {
            "Steps": [
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Message-Title\u0022}]",
                  "Text": "Prediction has begun!",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Message-Body\u0022}]",
                  "Text": "{event.contract.twitch.prediction.title}",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.Show",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Message\u0022}]",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Delay",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Duration": "5",
                  "Unit": "Seconds",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.Hide",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Message\u0022}]",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              }
            ],
            "StopOnError": true
          },
          "Signal": {
            "SignalId": "Twitch.Prediction.Begin",
            "Type": "Plugin",
            "UnavailableReferenceKind": null,
            "UnavailableReferenceId": null,
            "UnavailableReason": null,
            "OriginalLegacyTypeToken": null,
            "PluginConfig": {},
            "TestPresets": [
              {
                "Id": "e4cb22c5cb0b484f8240e37cda451d76",
                "Name": "Default",
                "Settings": {
                  "Text": "test",
                  "UserId": "user-1",
                  "UserName": "tester"
                }
              },
              {
                "Id": "ef28e697221444c4899f64f72047bc71",
                "Name": "Preset",
                "Settings": {
                  "event.contract.twitch.channel.displayName": "Tester",
                  "event.contract.twitch.channel.id": "id-1",
                  "event.contract.twitch.channel.login": "tester",
                  "event.contract.twitch.eventName": "Twitch.Prediction.Begin",
                  "event.contract.twitch.message": "sample",
                  "event.contract.twitch.prediction.endsAt": "2026-07-27T07:18:29.4199707\u002B00:00",
                  "event.contract.twitch.prediction.id": "id-1",
                  "event.contract.twitch.prediction.locksAt": "2026-07-27T07:18:29.4199706\u002B00:00",
                  "event.contract.twitch.prediction.outcomes": [],
                  "event.contract.twitch.prediction.outcomes[0].channelPoints": 1,
                  "event.contract.twitch.prediction.outcomes[0].id": "id-1",
                  "event.contract.twitch.prediction.outcomes[0].title": "sample",
                  "event.contract.twitch.prediction.outcomes[0].users": 1,
                  "event.contract.twitch.prediction.startedAt": "2026-07-27T07:18:29.4199704\u002B00:00",
                  "event.contract.twitch.prediction.status": "sample",
                  "event.contract.twitch.prediction.title": "Am I going to win this?",
                  "event.contract.twitch.prediction.winningOutcomeId": "sample",
                  "event.contract.twitch.source": "EventSub",
                  "event.contract.twitch.timestamp": "2026-07-27T07:18:29.4199102\u002B00:00",
                  "event.contract.twitch.version": "v1",
                  "event.signalId": "Twitch.Prediction.Begin",
                  "event.source": "twitch",
                  "event.sourceKey": "Twitch",
                  "event.text": "sample text",
                  "event.timestampUtc": "2026-07-27T07:18:29.4199092\u002B00:00",
                  "event.type": "PluginSignal",
                  "event.typeKey": "Twitch.Prediction.Begin",
                  "Text": "test",
                  "UserId": "user-1",
                  "UserName": "tester"
                }
              }
            ],
            "SelectedTestPresetId": "ef28e697221444c4899f64f72047bc71",
            "InstanceId": "8e902ea3ea7746b39c2ca09d743442af",
            "TextMatchMode": "Any",
            "TextPattern": null,
            "Channel": null,
            "TimerInterval": "00:01:00",
            "TimerIntervalSeconds": 60,
            "TimerStartDelay": "00:00:00",
            "TimerJitter": "00:00:00",
            "TimerGateVarPath": null,
            "TimerGateExpected": true,
            "TimerOnlyWhenStreamOnline": false,
            "TimerValidationMessage": "",
            "IsTimerConfigurationValid": true,
            "ScheduledMomentMode": "TodayAtTime",
            "ScheduledMomentDate": null,
            "ScheduledMomentTime": "00:00:00",
            "ScheduledMomentStartDelay": "00:00:00",
            "ScheduledMomentGateVarPath": null,
            "ScheduledMomentGateExpected": true,
            "ScheduledMomentEnabled": true,
            "ScheduledMomentDaysOfWeek": null,
            "ScheduledMomentGateMode": "SkipIfFalse",
            "ScheduledMomentGateMaxWait": "00:00:00",
            "ScheduledMomentPastPolicy": "Skip",
            "ScheduledMomentValidationMessage": "",
            "IsScheduledMomentConfigurationValid": true,
            "ThresholdSourceType": "Variable",
            "ThresholdSourceKey": null,
            "ThresholdSourcePath": null,
            "ThresholdNumericField": null,
            "ThresholdOperator": "GreaterOrEqual",
            "ThresholdTargetValue": 0,
            "ThresholdEpsilon": 0,
            "ThresholdSamplingMode": "EventDriven",
            "ThresholdPollingInterval": "00:00:01",
            "ThresholdCrossingOnly": true,
            "ThresholdRearmMode": "Manual",
            "ThresholdGateVarPath": null,
            "ThresholdGateExpected": true,
            "ThresholdOnce": false,
            "ThresholdResetPolicy": "Manual",
            "ThresholdValidationMessage": "",
            "IsThresholdConfigurationValid": true
          }
        },
        "Execution": {
          "CooldownSeconds": 0,
          "CooldownPerUser": false,
          "ConcurrencyMode": "Queue",
          "ConcurrencyOptions": {
            "DebounceMs": 500,
            "CooldownMs": 1000,
            "QueueMaxLength": 50,
            "QueueOverflowBehavior": "DropOldest",
            "MaxParallelPerAutomation": 4
          },
          "KeySelector": null,
          "DefaultStepTimeoutMs": null,
          "AutomationTimeoutMs": null,
          "OnStepError": "Stop"
        }
      },
      {
        "SourceId": "5513c690-7f39-4c57-ae94-c66af24a777a",
        "Name": "Prediction Lock Animation",
        "RelativeOrder": 1,
        "IsEnabled": true,
        "Script": {
          "Sequence": {
            "Steps": [
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Prediction-Title\u0022}]",
                  "Text": "{event.contract.twitch.prediction.title}",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Option-1\u0022}]",
                  "Text": "{event.contract.twitch.prediction.outcomes[0].title}",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Option-2\u0022}]",
                  "Text": "{event.contract.twitch.prediction.outcomes[1].title}",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Option-1-Percent\u0022},{\u0022SlotId\u0022:\u0022Option-2-Percent\u0022}]",
                  "Text": "0%",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.Show",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Prediction-Title\u0022},{\u0022SlotId\u0022:\u0022Option-1\u0022},{\u0022SlotId\u0022:\u0022Option-2\u0022}]",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Math.NumberOperate",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "TargetPath": "runtime.channelPointsTotal",
                  "Expression": "0",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Loop.ForEach",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "SourceType": "Variable",
                  "SourcePath": "event.contract.twitch.prediction.outcomes",
                  "ItemVar": "item",
                  "IndexVar": "i",
                  "DelayBetweenIterations": "00:00:00",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": {
                  "Steps": [
                    {
                      "ActionId": "Core.Math.NumberOperate",
                      "When": null,
                      "Condition": null,
                      "TimeoutMs": null,
                      "OnError": null,
                      "Parameters": {
                        "TargetPath": "runtime.channelPointsTotal",
                        "Expression": "{runtime.channelPointsTotal}\u002B{item.channelPoints}",
                        "IsEnabled": "True",
                        "UseRunCondition": "False",
                        "RunConditionExpression": ""
                      },
                      "Body": null
                    }
                  ],
                  "StopOnError": true
                }
              },
              {
                "ActionId": "Core.Math.NumberOperate",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "TargetPath": "runtime.option1percent",
                  "Expression": "Round((100*{event.contract.twitch.prediction.outcomes[0].channelPoints})/{runtime.channelPointsTotal})",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Math.NumberOperate",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "TargetPath": "runtime.option2percent",
                  "Expression": "100-{runtime.option1percent}",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Math.NumberOperate",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "TargetPath": "runtime.width1",
                  "Expression": "{runtime.option1percent}/100",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Math.NumberOperate",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "TargetPath": "runtime.width2",
                  "Expression": "{runtime.option2percent}/100",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.SetTransform",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Prediction-Color-1\u0022}]",
                  "ScaleX": "{runtime.width1}",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.SetTransform",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Prediction-Color-2\u0022}]",
                  "ScaleX": "{runtime.width2}",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.Show",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Option-1-Percent\u0022},{\u0022SlotId\u0022:\u0022Option-2-Percent\u0022},{\u0022SlotId\u0022:\u0022Prediction-Color-1\u0022},{\u0022SlotId\u0022:\u0022Prediction-Color-2\u0022}]",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Loop.Repeat",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Count": "20",
                  "IndexVar": "i",
                  "DelayBetweenIterations": "00:00:00.040",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": {
                  "Steps": [
                    {
                      "ActionId": "Core.Math.Random",
                      "When": null,
                      "Condition": null,
                      "TimeoutMs": null,
                      "OnError": null,
                      "Parameters": {
                        "Mode": "Integer",
                        "TargetPath": "vars.random",
                        "MinTemplate": "0",
                        "MaxTemplate": "100",
                        "ChoicesTemplate": "A\nB\nC",
                        "IsEnabled": "True",
                        "UseRunCondition": "False",
                        "RunConditionExpression": ""
                      },
                      "Body": null
                    },
                    {
                      "ActionId": "OBS.Source.SetText",
                      "When": null,
                      "Condition": null,
                      "TimeoutMs": null,
                      "OnError": null,
                      "Parameters": {
                        "Slots": "[{\u0022SlotId\u0022:\u0022Option-1-Percent\u0022},{\u0022SlotId\u0022:\u0022Option-2-Percent\u0022}]",
                        "Text": "{vars.random}%",
                        "IsEnabled": "True",
                        "UseRunCondition": "False",
                        "RunConditionExpression": ""
                      },
                      "Body": null
                    }
                  ],
                  "StopOnError": true
                }
              },
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Option-1-Percent\u0022}]",
                  "Text": "{runtime.option1percent}%",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Option-2-Percent\u0022}]",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": "",
                  "Text": "{runtime.option2percent}%"
                },
                "Body": null
              },
              {
                "ActionId": "Core.Delay",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Duration": "10",
                  "Unit": "Seconds",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.Hide",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Option-1\u0022},{\u0022SlotId\u0022:\u0022Option-2\u0022},{\u0022SlotId\u0022:\u0022Option-1-Percent\u0022},{\u0022SlotId\u0022:\u0022Option-2-Percent\u0022},{\u0022SlotId\u0022:\u0022Prediction-Color-1\u0022},{\u0022SlotId\u0022:\u0022Prediction-Color-2\u0022},{\u0022SlotId\u0022:\u0022Prediction-Title\u0022}]",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              }
            ],
            "StopOnError": false
          },
          "Signal": {
            "SignalId": "Twitch.Prediction.Lock",
            "Type": "Plugin",
            "UnavailableReferenceKind": null,
            "UnavailableReferenceId": null,
            "UnavailableReason": null,
            "OriginalLegacyTypeToken": null,
            "PluginConfig": {},
            "TestPresets": [
              {
                "Id": "e633f186a23140dbba2fe7847dcbc4bc",
                "Name": "Default",
                "Settings": {
                  "Text": "test",
                  "UserId": "user-1",
                  "UserName": "tester"
                }
              },
              {
                "Id": "dd33469d15674836a9718eea595df1ff",
                "Name": "Preset",
                "Settings": {
                  "UserId": "\u003CUSER\u003E",
                  "UserName": "\u003CUSER\u003E",
                  "Text": "\u003CTEXT:16\u003E",
                  "contract": {
                    "twitch": {
                      "version": "v1",
                      "eventName": "\u003CUSER\u003E",
                      "timestamp": "2026-07-27T07:52:55.8279791\u002B00:00",
                      "source": "EventSub",
                      "channel": {
                        "id": "\u003CID\u003E",
                        "login": "\u003CUSER\u003E",
                        "displayName": "\u003CUSER\u003E"
                      },
                      "user": null,
                      "chat": null,
                      "stream": null,
                      "sub": null,
                      "points": null,
                      "cheer": null,
                      "raid": null,
                      "moderation": null,
                      "poll": null,
                      "prediction": {
                        "id": "\u003CID\u003E",
                        "title": "Will I win this?",
                        "outcomes": [
                          {
                            "id": "\u003CID\u003E",
                            "title": "Win",
                            "users": 1,
                            "channelPoints": 38562
                          },
                          {
                            "id": "\u003CID\u003E",
                            "title": "Lose",
                            "users": 0,
                            "channelPoints": 17934
                          }
                        ],
                        "status": null,
                        "startedAt": "2026-07-27T07:52:35.3984289\u002B00:00",
                        "locksAt": null,
                        "endsAt": null,
                        "winningOutcomeId": null
                      },
                      "message": "\u003CTEXT:28\u003E",
                      "raw": {
                        "type": "Twitch.Prediction.Lock",
                        "event": {
                          "id": "\u003CID\u003E",
                          "broadcaster_user_id": "\u003CUSER\u003E",
                          "broadcaster_user_name": "\u003CUSER\u003E",
                          "broadcaster_user_login": "\u003CUSER\u003E",
                          "title": "Will I win this?",
                          "outcomes": [
                            {
                              "id": "\u003CID\u003E",
                              "title": "Win",
                              "color": "blue",
                              "users": 1,
                              "channel_points": 38562,
                              "top_predictors": [
                                {
                                  "user_id": "\u003CUSER\u003E",
                                  "user_login": "\u003CUSER\u003E",
                                  "user_name": "\u003CUSER\u003E",
                                  "channel_points_used": 10,
                                  "channel_points_won": null
                                }
                              ]
                            },
                            {
                              "id": "\u003CID\u003E",
                              "title": "Lose",
                              "color": "pink",
                              "users": 0,
                              "channel_points": 0,
                              "top_predictors": []
                            }
                          ],
                          "started_at": "2026-07-27T07:52:35.398428897Z",
                          "locked_at": "2026-07-27T07:52:55.775125412Z"
                        },
                        "metadata": {
                          "message_id": "\u003CTEXT:44\u003E",
                          "message_type": "\u003CTEXT:12\u003E",
                          "message_timestamp": "\u003CTEXT:30\u003E",
                          "subscription_type": "channel.prediction.lock",
                          "subscription_version": "1"
                        }
                      }
                    }
                  },
                  "raw": {
                    "type": "Twitch.Prediction.Lock",
                    "event": {
                      "id": "\u003CID\u003E",
                      "broadcaster_user_id": "\u003CUSER\u003E",
                      "broadcaster_user_name": "\u003CUSER\u003E",
                      "broadcaster_user_login": "\u003CUSER\u003E",
                      "title": "Will I win this?",
                      "outcomes": [
                        {
                          "id": "\u003CID\u003E",
                          "title": "Win",
                          "color": "blue",
                          "users": 1,
                          "channel_points": 38562,
                          "top_predictors": [
                            {
                              "user_id": "\u003CUSER\u003E",
                              "user_login": "\u003CUSER\u003E",
                              "user_name": "\u003CUSER\u003E",
                              "channel_points_used": 38562,
                              "channel_points_won": null
                            }
                          ]
                        },
                        {
                          "id": "\u003CID\u003E",
                          "title": "Lose",
                          "color": "pink",
                          "users": 0,
                          "channel_points": 17934,
                          "top_predictors": []
                        }
                      ],
                      "started_at": "2026-07-27T07:52:35.398428897Z",
                      "locked_at": "2026-07-27T07:52:55.775125412Z"
                    },
                    "metadata": {
                      "message_id": "\u003CTEXT:44\u003E",
                      "message_type": "\u003CTEXT:12\u003E",
                      "message_timestamp": "\u003CTEXT:30\u003E",
                      "subscription_type": "channel.prediction.lock",
                      "subscription_version": "1"
                    }
                  }
                }
              }
            ],
            "SelectedTestPresetId": "dd33469d15674836a9718eea595df1ff",
            "InstanceId": "b02049b15bf149be8dc82bfd85d672a4",
            "TextMatchMode": "Any",
            "TextPattern": null,
            "Channel": null,
            "TimerInterval": "00:01:00",
            "TimerIntervalSeconds": 60,
            "TimerStartDelay": "00:00:00",
            "TimerJitter": "00:00:00",
            "TimerGateVarPath": null,
            "TimerGateExpected": true,
            "TimerOnlyWhenStreamOnline": false,
            "TimerValidationMessage": "",
            "IsTimerConfigurationValid": true,
            "ScheduledMomentMode": "TodayAtTime",
            "ScheduledMomentDate": null,
            "ScheduledMomentTime": "00:00:00",
            "ScheduledMomentStartDelay": "00:00:00",
            "ScheduledMomentGateVarPath": null,
            "ScheduledMomentGateExpected": true,
            "ScheduledMomentEnabled": true,
            "ScheduledMomentDaysOfWeek": null,
            "ScheduledMomentGateMode": "SkipIfFalse",
            "ScheduledMomentGateMaxWait": "00:00:00",
            "ScheduledMomentPastPolicy": "Skip",
            "ScheduledMomentValidationMessage": "",
            "IsScheduledMomentConfigurationValid": true,
            "ThresholdSourceType": "Variable",
            "ThresholdSourceKey": null,
            "ThresholdSourcePath": null,
            "ThresholdNumericField": null,
            "ThresholdOperator": "GreaterOrEqual",
            "ThresholdTargetValue": 0,
            "ThresholdEpsilon": 0,
            "ThresholdSamplingMode": "EventDriven",
            "ThresholdPollingInterval": "00:00:01",
            "ThresholdCrossingOnly": true,
            "ThresholdRearmMode": "Manual",
            "ThresholdGateVarPath": null,
            "ThresholdGateExpected": true,
            "ThresholdOnce": false,
            "ThresholdResetPolicy": "Manual",
            "ThresholdValidationMessage": "",
            "IsThresholdConfigurationValid": true
          }
        },
        "Execution": {
          "CooldownSeconds": 0,
          "CooldownPerUser": false,
          "ConcurrencyMode": "Queue",
          "ConcurrencyOptions": {
            "DebounceMs": 500,
            "CooldownMs": 1000,
            "QueueMaxLength": 50,
            "QueueOverflowBehavior": "DropOldest",
            "MaxParallelPerAutomation": 4
          },
          "KeySelector": null,
          "DefaultStepTimeoutMs": null,
          "AutomationTimeoutMs": null,
          "OnStepError": "Continue"
        }
      },
      {
        "SourceId": "79181da9-708e-499a-9748-3789112d1e03",
        "Name": "Prediction End Message",
        "RelativeOrder": 2,
        "IsEnabled": true,
        "Script": {
          "Sequence": {
            "Steps": [
              {
                "ActionId": "Core.Math.NumberOperate",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "TargetPath": "runtime.winPoints",
                  "Expression": "0",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Loop.ForEach",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "SourceType": "Variable",
                  "SourcePath": "event.contract.twitch.prediction.outcomes",
                  "ItemVar": "item",
                  "IndexVar": "i",
                  "DelayBetweenIterations": "00:00:00",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": {
                  "Steps": [
                    {
                      "ActionId": "Core.SetVariable",
                      "When": {
                        "Operator": "And",
                        "Conditions": [],
                        "UseAdvancedExpression": true,
                        "AdvancedExpression": "{item.channelPoints}\u003E={runtime.winPoints}"
                      },
                      "Condition": null,
                      "TimeoutMs": null,
                      "OnError": null,
                      "Parameters": {
                        "VariableName": "runtime.winner",
                        "ValueTemplate": "{item.title}",
                        "TargetsJson": "[{\u0022TargetPath\u0022:\u0022runtime.winner\u0022,\u0022ValueTemplate\u0022:\u0022{item.title}\u0022}]",
                        "IsEnabled": "True",
                        "UseRunCondition": "False",
                        "RunConditionExpression": ""
                      },
                      "Body": null
                    }
                  ],
                  "StopOnError": true
                }
              },
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Message-Title\u0022}]",
                  "Text": "Prediction resolved!",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.SetText",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Message-Body\u0022}]",
                  "Text": "We\u0027re got it! We did {runtime.winner}",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.Show",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Message\u0022}]",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "Core.Delay",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Duration": "5",
                  "Unit": "Seconds",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              },
              {
                "ActionId": "OBS.Source.Hide",
                "When": null,
                "Condition": null,
                "TimeoutMs": null,
                "OnError": null,
                "Parameters": {
                  "Slots": "[{\u0022SlotId\u0022:\u0022Message\u0022}]",
                  "IsEnabled": "True",
                  "UseRunCondition": "False",
                  "RunConditionExpression": ""
                },
                "Body": null
              }
            ],
            "StopOnError": true
          },
          "Signal": {
            "SignalId": "Twitch.Prediction.End",
            "Type": "Plugin",
            "UnavailableReferenceKind": null,
            "UnavailableReferenceId": null,
            "UnavailableReason": null,
            "OriginalLegacyTypeToken": null,
            "PluginConfig": {},
            "TestPresets": [
              {
                "Id": "b92800528b0b42a5a05662a50b74f095",
                "Name": "Preset",
                "Settings": {
                  "event.contract.twitch.channel.displayName": "\u003CUSER\u003E",
                  "event.contract.twitch.channel.id": "\u003CID\u003E",
                  "event.contract.twitch.channel.login": "\u003CUSER\u003E",
                  "event.contract.twitch.eventName": "\u003CUSER\u003E",
                  "event.contract.twitch.message": "\u003CTEXT:28\u003E",
                  "event.contract.twitch.prediction.endsAt": "2026-07-27T09:18:04.3989716+00:00",
                  "event.contract.twitch.prediction.id": "\u003CID\u003E",
                  "event.contract.twitch.prediction.outcomes": [
                    {
                      "id": "\u003CID\u003E",
                      "title": "Win",
                      "users": 1,
                      "channelPoints": 10
                    },
                    {
                      "id": "\u003CID\u003E",
                      "title": "Lose",
                      "users": 0,
                      "channelPoints": 0
                    }
                  ],
                  "event.contract.twitch.prediction.outcomes[0].channelPoints": 10,
                  "event.contract.twitch.prediction.outcomes[0].id": "\u003CID\u003E",
                  "event.contract.twitch.prediction.outcomes[0].title": "Win",
                  "event.contract.twitch.prediction.outcomes[0].users": 1,
                  "event.contract.twitch.prediction.startedAt": "2026-07-27T09:17:36.58942+00:00",
                  "event.contract.twitch.prediction.status": "resolved",
                  "event.contract.twitch.prediction.title": "Will I win this?",
                  "event.contract.twitch.prediction.winningOutcomeId": "\u003CID\u003E",
                  "event.contract.twitch.source": "EventSub",
                  "event.contract.twitch.timestamp": "2026-07-27T09:18:04.5671908+00:00",
                  "event.contract.twitch.version": "v1",
                  "event.signalId": "Twitch.Prediction.End",
                  "event.source": "twitch",
                  "event.sourceKey": "Twitch",
                  "event.text": "\u003CTEXT:16\u003E",
                  "event.timestampUtc": "2026-07-27T09:18:04.5671908+00:00",
                  "event.type": "PluginSignal",
                  "event.typeKey": "Twitch.Prediction.End"
                }
              }
            ],
            "SelectedTestPresetId": "b92800528b0b42a5a05662a50b74f095",
            "InstanceId": "f3d3986aa5d34591927e7656cc00c79d",
            "TextMatchMode": "Any",
            "TextPattern": null,
            "Channel": null,
            "TimerInterval": "00:01:00",
            "TimerIntervalSeconds": 60,
            "TimerStartDelay": "00:00:00",
            "TimerJitter": "00:00:00",
            "TimerGateVarPath": null,
            "TimerGateExpected": true,
            "TimerOnlyWhenStreamOnline": false,
            "TimerValidationMessage": "",
            "IsTimerConfigurationValid": true,
            "ScheduledMomentMode": "TodayAtTime",
            "ScheduledMomentDate": null,
            "ScheduledMomentTime": "00:00:00",
            "ScheduledMomentStartDelay": "00:00:00",
            "ScheduledMomentGateVarPath": null,
            "ScheduledMomentGateExpected": true,
            "ScheduledMomentEnabled": true,
            "ScheduledMomentDaysOfWeek": null,
            "ScheduledMomentGateMode": "SkipIfFalse",
            "ScheduledMomentGateMaxWait": "00:00:00",
            "ScheduledMomentPastPolicy": "Skip",
            "ScheduledMomentValidationMessage": "",
            "IsScheduledMomentConfigurationValid": true,
            "ThresholdSourceType": "Variable",
            "ThresholdSourceKey": null,
            "ThresholdSourcePath": null,
            "ThresholdNumericField": null,
            "ThresholdOperator": "GreaterOrEqual",
            "ThresholdTargetValue": 0,
            "ThresholdEpsilon": 0,
            "ThresholdSamplingMode": "EventDriven",
            "ThresholdPollingInterval": "00:00:01",
            "ThresholdCrossingOnly": true,
            "ThresholdRearmMode": "Manual",
            "ThresholdGateVarPath": null,
            "ThresholdGateExpected": true,
            "ThresholdOnce": false,
            "ThresholdResetPolicy": "Manual",
            "ThresholdValidationMessage": "",
            "IsThresholdConfigurationValid": true
          }
        },
        "Execution": {
          "CooldownSeconds": 0,
          "CooldownPerUser": false,
          "ConcurrencyMode": "Queue",
          "ConcurrencyOptions": {
            "DebounceMs": 500,
            "CooldownMs": 1000,
            "QueueMaxLength": 50,
            "QueueOverflowBehavior": "DropOldest",
            "MaxParallelPerAutomation": 4
          },
          "KeySelector": null,
          "DefaultStepTimeoutMs": null,
          "AutomationTimeoutMs": null,
          "OnStepError": "Stop"
        }
      }
    ]
  }
}