- Brand
- Livereacting
- Category
- Consumer & Lifestyle
- Primary Subcategory
- Video Infrastructure & Live Visuals
Integration details
Description
Run a 24/7 live stream of pre-recorded videos, or live stream one recorded video at the time you choose, from ChatGPT. Your old videos, lessons, podcast episodes or lofi beats play as one continuous livestream, looped from a playlist in the order you choose. LiveReacting's servers do the streaming, so your computer can be off. With this plugin you build the stream from your LiveReacting video library, multistream it to YouTube, Facebook, Twitch or any other platform, schedule it to go live later, change the playlist while it is live, and check how it is running. Streams you built in LiveReacting with overlays, polls or trivia start from here too. You need a LiveReacting account that includes API access. Connect your channels once in LiveReacting, and the plugin uses them. Videos come from your library, a direct link, Google Drive, Dropbox, or videos you already published on your own YouTube channel.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Video Infrastructure & Live Visuals
- Secondary Subcategories
- None listed
- Brand
- Livereacting
- Access
- Account required
- First tracked
- 2026-10-30
- Tool count
- 30
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for LiveReacting
Get updates when LiveReacting’s Discoverability Score or category rank changes.
Competing in ChatGPT Video Infrastructure & Live Visuals
View Category30 tools agents can invoke
Add one layer to a scene that already exists. Three types can be created: "videoPlaylist" and "audioPlaylist", which hold a list of files, and "video", which holds a single file. Text, image and interactive layers are readable with livereacting_get_layer but can only be created in the LiveReacting Studio. Use this to put a playlist into a scene that has none -- for example a scene made by livereacting_manage_scene, or a background music track alongside a video playlist. For a NEW scene and its playlist together use livereacting_create_scene_with_playlist instead; that tool also wires the auto-switch that chains a 24/7 channel. For a video or audio playlist, loop defaults to true; pass loop: false for a clip that must play once. The settings are read strictly by type, and the wrong ones are dropped without an error: a "video" layer ignores files, and a playlist layer ignores fileId. settings.files is optional, so a playlist created without it is created empty; send the files here, or fill the layer afterwards with livereacting_set_playlist. If autoSynch is on and the project is streaming, this copies the full saved project configuration to the running stream. It can overwrite changes made only to the live stream, including settings of existing layers. This is NOT idempotent: calling it twice adds two layers. After a timeout, read the scene with livereacting_get_scenes to see whether the layer arrived, rather than calling again. To change a playlist afterwards use livereacting_set_playlist.
livereacting_add_layer
Add a scene to a project and fill it with a video playlist in one call. This is the normal way to put content into a project, because a new project is created empty. It behaves differently depending on what the project already holds, and you do not have to choose: on a project with no scenes it creates the first scene and makes it active, which a stream needs in order to play anything; on a project that already has a scene it also wires the previous scene to switch automatically into this new one when its playlist ends, which is how a 24/7 channel is chained day by day. In that second case the previous scene must already contain a video playlist layer, otherwise the call is refused. File ids come from livereacting_list_media or livereacting_import_media, and every file has to have finished importing and encoding. To change the playlist afterwards use livereacting_set_playlist. This builds a video playlist. For an audio playlist use livereacting_add_layer. Text, image and interactive overlays are readable but can only be created in the LiveReacting Studio. Sending audio files here produces a video playlist holding audio, which is not what the customer wants and is not reported as an error.
livereacting_create_scene_with_playlist
Cancel scheduled streams. Give a liveId to cancel that one schedule, or give only a projectId to cancel every schedule on that project. Cancelling cannot be undone; the schedule has to be created again with livereacting_schedule_stream. This only ever touches SCHEDULED streams. It cannot stop a running one -- use livereacting_stop_stream for that. Call this before livereacting_schedule_stream when a project already has schedules, because scheduling refuses to run alongside them.
livereacting_cancel_schedules
Check that the given destinations still have a working login before starting a stream. Returns valid true or false per destination, with a reason when it is false. An expired YouTube access token is renewed during this check when the account still holds a refresh token; when renewal fails, the customer has to reconnect the destination in the LiveReacting Studio. Call this before livereacting_start_stream so a failure is explained up front rather than mid-broadcast. What valid: true means depends on the platform. For YouTube, Facebook and Twitch the platform was contacted and the login works. For custom RTMP, HLS and SRT destinations, which includes LinkedIn and X, nothing is checked at all: valid: true is returned without contacting anything, and without checking that a server URL and a stream key exist. It says only that the destination is on the account.
livereacting_validate_destinations
List every file in this account that is queued for encoding or being encoded right now, with its progress. Returns pollAfterSeconds, the number of seconds to wait before asking again. Poll no more often than once every 15 seconds: the account is limited to 150 requests per minute in total, and encoding a long video takes minutes, not seconds. When the list is empty there is nothing left to wait for.
livereacting_get_encode_status
Check how far an import started by livereacting_import_media or livereacting_import_from_url has got. Returns the status, a progress percentage and pollAfterSeconds, the number of seconds to wait before asking again. Poll no more often than once every 10 seconds: the account is limited to 150 requests per minute in total, and a tight loop spends that budget on nothing. `done` only means the transfer finished. It does not mean the file can be used: an imported video very often still needs encoding, and a playlist built with it is refused until that is done. Read `usable`, which is true only when the file can go straight into a playlist, and `nextStep`, which names the tool to call when it cannot. A YouTube playlist import answers for the whole group: `isFolder` is true and `files` lists each video with its own status. The fileId keeps working after the import finishes and can be polled again at any time. The `files` list reflects the videos that exist now, so it shrinks if one is deleted later. It names the videos but not their ids; call livereacting_list_media to get those.
livereacting_get_import_status
Create an empty LiveReacting project. This is the first step of building a stream, and the project starts with no scenes and no content: call livereacting_create_scene_with_playlist next to put video in it, then livereacting_start_stream or livereacting_schedule_stream. For a 24/7 looping channel pass duration { manual: true } and autoSynch true here; livereacting_create_scene_with_playlist then loops the playlist by default, so there is nothing else to set. For a stream that must stop on its own pass duration { manual: false, planned: <seconds> }. Always send duration: a project created without it gets a fixed duration of one hour and the stream stops after an hour. Destination ids come from livereacting_list_destinations and cannot be created here. Two limits worth knowing: 1080p formats need a 1080p plan or better and 4K formats need a 4K plan, and a Facebook-only stream is capped at 8 hours whatever duration you ask for. Privacy settings and advanced YouTube options can only be set in the LiveReacting Studio.
livereacting_create_project
Create, rename or delete a scene, chosen with the action argument. action "create" adds an empty scene — it holds no content until you add a layer, so prefer livereacting_create_scene_with_playlist when the scene is meant to play video. action "update" renames a scene and changes nothing else. action "delete" PERMANENTLY REMOVES the scene and every non-pinned layer inside it, including its playlist. There is no undo. Any other layer set to auto-switch into the deleted scene has that link cleared, which silently breaks a 24/7 chain, so the response lists the layers it changed — read it. The last remaining scene cannot be deleted, and deleting the active scene makes the first remaining scene active. Confirm with the customer before deleting anything.
livereacting_manage_scene
Finish an upload started with livereacting_upload_file, after every part has been sent. The file then appears in the media library and this returns it. If a part is missing or has the wrong size, the answer is UPLOAD_INCOMPLETE and names the parts: send them again and call this tool again with the same token. A video goes through the same checks and encoding as a Studio upload; when `issues.errors` is not empty the file needs livereacting_encode_media or a running encode before it can go in a playlist.
livereacting_complete_upload
Read one file from the media library by id: its name, type, duration, size, folder and encoding state. Ask for metadata when you need the technical detail -- resolution, frame rate, codecs -- for example to decide whether the file needs livereacting_encode_media before it can be streamed.
livereacting_get_media_file
Read one project in full: its name, video format, audio quality, planned duration, connected destinations, current stream status and how many schedules are pending. Use this to check a project is set up the way the customer expects before starting a stream. Scenes are left out by default because they can be long; pass includeScenes only when you actually need them, or use livereacting_get_scenes, which pages properly.
livereacting_get_project
Bring a file into the media library from a Google Drive, Dropbox or YouTube URL. For a direct link to a media file on any other host, use livereacting_import_from_url; for a file on the customer's own computer, use livereacting_upload_file. The import runs in the background. This returns a fileId straight away; poll livereacting_get_import_status with it to find out when the file is ready. Only one import can run at a time per account. Only a single YouTube video imports here: a YouTube playlist page or channel URL is refused with VALIDATION_ERROR, so do not promise a customer that a playlist can be imported through this tool. Pass one video URL at a time.
livereacting_import_media
Bring a file into the media library from a direct http or https link to a video, audio or image file on any public host, for example a CDN or storage bucket URL. The link must return the file itself, not a web page: the content type decides the media type, and it must match `type`. Links that point to a private or internal address are refused with URL_NOT_ALLOWED. The file must fit the plan's max file size; a video counts against the storage quota. Google Drive, Dropbox and YouTube links go to livereacting_import_media instead. The import runs in the background. This returns a fileId straight away; poll livereacting_get_import_status with it to find out when the file is ready. Only one import can run at a time per account.
livereacting_import_from_url
List the video, audio and image files in this LiveReacting account's media library, and optionally the folders they are organised into. Use the returned file ids when building a playlist. A file whose issues.errors is not empty cannot go in a playlist until the problem is fixed, which usually means encoding it with livereacting_encode_media first. Files and folders are paginated separately: `offset` pages the files, `folderOffset` pages the folders. Set `includeFolders: true` to get folders as well, which also requires `type`. To add a file, use livereacting_upload_file for a file on the customer's machine, livereacting_import_from_url for a direct link to a media file, or livereacting_import_media for a Google Drive, Dropbox or YouTube link.
livereacting_list_media
Read the scenes of a project, with a summary of the layers in each one. A scene is one arrangement of content; exactly one scene is active at a time and the active scene is what goes out on air. Give a sceneId to read a single scene, or leave it out to list them all. Use this to find the layer id of a playlist before calling livereacting_get_layer or livereacting_set_playlist, and to find the scene id before livereacting_activate_scene. Returns 20 scenes at a time and at most 50 layer summaries per scene.
livereacting_get_scenes
List a project's finished broadcasts, newest first: the live id, when each started and ended, how long it ran, peak viewers and any error, per destination. Use a live id from here with livereacting_get_stream_analytics. Only finished broadcasts appear; read a running one with livereacting_get_stream_status.
livereacting_list_broadcasts
List the LiveReacting projects on this account, newest first. A project is the reusable template for a stream: its video format, its destinations, and the scenes that hold the content. Start here when the customer names a stream but you do not have its id. Each entry carries the project id, its name, whether it is live right now, and how many future schedules it has. Use livereacting_get_project for the detail of one of them. Returns 20 projects at a time.
livereacting_list_projects
List the YouTube, Facebook, Twitch, LinkedIn, X and custom RTMP destinations connected to this LiveReacting account. Use the returned ids when creating a project. A destination has to be connected in the LiveReacting Studio first; you cannot add one from here.
livereacting_list_destinations
Make one scene the active scene, so its content is what goes out on air. Exactly one scene is active at a time, and activating a scene deactivates the previous one. Calling it again for the same scene changes nothing, so it is safe to repeat. If the project is streaming and autoSynch is on, the switch reaches the live stream immediately; the response says whether it did with the synced field. Scene ids come from livereacting_get_scenes.
livereacting_activate_scene
Push the project's current setup to the stream that is running now. A running stream uses the copy of the project it was started with, so edits made while it runs are invisible to viewers until they are synced. Only needed when the project has autoSynch off; with autoSynch on, edits reach the stream by themselves. Safe to call more than once -- syncing twice has the same effect as once. Fails with NO_ACTIVE_LIVE when nothing is running.
livereacting_sync_stream
Queue video files for encoding so they can be streamed. A file whose resolution or frame rate is above the account limit has to be encoded before it will play in a stream; livereacting_get_media_file with includeMetadata tells you which ones. Encoding runs in the background: this returns immediately with the files it queued and the ones it skipped (not found, not a video, or already queued or encoding). Poll livereacting_get_encode_status to find out when they are ready. A file that has already finished encoding is encoded again if you send it, so send only files that still need it, and after a timeout check livereacting_get_encode_status before you call this again.
livereacting_encode_media
Read one layer in full: its type, name, position, settings, and — for a playlist layer — its items and which one is playing. Layer ids come from livereacting_get_scenes. A playlist can hold up to 600 videos, so the items are returned 50 at a time: itemTotal is the real length and nextOffset pages through the rest. Read every page before you decide what a full playlist contains. Every layer type is readable here, including the text, image and interactive layers that can only be edited in the LiveReacting Studio.
livereacting_get_layer
Read the analytics of one broadcast. Get the broadcast id from livereacting_list_broadcasts. type: "youtube" is included with every paid plan. type: "playlists" is available on request rather than on every plan, so it can return FEATURE_NOT_AVAILABLE for an account that is otherwise working normally. Tell the customer to email [email protected] to ask for access to it. type: "youtube" returns what YouTube reports for the broadcast -- views, watch time, likes, peak and average concurrent viewers, revenue where it is available, plus traffic sources, daily trend, age and gender split, devices and geography. The channel must also have granted analytics access. type: "playlists" returns what LiveReacting itself recorded: one row per recorded playback action, naming the file, the action, its timestamp and how many people were watching at that moment. The row-shaped YouTube sections are only returned when you name them in `sections`, 50 rows at a time. There is no CSV export here; use the REST API for that.
livereacting_get_stream_analytics
Read what a project's stream is doing right now: the overall status (LIVE, PREPARING, SCHEDULED or OFFLINE), the active live id, how long it has been running, and per destination the status, viewer count, peak viewers, start and stop times, duration and any error. When a destination is failing, read its error field first. error: "AUTH_ERROR" means the customer's connection to that platform is expired or invalid, and nobody can fix it through this API: tell them to reconnect that destination in the LiveReacting Studio. The response also sets destinationsNeedingReconnect and a notice when this happens. tokenExpired appears only when a platform positively reports an expired session, which in practice only Instagram does. Its absence means we have no signal, NOT that the connection is healthy. Custom RTMP, HLS and SRT destinations have no login at all, so they never report it; when one of those fails the cause is usually a wrong server URL or stream key, or the receiving end rejecting the connection. Poll no more often than every 5 seconds. A stream needs tens of seconds to reach LIVE, and the account is limited to 150 requests per minute across all tools, so tight polling rate-limits the customer's other work. This reports only what the platform has recorded. It is not an encoder health check, and a status of LIVE is not by itself proof that video is reaching viewers.
livereacting_get_stream_status
Replace the entire contents of a video or audio playlist layer. The files you send become the whole playlist: anything already in it that you do not send again is removed, and playback restarts from the first item. There is no way to append with this tool. So to add, remove or reorder a video, first call livereacting_get_layer and page through every item until nextOffset is null, apply your change to that complete list, and send the complete list back. Sending only the new video deletes everything else. The response reports removedItemCount and warns whenever the playlist got shorter — check it before telling the customer the change worked. Writes are not merged. If two callers write the same playlist at once, the later write replaces the earlier one and both report success, so do not run parallel edits against one playlist. If the customer may be editing it in the LiveReacting Studio at the same moment, read the list again immediately before writing, and tell them not to edit while you work. Files must have finished importing and encoding. A playlist holds at most 600 items. This tool works on videoPlaylist and audioPlaylist layers only. This is NOT idempotent: sending the same list twice produces the same contents, but each call regenerates every playlistItemId and restarts playback. After a timeout, read the layer with livereacting_get_layer rather than calling again.
livereacting_set_playlist
Schedule a project to go live at one or more future times. Nothing starts now. Four rules the API will otherwise only teach you by refusing the call: 1. A project can hold one set of schedules. If it already has any, this fails with ACTIVE_SCHEDULES_EXIST. Call livereacting_cancel_schedules first, then schedule again. Scheduling does not replace existing schedules. 2. Every date must be at least 3 minutes and at most 28 days in the future. 3. More than one date requires a fixed duration on the project. A manual duration accepts a single date only, because the platform cannot tell when the runs would overlap. Set a duration with livereacting_update_project, or schedule one date at a time. 4. With a fixed duration, one run must end at least 3 minutes before the next one starts. A shorter gap is refused, and the message names the earliest time the later run can take. Every run stops at the plan's maximum stream length, and a Facebook-only stream stops after 8 hours, whatever you schedule.
livereacting_schedule_stream
Start uploading a file from the machine you run on (or the customer's) into the media library. This server cannot read local files, so the upload has three steps: (1) call this tool with the file name, type and exact size in bytes; (2) send each part with an HTTP PUT to its URL, for example by running each returned command with FILE set to the local path (each prints the part's HTTP status) -- a part must be exactly its `size` in bytes, or storage refuses it with 403; (3) call livereacting_complete_upload with the uploadToken. A file up to 256 MiB is one part. If you cannot run commands or make HTTP PUT requests, you cannot upload; ask for a public link and use livereacting_import_from_url instead. The extension must match the type (video: .mp4 .m4v .mov .flv .webm .ogv .3gp .wmv .avi .mkv; audio: .mp3 .m4a .wav; image: .jpg .jpeg .png .gif .bmp .svg .heic .webp). The size must fit the plan's max file size, and a video is refused once storage is full. The part URLs and the token expire after 3 days.
livereacting_upload_file
Start streaming a project to its destinations immediately. Works on any project: a 24/7 looping playlist, a one-off pre-recorded broadcast, a simulcast to several destinations, or a stream whose overlays were built in the LiveReacting Studio. This call is NOT idempotent. If it times out, call livereacting_get_stream_status and read the status. PREPARING or LIVE means the start succeeded. OFFLINE means it did not, and only then may you call this tool again. Do not retry on a timeout: a second start can create a duplicate broadcast attempt. If the project is already running or already scheduled, this returns the existing live id instead of starting anything. Honest limits, so you do not promise the customer something the platform will not do: - Every plan has a maximum stream length, and the stream stops when it is reached, even with a manual duration. A 24/7 channel needs a plan without a length limit, such as the 24/7 plan. - A Facebook-only stream stops after a maximum of 8 hours. A 24/7 Facebook-only channel is not possible. Add another destination for longer runs. - Thumbnails and live announcements are not supported through the API.
livereacting_start_stream
End the stream that is currently running for a project. Every viewer stops watching immediately and the broadcast cannot be resumed; a later start creates a new broadcast. Confirm with the customer before calling this on a stream you did not start. This does not cancel scheduled streams. Use livereacting_cancel_schedules for those. Like starting, stopping is not idempotent: on a timeout call livereacting_get_stream_status rather than calling this again.
livereacting_stop_stream
Change the settings of an existing project. Only the fields you send are changed. Five fields are refused while the project is LIVE, PREPARING or SCHEDULED — not only while it is on air: format, duration, audioQuality, destinationIds and youtubeAdvancedSettings. To change any of those, stop the stream with livereacting_stop_stream or cancel the schedule with livereacting_cancel_schedules first. name, title, description and autoSynch can be changed at any time. Changes to title or description can also update the broadcast on its destination platforms, including a scheduled broadcast. To change the playlist use livereacting_set_playlist instead.
livereacting_update_project
LiveReacting ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve LiveReacting's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are LiveReacting alternatives on ChatGPT?
As of 2026-10-30, LiveReacting competes with agentView, AudiencePlayer, Bitmovin, Clipify, Gumlet, OTTEngine, StreamExpose, VisualSong in ChatGPT Video Infrastructure & Live Visuals, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.