Kopienas veidoti bezmaksas AI rīki, TTS un API interfeisi Twitch straumētājiem
Kopienas veidoti bezmaksas AI rīki, TTS un API interfeisi Twitch straumētājiem

Kā ģenerēt AI attēlus Streamer.bot ar pielāgotu skriptu

Uzzini, kā ģenerēt bezmaksas AI attēlus savam Twitch straumei tieši Streamer.bot iekšienē, pievienojot pielāgotu Execute Code skriptu, bez vajadzības pēc trešās puses starpniekprogramma.
Šo lapu ir tulkojuši no angļu valodas mūsu ļoti motivētie AI stažieri, lai jums būtu ērtāk. Viņi vēl mācās, tāpēc dažas kļūdas varētu būt palaistas garām. Lai iegūtu precīzāko informāciju, lūdzu, skatieties angļu versiju.
Sākums Instruktīvi ceļveži Kā ģenerēt AI attēlus Streamer.bot ar pielāgotu skriptu

PotatoHotDog piedāvā bezmaksas Generate AI Images API, ko varat izsaukt tieši no Streamer.bot, neprasot nevienu trešās puses starpprogrammatūru. Šis ceļvedis rāda, kā pievienot nelielu pielāgotu C# skriptu Streamer.bot Execute Code apakšdarbībai, kas ģenerē AI attēlu no teksta ievades un lejupielādē to diskā.

Šim skriptam nepieciešama tikai jūsu PotatoHotDog API atslēga un prompt, kas apraksta ģenerējamo attēlu, un tas saglabā lejupielādēto attēlu atvēlētā mapē jūsu Streamer.bot instalācijas direktorijā.

Sagatavojiet API atslēgu

Ja jums vēl nav API atslēgas, izveidojiet API atslēgu savā vadības panelī un saglabājiet to gatavu — nākamajā solī tā būs nepieciešama.

Dodieties uz API atslēgām Izveido API atslēgu PotatoHotDog vadības panelī

Priekšnosacījumu Argumenti

Lai ģenerētu AI attēlu, pirms Execute Code apakšdarbības palaistes jānorāda divi argumenti Streamer.bot. Citiem vārdiem, šīs divas lietas jānorāda:

  • API atslēga.
  • Instrukcijas, kas apraksta attēlu, kuru vēlaties ģenerēt.

Šie atbilst sekojošajiem Streamer.bot argumentiem:

  • potatoKey
  • potatoInstructions

Jūs norādāt argumentus savā darbībā, veicot peles labo pogu uz Apakšdarbībām, pēc tam izvēlieties Pievienot, Kodols, Argumenti, un beidzot Iestatīt Argumentu.

Pievienot apakšdarbību "Set Argument" Streamer.bot

Pievienojot koda izpildes darbību Streamer.bot

Atver Streamer.bot un dodies uz darbību cilni. Izveido jaunu darbību vai atver jau esošu, un piešķir tai nosaukumu, kuru vēlāk atpazīsi, piemēram, "PotatoHotDog AI Image".

Ar atlasīto darbību klikšķiniet uz Pievienot zem apakšdarbībām, pēc tam izvēlieties Core, kam seko Execute C# Code. Tas pievieno apakšdarbību, kurā varat ielīmēt neapstrādātu C# kodu, ko Streamer.bot kompilē un izpilda uzreiz.

Pievienojiet C# koda izpildes apakšdarbību Streamer.botā

Ielīmējiet zemāk esošo skriptu koda redaktorā. Tas lasa potatoKey un potatoInstructions argumentus, izsauc mūsu Generate AI Image API, lai ģenerētu attēlu un iegūtu tā URL, un pēc tam lejupielādē rezultējošo attēlu mapē ar nosaukumu temp_potatohotdog_images jūsu Streamer.bot instalācijas direktorijā.

