Unelte AI gratuite alimentate de comunitate, TTS și API-uri pentru streamerii de pe Twitch
Unelte AI gratuite alimentate de comunitate, TTS și API-uri pentru streamerii de pe Twitch

Cum să generezi imagini AI în Streamer.bot cu un script personalizat

Învață cum să generezi imagini AI gratuite pentru fluxul tău de pe Twitch direct în Streamer.bot, adăugând un script personalizat Execute Code, nu este necesar niciun middleware de la terți.
Ez az oldal angolról le lett fordítva a rendkívül motivált AI-gyakornokaink közreműködésével az Ön kényelméért. Még tanulnak, így előfordulhat, hogy néhány hiba becsúszott. A legpontosabb információkért kérjük, tekintse meg az angol verziót.
Acasă Ghiduri pas cu pas Cum să generezi imagini AI în Streamer.bot cu un script personalizat

PotatoHotDog oferă un API gratuit pentru Generarea Imaginilor AI pe care îl poți apela direct din Streamer.bot, fără a avea nevoie de un middleware terț. Acest ghid îți arată cum să adaugi un mic script personalizat în C# într-o subacțiune Execute Code din Streamer.bot, care generează o imagine AI pornind de la un prompt text și o descarcă pe disc.

Scriptul are nevoie doar de cheia ta API PotatoHotDog și de un prompt care descrie imaginea pe care vrei să o generezi, iar imaginea descărcată este salvată într-un dosar dedicat din directorul de instalare al Streamer.bot.

Pregătește o cheie API

Dacă nu ai deja una, generează o cheie API din panoul tău de bord și păstrează-o la îndemână; vei avea nevoie de ea în pasul următor.

Accesează cheile API Generează o cheie API în panoul de control PotatoHotDog

Argumente Prealabile

Pentru a genera o imagine AI, două argumente trebuie specificate în Streamer.bot înainte ca subacțiunea Execute Code să ruleze. Sau, cu alte cuvinte, aceste două lucruri trebuie să fie specificate:

  • O cheie API.
  • Instrucțiunile promptului care descriu imaginea pe care vrei să o generezi.

Acestea corespund următoarele argumente ale Streamer.bot:

  • potatoKey
  • potatoInstructions

Specificați argumentele în acțiunea dumneavoastră, făcând clic dreapta pe Sub Actions, apoi selectați Add, Core, Arguments, și în cele din urmă Set Argument.

Adaugă o subacțiune Set Argument în Streamer.bot

Adăugarea unei acțiuni Execute Code în Streamer.bot

Deschide Streamer.bot și mergi la fila Acțiuni. Creează o acțiune nouă, sau deschide una existentă, și dă-i un nume pe care îl vei recunoaște mai târziu, cum ar fi "PotatoHotDog AI Image".

Cu acțiunea selectată, faceți clic pe Adăugați sub Acțiuni, apoi alegeți Core, apoi Executați Cod C#. Acest lucru adaugă o subacțiune în care puteți lipi cod C# brut pe care Streamer.bot îl compilează și rulează în timp real.

Adaugă o sub-acțiune de executare a codului C# în Streamer.bot

Lipește scriptul de mai jos în editorul de cod. Citește argumentele potatoKey și potatoInstructions, apelează API-ul nostru Generate AI Image pentru a genera imaginea și a obține URL-ul acesteia, iar apoi descarcă imaginea rezultată într-un folder numit temp_potatohotdog_images din directorul de instalare al Streamer.bot.

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; } }

După ce ai lipit scriptul, amintește-ți să dai clic pe Find Refs și Compile și să te asiguri că se compilează cu succes. Salvează acțiunea, apoi declanșează-o manual sau leag-o de o comandă sau de o recompensă de puncte pe canal pentru a testa că imaginea este generată corect.

Lipește scriptul și compilează-l în Streamer.bot

Verificați imaginea descărcată

Odată ce acțiunea a rulat, poți verifica variabilele acțiunii prin Istoricul Acțiunilor pentru a confirma că totul a funcționat conform așteptărilor.

Acolo vei găsi calea locală unde imaginea generată a fost salvată pe disc, în folderul temp_potatohotdog_images din directorul de instalare al Streamer.bot.

Inspectați variabilele imaginilor generate în istoricul acțiunilor

Deschide acel folder pentru a vizualiza direct imaginea descărcată.

Inspectează variabilele de acțiune prin istoricul acțiunilor din Streamer.bot

Depanare

Dacă scriptul nu se comportă așa cum vă așteptați, cel mai bun mod de a depana este să verificați jurnalele de acțiuni.

Puteți face acest lucru inspectând variabilele Action prin Istoricul Acțiunilor.

Inspectează variabilele de acțiune prin istoricul acțiunilor din Streamer.bot

Acest ghid a fost publicat pentru prima dată la data de 2026-07-19 și a fost modificat ultima dată la data de 2026-07-19.

Alte Ghiduri Similare

Iată câteva alte ghiduri despre cum să faci lucruri care s-ar putea să-ți fie utile.

Cum să conectezi Streamer.bot la o inteligență artificială
Cum să conectezi Streamer.bot la o inteligență artificială
Învață cum să generezi răspunsuri AI (LLM) gratuite pentru fluxul tău de Twitch în Streamer.bot folosind o subacțiune Fetch URL și API-ul PotatoHotDog Generate AI Response, fără a fi necesar un script personalizat.
Citește ghidul
Cum să redați sunet TTS gratuit în Streamer.bot cu surse de browser dinamice
Cum să redați sunet TTS gratuit în Streamer.bot cu surse de browser dinamice
Învață cum să redai audio AI TTS (Text-to-Speech) gratuit pentru stream-ul tău Twitch în Streamer.bot folosind o Dynamic Browser Source și o cerere webhook Fetch URL simplă, nu este necesar un script personalizat.
Citește ghidul
Cum să redați audio TTS gratuit în Streamer.bot cu un script personalizat
Cum să redați audio TTS gratuit în Streamer.bot cu un script personalizat
Învață cum să redai gratuit audio AI TTS (Text-to-Speech) pentru stream-ul tău de pe Twitch direct în Streamer.bot, prin adăugarea unui script personalizat Execute Code; Speaker.bot nu este necesar.
Citește ghidul