using System; using System.IO; using System.Net.Http; using Newtonsoft.Json.Linq; public class CPHInline { // Tracks the version of this script for troubleshooting and support. private const string VERSION = "1.0.0"; // Base URL for the endpoint that generates an AI image. private const string BASE_URL_GENERATE = "https://api-generate-image-v1.potatohotdog.com/"; // Tracks the next numbered log argument. private int logIndex = 0; // Reuses one HTTP client for all API requests. private static readonly HttpClient httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30) }; // Adds a log message as a numbered action argument. private void Log(string message) { // Stores the message under a numbered key. CPH.SetArgument($"potatoLog{logIndex}", message); // Advances the log index for the next message. logIndex++; // Keeps the total log count in sync. CPH.SetArgument("potatoLogCount", logIndex); } // Ensures a required action argument exists and is not empty. private bool RequireArgument(string name, out string value) { // Fails when the argument is missing or blank. if (!CPH.TryGetArg(name, out value) || string.IsNullOrWhiteSpace(value)) { value = ""; return false; } return true; } // URL-encodes a value so it can safely be used in a query string. private string EncodeUrlValue(string value) { // Escapes reserved characters for safe use in a URL. return Uri.EscapeDataString(value); } // Performs an HTTP GET request and returns the response body. private string HttpGet(string url) { try { Log($"GET {url}"); // Sends the HTTP request synchronously. HttpResponseMessage response = httpClient.GetAsync(url).GetAwaiter().GetResult(); // Reads the complete response body. string responseBody = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); Log($"HTTP status: {(int)response.StatusCode} {response.ReasonPhrase}"); // Stops when the server returns an unsuccessful status code. if (!response.IsSuccessStatusCode) { Log($"Error: HTTP request failed with status {(int)response.StatusCode} {response.ReasonPhrase}."); // Logs the server error response when available. if (!string.IsNullOrWhiteSpace(responseBody)) { Log($"Error response: {responseBody}"); } return null; } Log($"Received {responseBody.Length} characters."); return responseBody; } catch (Exception exception) { // Logs network, timeout, and other HTTP-related exceptions. Log($"Error: HTTP request failed: {exception.Message}"); return null; } } // Downloads a file from a URL and saves it to disk. private bool DownloadFile(string url, string destinationPath) { try { Log($"Downloading image from \"{url}\"."); Log($"Saving image to \"{destinationPath}\"."); // Sends the image download request. HttpResponseMessage response = httpClient.GetAsync(url).GetAwaiter().GetResult(); Log($"Image download HTTP status: {(int)response.StatusCode} {response.ReasonPhrase}"); // Reads the complete image response into memory. byte[] fileData = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); // Stops when the image server returns an unsuccessful status. if (!response.IsSuccessStatusCode) { Log($"Error: Image download failed with status {(int)response.StatusCode} {response.ReasonPhrase}."); return false; } // Rejects an empty image response. if (fileData == null || fileData.Length == 0) { Log("Error: The downloaded image file is empty."); return false; } // Writes the downloaded image bytes to the destination file. File.WriteAllBytes(destinationPath, fileData); Log($"Downloaded {fileData.Length} image bytes."); // Confirms that the image file now exists on disk. if (!File.Exists(destinationPath)) { Log("Error: The image download completed, but the file does not exist on disk."); return false; } // Reports the final file size from disk. FileInfo fileInfo = new FileInfo(destinationPath); Log($"Image file saved successfully. File size: {fileInfo.Length} bytes."); return true; } catch (Exception exception) { // Logs download, filesystem, and permission errors. Log($"Error: Could not download the image file: {exception.Message}"); return false; } } // Extracts a required string value from a JSON response. private bool TryGetJsonString(string json, string propertyName, out string value) { value = ""; try { // Parses the response body as a JSON object. JObject jsonObject = JObject.Parse(json); // Retrieves the requested JSON property. JToken property = jsonObject[propertyName]; if (property == null) { Log($"Error: JSON response does not contain \"{propertyName}\"."); return false; } value = property.ToString(); // Rejects empty JSON string values. if (string.IsNullOrWhiteSpace(value)) { Log($"Error: JSON property \"{propertyName}\" is empty."); value = ""; return false; } return true; } catch (Exception exception) { // Logs malformed JSON and property conversion errors. Log($"Error: Could not parse JSON property \"{propertyName}\": {exception.Message}"); return false; } } // Creates and returns the dedicated PotatoImage folder. private string GetImageFolder() { // Uses Streamer.bot's application directory instead of the process working directory. string streamerBotFolder = AppDomain.CurrentDomain.BaseDirectory; // Places generated image files inside a dedicated subfolder. string imageFolder = Path.Combine(streamerBotFolder, "temp_potatohotdog_images"); Log($"Streamer.bot folder: \"{streamerBotFolder}\"."); Log($"Image folder: \"{imageFolder}\"."); // Creates the image folder if it does not already exist. if (!Directory.Exists(imageFolder)) { Log("Image folder does not exist. Creating it..."); Directory.CreateDirectory(imageFolder); Log("Image folder created."); } else { Log("Image folder already exists."); } return imageFolder; } // Runs the main PotatoHotdog AI image action. public bool Execute() { // Resets log numbering for this execution. logIndex = 0; CPH.SetArgument("potatoLogCount", 0); Log("Starting script..."); // Logs the script version so runs can be tracked over time. Log($"Version: {VERSION}"); // Retrieves the PotatoHotdog API key. if (!RequireArgument("potatoKey", out string potatoKey)) { Log("Error: potatoKey variable is missing. Please login to potatohotdog.com, generate an API key, create a set variable action and save the variable \"potatoKey\" with your key."); return false; } // Retrieves the prompt instructions describing the image to generate. if (!RequireArgument("potatoInstructions", out string potatoInstructions)) { Log("Error: potatoInstructions variable is missing. Create a set variable action and save the variable \"potatoInstructions\" with a description of the image you want generated."); return false; } // Logs the non-secret input values. Log("potatoKey was provided."); Log($"potatoInstructions=\"{potatoInstructions}\""); // Builds the API URL used to generate the AI image. string generateUrl = BASE_URL_GENERATE + "?key=" + EncodeUrlValue(potatoKey) + "&instructions=" + EncodeUrlValue(potatoInstructions); // Requests generation of the AI image. string generateJson = HttpGet(generateUrl); if (generateJson == null) { Log("Error: Failed to generate the AI image."); return false; } Log($"Generate response: {generateJson}"); // Extracts the generated item's ID, reused below as the local filename. if (!TryGetJsonString(generateJson, "itemID", out string itemID)) { Log("Error: Could not retrieve itemID from the generate response."); return false; } Log($"itemID=\"{itemID}\""); // Logs the generation duration when present, purely for troubleshooting. if (TryGetJsonString(generateJson, "duration", out string duration)) { Log($"duration={duration} second(s)"); } // Extracts the generated image URL from the response. if (!TryGetJsonString(generateJson, "imageURL", out string imageURL)) { Log("Error: Could not retrieve imageURL from the generate response."); return false; } Log($"imageURL=\"{imageURL}\""); string imageFolder; try { // Resolves and creates the dedicated PotatoImage directory. imageFolder = GetImageFolder(); } catch (Exception exception) { Log($"Error: Could not create or access the image folder: {exception.Message}"); return false; } // Reuses the item's own ID as the local filename instead of minting a new one. string imageFileName = $"{itemID}.png"; // Combines the image folder and unique filename. string imageFilePath = Path.Combine(imageFolder, imageFileName); Log($"Generated image filename: \"{imageFileName}\"."); Log($"Local image path: \"{imageFilePath}\"."); // Downloads the generated image file to the PotatoImage folder. if (!DownloadFile(imageURL, imageFilePath)) { Log("Error: Failed to download the generated AI image."); return false; } // Stores the remote image URL as a final action argument. CPH.SetArgument("potatoGeneratedImageURL", imageURL); // Stores the absolute local file path as a final action argument. CPH.SetArgument("potatoGeneratedImageFile", imageFilePath); Log($"potatoGeneratedImageURL=\"{imageURL}\""); Log($"potatoGeneratedImageFile=\"{imageFilePath}\""); Log("Finished."); return true; } }

Pēc skripta ielīmēšanas atcerieties noklikšķināt uz Find Refs un Compile un pārliecinieties, ka tas tiek veiksmīgi kompilēts. Saglabājiet darbību, pēc tam palaidiet to manuāli vai sasaistiet to ar komandu vai kanāla punktu balvu, lai pārbaudītu, vai attēls tiek pareizi ģenerēts.

Ielīmējiet skriptu un to kompilējiet Streamer.botā

Apskatiet lejupielādēto attēlu

Kad darbība ir izpildīta, varat apskatīt darbības mainīgos, izmantojot darbību vēsturi, lai pārliecinātos, ka viss darbojās kā paredzēts.

Tur atradīsiet lokālo ceļu, kurā tika saglabāta ģenerētā bilde uz diska, mapē temp_potatohotdog_images jūsu Streamer.bot instalācijas direktorijā.

Apskatiet ģenerēto attēlu mainīgos darbības vēsturē

Atver to mapi, lai tieši apskatītu lejupielādēto attēlu.

Apskatiet Action mainīgos, izmantojot Action vēsturi Streamer.bot

Problēmu novēršana

Ja skripts nestrādā kā gaidīts, labākais veids, kā to izdiagnosticēt, ir pārbaudīt darbības žurnālus.

Jūs to varat izdarīt, pārbaudot savas darbības mainīgās, izmantojot Darbību vēsturi.

Apskatiet Action mainīgos, izmantojot Action vēsturi Streamer.bot

Šis ceļvedis pirmo reizi publicēts 2026-07-19 un pēdējo reizi atjaunināts 2026-07-19.

Citas Līdzīgas Rokasgrāmatas

Šeit ir dažas citas pamācības, kuras jums varētu noderēt.

Kā savienot Streamer.bot ar AI
Kā savienot Streamer.bot ar AI
Uzziniet, kā ģenerēt bezmaksas AI (LLM) atbildes jūsu Twitch straumei, izmantojot Streamer.bot ar Fetch URL apakšdarbību un PotatoHotDog Generate AI Response API — nav nepieciešams pielāgots skripts.
Lasīt Ceļvedi
Kā atskaņot bezmaksas TTS skaņu Streamer.bot ar dinamiskajiem pārlūka avotiem
Kā atskaņot bezmaksas TTS skaņu Streamer.bot ar dinamiskajiem pārlūka avotiem
Uzzini, kā atskaņot bezmaksas AI TTS (Text-to-Speech) audio savā Twitch straumē Streamer.bot vidē, izmantojot Dynamic Browser Source un vienkāršu Fetch URL webhook pieprasījumu — nav nepieciešams pielāgots skripts.
Lasīt Ceļvedi
Kā bezmaksas TTS skaņu palaist Streamer.bot ar pielāgotu skriptu
Kā bezmaksas TTS skaņu palaist Streamer.bot ar pielāgotu skriptu
Uzzini, kā spēlēt bezmaksas AI TTS (Text-to-Speech) audio savā Twitch straumē tieši iekš Streamer.bot, pievienojot pielāgotu Execute Code skriptu, Speaker.bot nav nepieciešams.
Lasīt Ceļvedi