# Changelog What changed, written for people who use Clips Studio rather than people who read the commits. Dates are release dates. This project is in **alpha**: versions move fast, and things listed as fixed were often broken in a way that only showed up on somebody else's machine. --- ## Unreleased ### Added - **Optional Clip updates.** App-wide Approve/Deny cards, private Discord updates and an Away from desk approval gate, with local-model wording and plain-text fallback. Includes a configurable attorney joke popup. Off by default. - **Connect your Twitch account** (new). In Settings → Connected accounts you register a free Twitch application once (the card lists the steps), paste its Client ID, then sign in on Twitch's own page with a code. No Clips Kitty account is needed, and the sign-in is kept encrypted on this PC. Twitch is asked only for the permissions you tick, and none is ticked to start with. An account that needs signing in again shows Reconnect, which asks for the same permissions. - **Watch my channel.** Adds your connected channel to Watched channels with the same choices as Add a channel (from Settings: your Generate settings, and clips wait for you). Its new videos are then found through your connection, and through the public video list, as before, whenever the connection needs reconnecting or Twitch doesn't answer, so the watch keeps going. If you disable or uninstall a Gaming detector while the Watch form is open, it returns to **All games (Clips Kitty)** so adding a channel still works. - **Viewer nominations.** With the chat permission ticked you can start and stop collecting !clip, !chaos and !funny from your channel or a channel you watch, with command counts and a timeline for each stream. After a broadcast ends, Clips Kitty looks for its matching Twitch recording and keeps checking for up to six hours, including across restarts. In Connected accounts, use **Bind recording** to check the recording against your stream clock and confirm the offset. The complete downloaded recording can then use those mapped nominations. These workflows still need live-account verification. - **For people who make pipelines:** a pipeline you allow can read your channel's Twitch details, link to a moment of the Twitch VOD it is clipping, and make a Twitch clip of that moment, all through Clips Kitty and never with your Twitch sign-in. Links and clips work when the video is the whole Twitch broadcast, as Watched channels downloads it. A pipeline can't clip your live stream. ### Changed - Plugin local-model requests now share their requested timeout between checking model capabilities and generating an answer. A capability check that uses the budget no longer starts another full-length request. - Plugins can reuse validated results in an app-managed cache without changing their installed files, and can see the runner's actual deadline to finish optional review before it expires. Unavailable cache storage does not stop a run. Clips are framed and chosen in two new ways, on for everyone. Either can be turned off with one line in your settings file: `%LOCALAPPDATA%\Clips Studio\settings.yaml` in the installed app (`config/settings.yaml` if you run Clips Kitty from its code). Restart Clips Kitty after you change it. - **Framing follows the cut, and a clip opens on the person's face.** In an edited video, a new shot could open framed on where the last shot's person stood, and move to the new person only about a second later, and many cuts were missed or caught a few frames late. Now cuts are found to the frame, and the crop moves to the person in the new shot on the cut itself. A clip usually opens on the person's face, where it used to open on their body and slide over to the face during the first second. A shot with nobody in it opens on the centre (or keeps the last framing, with `shot_aware_no_subject: hold` under `tracking:`) until someone clearly visible appears. Framing takes about a third longer on a video with many cuts, and a little longer on handheld footage. Only the standard crop changes: Podcast (which has its own entry below), Gaming / Reaction layouts and Sports frame their own way. To frame as before, add the line `shot_aware: false` under `tracking:`. - **Clip selection 2.** The moments found from the sound, the picture and chat are scored by your AI model eight at a time, so they no longer all fall back to a flat 50 when a local model runs out of room scoring them at once. A long video's later moments are no longer crowded out by its first half, and a transcript pick scored below your minimum score no longer hides a moment it overlaps. A clip's start no longer skips past the line it was picked for, and a clip that would start partway into a sentence goes back to where the sentence begins, up to 8 seconds earlier. Videos scored as gaming (Gaming / Reaction, or Vertical Live's Gaming / reaction choice) and Sports matches choose clips as before, and so does Longform unless you add `longform_selection: 2` under `scoring:`. To choose clips as before, add the line `selection: 1` under `scoring:`. - Podcast mode now frames whoever is talking in each shot (not the person moving their mouth most), follows a new speaker in a long shot, and snaps on every camera cut. ### Fixed - **Longform no longer fails with "concat join failed" when a video's title has an apostrophe** (#197), as in "I'll" or "Let's". Clips of such a video also keep their end card, which they had quietly been made without, and its story reels join again. - **A clip no longer plays for a few seconds while its card says a minute** (#213). When the graphics card stopped decoding a clip partway, the rest was dropped and the clip was saved anyway. It now finishes on the processor, and a clip that still comes out much shorter than planned is reported as failed instead of saved. - **"Use standard processing" on a gaming video that Vertical Live turned away now makes it with Gaming / Reaction,** the split-screen layout. It used to score the clips as a game but frame them with the plain crop, facecam and all. - **A bug report sent from the app now describes the video you picked in it,** not whichever video was processed last. - **Basketball clips that cut to a close-up no longer start the close-up off-centre and jump onto the player.** A close-up that moved fast from its first frame was taken for a fade, and the crop kept the wide shot's framing over it until the "fade" ended. - A basketball close-up no longer slides off the player onto a fan or the empty seats at the side of the picture. - **Clips no longer open with a black moment on Reels, TikTok, Shorts and other apps,** and story reels no longer flash a frame of the end card between moments. - **In Soccer clips the crop now jumps to the new shot on the cut instead of sliding across it**, a cut straight out of a fast pan included, and on a fade into a replay it jumps as the fade completes. A fast pan is no longer taken for a cut, which made the crop jump and start looking for the ball again. Each shot also opens on the play, where it could open beside it and slide over during its first seconds. --- ## 2.1.0: Basketball, and a Marketplace for new pipelines Basketball joins Soccer under Sports, and the new Marketplace installs pipelines and plugins that other people build for Clips Kitty. This release also fixes model downloads that stopped at 100%, new Kick VODs that read as deleted, and caption corrections in other languages. ### Added - **YouTube cookies, for when YouTube keeps saying "confirm you're not a bot".** Under **Settings → Advanced settings**, choose **From Firefox** (signed in to YouTube there) or a cookies.txt file exported from a browser signed in to YouTube. The file is copied into Clips Kitty's data folder, so moving the original doesn't break it, and turning the setting off deletes that copy. Clips Kitty uses it only when YouTube has refused a download both the ordinary way and over IPv4; every other download stays signed out. Signed in, YouTube's player needs its JavaScript run, so the app now carries QuickJS (2 MB) for that one request. Chrome and Edge lock their cookies on Windows, so they are not offered. (#136) - **A Marketplace, and Awesome Clips Kitty.** Other developers can now write their own "find the best moments" step (a pipeline) and list it; you install one from the new **Marketplace** screen and switch it on for a video with the **Pipeline** option. Every listing says what it may do, where it runs, what it needs and its licence, and asks you to confirm before anything is installed. Nothing changes until you install something. The Marketplace also shows **Awesome Clips Kitty**, the list of integrations, apps and tools that other people have built with Clips Kitty. It lists only what runs in Clips Kitty or uses it: a link to another project is not an entry. The list is its own repository, github.com/ColinGPT9/awesome-clips-kitty, where a developer adds a pipeline with a pull request of one file. Labels: ✓ Official (made by this project), ✓ Compatible (passed automated checks; not a security review), ★ Featured and Community. Installs from the Marketplace can be counted anonymously, with a switch to turn it off; nothing is counted yet. The developer kit is now MIT-licensed; the app stays AGPL-3.0-or-later. (Experimental routes: `/plugins`, `/marketplace`, `/marketplace/catalog`, `/marketplace/counting`, `/plugin-models`; a plan from `POST /plugins/plan` carries the install screen as `text`.) (#129) - **New pipelines without waiting for an update, and nothing else to install.** The Marketplace checks Clips Kitty's online list when it opens, at most once a day, so a newly listed pipeline or a new version shows up without a new version of the app; **Check for new pipelines** checks at once. With a pipeline installed, the app also checks when it starts, so a warning about a harmful version arrives without opening the Marketplace. Until a release includes it, what the list adds shows as Community. The check fetches one file from GitHub and sends nothing about you or what you browse; a switch at the bottom of Browse turns it off. Pipelines also run on the Python inside Clips Kitty now, so a creator never installs Python for one. (Experimental routes: `/marketplace/online`; `/marketplace/refresh` now needs the desktop app.) - **The Marketplace in plain words.** Browse and Installed are the only tabs: installing a pipeline you're writing, from a folder or a link, is now **For developers**, a link at the bottom of Browse. The Marketplace and the install screen say what a pipeline is, where it comes from and what it may do in everyday words, and keep the exact details one click away under **Technical details**. What you tick before installing, the warning that a pipeline can do anything you can do on your PC, and what "Clips Kitty hands this over" and "the developer says so" mean are in all 18 of the app's other languages. A download that fails says why in one sentence (no connection, files no longer there, a full disk or a damaged download) and keeps the details in the log. Apps, tools and the other entries of Awesome Clips Kitty each get one button, to their download page or website where the list has one, which opens your browser after showing you the address; entries that need the command line or Python say so and come last. - **Rate & understand: Marketplace plugins that look at your moments.** Once you have installed a Marketplace plugin that can rate or understand moments, adding a video shows a new switch, **Rate & understand**. Clips Kitty (or Sports, Gaming scoring or a pipeline) still finds the moments. Then up to three plugins can say what happens in each one, and up to three can give each one a new score, in the order you choose. What a plugin says happens in a moment goes to the AI that writes the clip's title, description and hashtags. A plugin's score decides which clips are made and their order: the last plugin's score counts, and a moment it scores under your minimum score is set aside (a must-have never is). Clips Kitty does any step you leave to it, and a video without the switch is made exactly as before. Not with Longform. The clip editor shows each plugin's score and notes, and the video page says what each plugin did, or why Clips Kitty made the clips without it. The Marketplace marks what each plugin does (Finds moments, Understands moments, Rates moments), how long Clips Kitty lets it work on your moments (10 minutes unless the plugin says otherwise), and when an update starts doing something new. **A rating plugin decides what gets posted.** Where a watched channel or the daily schedule posts only the best few clips, the scores decide which ones go out, so a rating plugin decides that; elsewhere it decides the order. The job form, the channel's settings and the Marketplace say so. **A channel that posts by itself waits for you when a chosen plugin didn't run.** If a plugin chosen for a video couldn't run, Clips Kitty still makes the clips, without it. A watched channel that posts automatically then holds that video's clips for you to check and publish, and a channel that asks first says why. A job told to publish its clips when it finishes waits too. The command-line daily upload isn't held. In a channel's settings you can keep its plugins or turn them off; choosing them for a channel is done through the API for now. For developers: the plugin kit (SDK 1.1.0) adds `job.rate()` and `job.understand()`, with an example plugin, and [docs/developers/steps.md](docs/developers/steps.md) explains them. (New job options: `rate`, `understand`.) - **Suggest edits: Marketplace plugins that suggest edits for your clips.** Once you have installed a Marketplace plugin that can suggest edits, adding a video shows a new switch, **Suggest edits**. After the clips are chosen, up to three plugins, in the order you choose, can each suggest an edit for every clip: parts to cut, stretches to mute (their captions are hidden too), the volume, fades, the speed, a hook title or a layout, with a sentence saying why. The clips are made exactly as they would be without the switch. Open a clip in the editor to see each suggestion, with the plugin's name, and **Use** it, **Hide** it, or **Take it back** after using it; Take it back removes only what the suggestion added, never your own edits. Clips Kitty doesn’t put a suggestion into a clip until you use it in the editor and apply your edits (Apply edits, or Apply edits & upload). A plugin that couldn't suggest anything never holds a channel's automatic posting, and the video page says what each plugin suggested. Not with Longform. A suggestion you used is marked if its clip ever comes out without your edits, so you can apply them again. For developers: the plugin kit (SDK 1.3.0) adds `job.suggest_edit()` and an `editor` template, and [docs/developers/steps.md](docs/developers/steps.md) explains the edit step. Plugins don't post: Clips Kitty posts clips itself. (New job option: `edit`. New fields: `suggestions` on `render_first` when publishing, `suggestion` on `PATCH /clips/{id}`, and `plugin_edits` in a clip's `scores`.) - **A second colour for the second speaker.** Tick **Second speaker in another colour** in the caption settings, for a whole run or for one clip in the editor, and pick the colour. When two people talk in a clip, the main speaker keeps the text colour and everyone else's captions take the second one, and a caption never mixes two people's words. The main speaker is the voice heard all through the video, so the same person keeps the same colour in every clip of it. It goes by the sound of the voice, so a caller or a friend on voice chat counts with nobody on screen, and so does a video being reacted to or a text-to-speech donation. A clip with one voice, or one where it isn't clear there are two, looks the same as always, and so does every clip with the option off. Works best with clear audio and voices that differ: two people who sound alike talking over each other outdoors are often left one colour. In a video where the streamer says less than what they are watching, the colours can be the other way round. Not for translated subtitles. Runs on this PC (two small voice models, about 20 seconds once per video and a couple per clip). (#126) **Where it gets a caption wrong, fix it by hand.** In the clip editor's Captions tab, **Fix speakers** marks the other speaker's words. Click a word to switch who says it (the video jumps to it, so you can hear who it is), shift-click to switch every word up to it, **Swap speakers** to flip the whole clip, **Back to automatic** to drop your fixes. Undo (Ctrl+Z) takes a fix back like any other edit. The fix is saved with the clip and stays on later renders, whatever is heard there next time; captions you didn't touch go on following what is heard. It is offered once a clip has been rendered with the option on, so a clip you only just ticked it for needs one Apply first. On a clip whose caption text you already edited (a muted, censored or retyped word) a click switches the whole caption, and where two people talk over each other in such a clip a word said inside another may not switch on its own. Processing the video again leaves the fixes saved but not burned until you re-render the clip, as with every other edit. - **Basketball, the second sport.** Tick **Sports** and choose 🏀 Basketball: dunks, threes, blocks, steals and game winners each become a clip with the possession before them and the reaction after. The score bug confirms every basket and its points, and the quarter and game clock make a game-winning three in overtime count for far more than a first-quarter one. The broadcast's cutaways to the crowd, the bench and courtside are found too: merged into the play's clip, or clipped on their own with **Fan reactions**, **Celebrity reactions**, **Crowd reactions** or **Bench reactions**. A person is named only when the broadcast captions them. The whole game is clipped, and each clip's vertical crop is planned around its play: the ball and whoever has it, the receiver of a pass before the catch, and the shot followed to the basket with the rim, the net and the backboard in the picture. The crop is one picture that pans with the play and never zooms in or out, like a House of Highlights clip, the TV scoreboard left out. It sits clear of the apps' text, between TikTok's, Reels' and Shorts' top bar and the caption at the bottom with a blurred band above and below it, so neither hides the basket or the floor (the buttons down the right still sit over its edge, and the crop keeps the rim left of them); **Crop** in the Sports row makes it full screen instead. When the shooter and the basket don't both fit, it stays on the ball's side and pans with it to the rim, and when the ball can't be seen it follows the player who last had it, or the play. A close-up stays on the person the camera is on, not a blurred shoulder in front. A clip starts on the court, not on a close-up, the crowd or an earlier play left over from a condensed broadcast, and ends when the play is over: before the broadcast cuts to the next possession, a replay (the network's replay logo included) or another quarter, or before the camera follows the other team up the court, with everything the announcer says about the play before then and no glimpse of the next shot as it ends. A trip to the free-throw line stays in one clip, every attempt of it. A clip can come out a little under your shortest length rather than show the next play. **Best moments** keeps plays and reactions, not the commentators talking between them, and two free throws are never called a basket. A whole game joined from two broadcasts, each with its score in its own place, is read in both, and a team's own network, whose camera shows the players closer, is told court from crowd as well as a national broadcast. A game filmed 9:16 keeps its picture. It runs on the same Whisper and AI model as everything else, and finds the ball, the hoop and the players with the [E-BARD](https://github.com/GabrieleGiudic/E-BARD) detection model (CC BY 4.0, credited in the README and NOTICE). Measured on 32 clips of an NBA Finals broadcast: the ball stayed in the crop in 94% of the frames checked (49% with the first crop), the rim in 98% of them as the ball reached it (43%) and the backboard in 96% (32%). See [docs/SPORTS.md](docs/SPORTS.md#basketball). ### Changed - **The shape options say which shape they are about.** **Longform (16:9 clips)** makes 16:9 clips; **Vertical Live (already-vertical video)** is only for a video that is already vertical. With both off, a normal 16:9 video makes 9:16 Shorts, as it always did. Ticking Vertical Live for a normal video now says to untick it. (#131) - **The Microsoft Store version tells you when the Store has a newer one.** It used to say only that the Store keeps it up to date, even when the Store hadn't got to it yet. Now **Check for updates**, and a quiet check at start, ask the Store which version it offers. When that is newer than yours, a bar at the top and Settings say which version is there and which you have, with an **Open the Microsoft Store** button; press Update on that page. The app still downloads and installs nothing itself in a Store copy, and the request carries only the app's Store ID. - **A watched channel's re-sends keep its first choice of clips.** Retry failed and the re-send of posts a platform rejected now send only clips the video's first publish chose, even if processing the video again changed the scores or made new clips in between. A clip you trimmed in the editor since is still one of them. Nothing already sent is ever sent twice, as before. - **The box at the bottom offers to install Gemma 4.** Ask Clips Kitty only runs on a Gemma 4 model, and setup installs a different one on most PCs. The box used to say so in a line of small grey text. It now says "Install Gemma 4 to use this box" and has an **Install Gemma 4** button, with the build already chosen for your graphics card and the size of the download beside it. The percentage shows on the button, and the box starts working by itself when it finishes. The model that picks your clips stays as it was (#121). ### Fixed - **Model downloads no longer reach 100% and then do nothing.** The bar stays below 100% until the model is really installed, and while Ollama checks a big download, which can take minutes, it says **Checking the download… keep Clips Kitty open**. Quitting during a download asks first. A download that stopped short now says so, with **Try again**, which carries on where it stopped instead of starting over; before, it could be called done, and even chosen as your AI model, with nothing there. The Models page and setup also catch up on how a download ended if they missed it. A download nobody has carried on with for a week is cleared from disk when the app starts. Ollama's own log is kept in `%LOCALAPPDATA%\Clips Studio\data\logs\ollama.log`. (#148, #150) - **A job on an AI model that isn't downloaded stops at once and says so.** It used to download and transcribe the video first and then fail with "404 Client Error: Not Found for url: http://127.0.0.1:11435/api/generate". It now ends before anything is downloaded with "The AI model … isn't downloaded. Download it on the Models page, or choose a model you have.", and the queue row has an **Open Models** button. A job queued while setup is still downloading the model carries on as before, and when another model is installed the job still uses that one. (#149) - **A word you correct in the captions is burned into the clip.** A correction to a word with an accent ("perché", "città"), a hyphen or an apostrophe, or in a non-Latin script, was never found in the caption line, so the clip kept the old word. A correction is also kept when you click away from the word instead of pressing Enter, and after **Apply** the editor shows the re-rendered clip instead of the earlier preview, staying open on it. Escape in the word box now cancels that word only, not the whole editor. (#147) - **New Kick VODs download again.** Kick has started giving new VODs ids that the downloader's Kick support doesn't know, so a public VOD that played fine on Kick was reported as "That Kick VOD no longer exists". Clips Kitty now looks the VOD up the way Kick's own site does and downloads its recording, at up to 1080p60. Paste the link from the channel's Videos tab (kick.com/channel/videos/…); that message now only shows for a VOD Kick has really deleted. (#161) - **Cloud AI keys save again.** In 2.0.0, saving a key for OpenRouter, Gemini, OpenAI or Anthropic failed with an error, because part of the cloud AI support was left out of the installed app. (#135) - **Adding a watermark to a clip that is open in the editor works.** It failed with "Access is denied", and **Update preview** with "file in use", because the clip or its last preview was still playing. (#137) - **A clip made with captions off stays without them when you edit it.** Its first edit used to burn the captions back in. The editor's **Captions** tab also has a **Captions** on/off switch for each clip now. (#128) - **The Generate row remembers the rest of its settings.** The caption style, the **Longform output** you picked from the list, the **Pipeline** and the **Rate & understand** plugins now carry over to the next video and survive a restart, like the other switches already did. (#138) - **Processing a video again keeps your edits.** **Process again** made every clip it found again from the start: cuts, mutes, a layout, captions you fixed, colours and branding you had applied in the editor stayed in the editor but were missing from the clip's file, and a channel that posts automatically could post that file. A clip you edited is now made again with your edits, on this computer or a render PC, and goes into a match's story reels with them. Clips you never edited, and new ones, are made with the settings you chose, as before, even when you set up a Gaming / Reaction split before processing. A clip you edited keeps its own look. In a Gaming / Reaction job it keeps its own split, and a split that was found automatically or remembered for the creator takes a webcam you set up or remembered for this run. A split you set up before an earlier run or drew for that clip stays as it is, even with Gaming / Reaction off (not in a match): change it in the clip editor. A split you turned off for a clip stays off. In a match, your cuts, layout, caption fixes and colour adjustments are kept, and the caption style, colours and branding are the job's; **Re-render** a clip to make it with its own. 16:9 Longform clips too. A clip with music you added renders on this computer even when a render PC is chosen. - **A model download that failed no longer says it finished.** When Ollama could not fetch a model (no connection, a name that does not exist, a full disk), the Models page, setup and the box above all showed the download as done, with nothing installed. They now say "Download failed" and why. - **H.265 files no longer fail at transcription.** Adding a file that was not H.264 (an H.265 export from DaVinci Resolve, a phone or GoPro recording) converted it on the spot, which takes minutes for a long recording while the button only said "Starting…". If that was stopped part-way, by closing the app or pressing Generate again, a half-written copy was left behind and used anyway, and the job failed with "Invalid data found when processing input". The file itself was never the problem. Now: - adding an H.265, AV1 or VP9 file takes seconds, and the conversion happens when the video is processed, where you can see it, for 16:9 clips as well as Shorts; - a copy is only ever used once it is complete, and one left half-written by an earlier version is redone when you add the file again (#122). - **Captions on the seconds you add to a clip.** A clip made longer, in AI Edit or the editor, came back with no captions on the added seconds, and neither re-rendering nor changing the font brought them. It happened to a clip whose captions had been saved before, and opening the Captions panel and pressing Apply was enough to save them. Saved captions now follow the clip: the added seconds are captioned, your corrected text stays, and a clip already stuck this way is put right the next time it is re-rendered (#120). - **"Sign in to confirm you're not a bot" on a YouTube link.** YouTube decides that by the address a request comes from, and a PC on both IPv4 and IPv6 has two: refused over one, the same video is served over the other. Clips Kitty asked only the first way, so the video failed with advice about cookies. It now asks once more over IPv4, and goes on that way for the rest of the session. If both are refused, it says so in plain words: wait an hour, switch off a VPN, or try another network. Nothing signs in and no cookies are read. --- ## 2.0.0: Soccer, and NVIDIA PCs transcribe again If videos stopped at "Transcribing" on your NVIDIA PC, this release fixes it. It also brings Sports (Soccer first), Gaming / Reaction layouts, watched channels that clip and post on their own, and the option to use your own AI key. ### Added - **Sports, starting with Soccer.** Tick **Sports** for a match, and choose which moments to keep (Best moments, All goals, Goals + celebrations, Best saves, Best chances, Attacking plays, Cards or Penalties, each explained in the list), and optionally the teams or players to favour. The whole match is always clipped. Each moment becomes one clip with its build-up and its reaction, and the 9:16 crop follows the ball instead of the biggest face. Also in a queued video's settings, a watched channel's settings, the API and MCP. It uses the models you already have: no new download. - The score box is read through the whole match, so a goal is certain, with the side that scored and the minute. The crowd's roar dates it, since the score changes after the ball goes in. On a World Cup final all six goals were found at the right minutes. - Other moments are named only when the commentary names them and the crowd, the whistle or the screen agrees; otherwise they're big moments. Replays and celebrations are grouped with their goal, never clipped twice. - The clip card names the moment ("Goal · 65'", and the side that scored), and the clip page says what the match gave and the score read. See docs/SPORTS.md, which also shows how to add a sport. - Vertical videos too: a match filmed or streamed 9:16 is kept as filmed, with nothing to switch on, and its goals are found the same way. With Longform, the 16:9 clips and the Highlights reel are the match's moments as well. - Club and phone footage, recognised by itself when no score box shows. Club footage is framed on the ball like a broadcast, but with no score box or commentary nothing marks its goals, so none are claimed: a choice like All goals keeps the best moments instead, and the clip page says so. - **Match events**: tell Ask Clips Kitty the match's goals as you have them (from your club app, the match report or the video's description: "18:16 Goal Player A", "45+2' yellow card") and each becomes a clip, with the player or team on it. Match minutes are placed by the clock on screen or the list's kick-off times; a club app's tag gets a clip long enough to hold the attack, the goal and the celebration. - The Sport menu shows ⚽ Soccer / Football, with Basketball and Cricket listed as coming soon. Hover a Highlights choice to see what it keeps. For a match streamed 9:16, Soccer is a Vertical Live content choice. - **Story reels**: **Also make** a Match recap (every goal, card and save, in match order), a reel per team, and a reel per player named in two moments or more, by your match events or by the commentary for a name in Teams or players. Joined from the clips already made, so they take seconds, with one end card at the end and the moments listed in the description. With Longform, in 16:9 too. - **Remote rendering (experimental).** Another computer of yours can render the clips, so the one you use stays free while a long stream is processed. Settings → Advanced settings (off by default, and invisible until you switch it on): pair a render PC with a one-time code, then render on this computer, automatically on a render PC when one is free, or only on a chosen one. Only the rendering moves; the clips it sends back are identical to local ones. Transfers resume, results are checked, a render PC that drops out gives its clips back, and nothing needs your router opened (Tailscale for PCs in different places). See docs/REMOTE-RENDERING.md. - **The Clip Editor groups your videos by creator.** Pick a creator, then a video from its list, so a big library stays tidy. - **Gaming / Reaction, for game streams and reaction videos.** The streamer's webcam and the game (or the video they're reacting to) laid out together, in one of eleven layouts like StreamLadder's: Split, Basecam (game on top), Half, Fullscreen, Blurred, Small or Circle facecam, Game UI, Mosaic, Dual facecam and Duo split. With no webcam, the game on its own. Tick **Gaming / Reaction** and **Choose a layout** opens on the video's own frames before anything is processed: pick a layout from cards that show this video in each, drag and resize the webcam and game boxes, choose Camera or Game on top, drag the line between them, and see the 9:16 result live. Remembered per creator if you want. - Faces stay clear of TikTok's, Reels' and Shorts' buttons and captions. The webcam is placed from where the streamer's head is, and the preview shows the chosen platform's UI with "✓ Face clear", or what to change. A webcam at the top with no room above the head is moved down on a blur, never cut off at the top; one under the game stays right against it, with no blur between the game and the streamer's head. - A whole game sits right against the webcam: never a band of blur between the streamer and the game. The blur goes above the two (clear of the platform's top bar) and below them. No black bars. - A stream's solid panels (a black chat bar under the game, a speedrun's splits) are found and kept out of the game, so the Short never ends in a useless bar. Chat drawn see-through over the gameplay stays: it's part of the stream. - The editor opens with the webcam and game boxes already on the frame to drag, as in StreamLadder: **Draw it** is the default, and the webcam box moves onto the webcam when Clips Kitty finds one. - On the preview, as in StreamLadder: drag the small or round facecam to move it and any of its eight handles to resize it, and the same for the Game UI layer. Dual facecam is two round webcams, always the same size. The Game UI is cut to its space, with no blur round it. - Parts snap into line like a design editor: to the middle of the Short, its edges, the platform's safe lines and each other, with a guide line showing it (Alt to place freely). **Grid** shows thirds, the middle and the safe box. The boxes on the video frame snap the same way, to each other and to the chat bar's edge, and show the grid while dragged. - The game box on the video frame stops at the webcam: its edges show as dashed lines while you drag, and the game snaps to them instead of going over it, so the streamer isn't shown in the game too (Alt places it anyway, with a note saying so). The automatic game area keeps the same distance, so the webcam's border no longer shows as a line down the game. - Zoomed to fill, the game box has the shape of the game's space on the Short and follows it as the webcam's share or the layout changes, so what's inside the box is what renders. - The layout editor has fullscreen (like a video player, Esc to leave, remembered) and minimise to a bar in the corner. - The preview draws TikTok's, Instagram Reels' or YouTube Shorts' own layout over the Short, measured from each app's feed, with icons in each app's style. The safe areas the face check uses come from the same measurements. - When the editor opens, a webcam is suggested: the same person in the same framed spot across the video. Found automatically when processing, the streamer is whoever TalkNet says is talking in sync with the audio, across several clips of the video: never the biggest face, so game characters, portraits and the people in a watched video aren't taken for the streamer. Tested on 13 streams including World of Warcraft, Zelda, GTA V and League of Legends (docs/GAMING.md has each result). - The webcam box stops just inside the webcam's own border: no chat or panel beside it. - A stream that changes partway is handled clip by clip. An hour of Just Chatting before the game, or a reaction streamer going full screen on their camera between videos: those clips are framed like a talking-head clip, even with the webcam drawn or remembered for the creator, and the rest keep the split. A webcam that moves when the streamer changes scene is followed to where it is in each clip. The automatic webcam search looks past full-screen clips, so a long chatting opening no longer leaves the game clips without the streamer. - The clip editor's Effects tab has the same editor (Layout → **Gaming / Reaction** → **Change layout…**) to change one clip. - In gaming mode the "person on screen" part of the score is left neutral, so top-down games like League and Dota are no longer scored as having nobody in them. - For streamers on a real camera; VTubers aren't supported. - **Gaming streams are scored as gaming streams.** A kill streak, a boss going down or a goal counts, even from a streamer who says little. Gaming / Reaction scores this way, and so does a live that was already vertical with **Vertical Live content** set to **Gaming / reaction** (a row under Vertical Live, like Longform's output), the same scoring in full (game characters and the people in a watched video aren't taken for the streamer there either). What is said still counts exactly as on any stream (a reaction is mostly talk); the game adds to a clip on top of that, up to +12, like creator context does, and carries the quiet stretches. The AI is told which game it is (Twitch says per part of the stream; Kick and YouTube give the category, title or tags) and what a highlight is in that kind of game; chat's reactions mark moments and what kind (hype, laughing, surprised, scared, a fail, "clip it", in any language and with a channel's own emotes); a sudden shout or laugh from the streamer marks them too, and so does the game's own sound (gunfire and explosions in a fight, a crowd or a goal explosion in a sports game, a crash in a race, a scream in a horror game), heard by a small bundled sound model even when chat and the streamer are quiet. The screen is read too: a banner (ELIMINATED, VICTORY ROYALE, "X A MARQUÉ", YOU DIED) names the moment, and a menu, queue or settings page that chat reacted to is marked down. Last, a local AI model that takes images (Gemma 3 or 4) looks at a few frames of the best clips: a clear moment moves up, a menu or a black screen moves down. The picture never goes to a cloud AI. A menu or no gameplay only costs a quiet clip: a Just Chatting clip full of talk loses nothing for it. Each moment becomes a 15-35 s candidate starting just before it, and the clip's score breakdown shows what marked it. Standard scoring is unchanged. - **Vertical Live, for streams that were vertical all along.** A YouTube vertical live, the vertical feed of a Twitch Dual Format or Streamlabs Dual Output stream, or a downloaded Instagram or TikTok live is already a finished 9:16 video. Tick **Vertical Live** and Clips Kitty keeps its layout: no face tracking or reframing, one encode of the whole frame at 1080x1920. The moments are found exactly as before, with your chosen AI, and clips caption, brand, publish and schedule as usual. - YouTube vertical lives now download at 1080x1920 in this mode (standard processing picks a smaller size for vertical video). A video with no vertical version is refused with what to do instead, never swapped for the horizontal one. - A file that isn't 9:16 is refused before any work, with **Use standard processing**. A 9:16 file you add gets "Is it a vertical live?", and can carry its original link. - Watched channels have the same switch. Videos with no vertical version are skipped, so a Streamlabs dual-output channel isn't clipped twice. - In Clips Kitty Web too: a Twitch or Kick VOD is cut from its vertical version. - Twitch's vertical VODs couldn't be downloaded by link when this was built: download the vertical recording and add it as a file. - **Watch a channel and let Clips Kitty do the rest.** Add a YouTube, Twitch or Kick channel on the new **Watched channels** page. When it posts, the new video joins the queue by itself, and once the clips are made they are published through WoopSocial, either straight away or after you press Publish, which is the default. Set it up once per channel: the clip settings, where the clips go, how many posts a day, and a line under every caption that can link back to the full video. - Adding a channel never clips what is already on it. Those videos are listed, one click from being clipped if you want them. - A video is only ever clipped once, and a clip is only ever posted to a platform once, even after a crash or a restart. - Live streams, premieres and Shorts are waited for or skipped rather than grabbed half-finished. - Videos posted while Clips Kitty was closed are found when it opens. You choose whether to clip only the newest, all of them, the last day's, or none. - To keep watching on a spare PC, turn on **Keep watching when the window is closed**. Clips Kitty then stays in the system tray until you quit it from there. It is off unless you turn it on. - **See it working.** A live panel at the top of Watched channels shows that Clips Kitty is watching and what it is doing right now: checking a channel, a new video found, clips being made with a progress bar, clips scheduled, a post going live. A green dot beside Watched channels in the sidebar shows it from every page, and each channel carries a Watching badge. - Kick has no official way to list a channel's videos, so Kick watching uses the same unofficial one Kick downloads already rely on, and says so if it stops working. - Opening Clips Kitty a second time now brings the running window forward instead of starting a second copy that cannot work. - **Hands-off, for an always-on PC.** Choose "Clip and publish automatically" when you add a channel, tick where the clips go, and leave Clips Kitty running. Every new video is then queued, clipped and published with nobody at the PC. It keeps going through the usual hiccups: a failed download is tried again, a publish that cannot reach WoopSocial waits and tries again, and posts a platform turned down are sent again later, only those ones. Turn on **Delete each watched video's download once its clips are published** so the disk does not fill up. - **Set everything up once.** Before you even press Add, choose how many of each video's clips to post (the best ones first, or all), whether to post right away or space them out, posts per day, hours apart and the time the first post of each day goes out, with a preview of the next posting times, just like the Publish dialog. The channel then opens its whole setup for the rest. Add your own hashtags, like `#creatorname #twitch`; they lead every caption so they are always kept, and you can leave out the AI's hashtags entirely. Each platform has its own settings: YouTube visibility, who can watch on TikTok and whether comments, duets and stitches are allowed, Reel or Story on Instagram and Facebook, and your Pinterest board. - **It learns about the creator you watch.** Adding a channel gives it a profile in Creators straight away, marked Watched, and every video it clips is learned into that profile. The channel's card shows how much it knows so far, with a button that opens the profile, and the live panel says what each new video taught it. - **PC too old to run the AI? Bring your own API key.** Clips Kitty still runs everything on your PC by default, free and private. For a laptop with a small graphics card, or a low-spec mini PC watching channels, **Settings → AI** can now hand the work to a cloud provider on your own account instead. Ollama stays first; **OpenRouter** is the recommended cloud option, one key for many models you can switch between, shown with each model's price; OpenAI, Google Gemini, Anthropic Claude, xAI Grok, Meta's Muse Spark, DeepSeek and Qwen are there too, as direct providers under Advanced (a Qwen key's Alibaba Cloud region is found for you). The provider bills you directly; Clips Kitty has no key, credits or server of its own. Where local AI struggles (setup on a PC with no graphics card or a small one, a model too big for the card, a job that failed in the local AI, Watched channels on a small PC) the app points to OpenRouter. With a cloud model chosen, everything the local model did uses it: clip picking, titles, creator learning, clip edits, translation and the assistant. - Transcription is its own choice: Whisper on your PC, or online with your key through OpenAI, OpenRouter or xAI, with the word timings captions need. - With OpenRouter, pick the text model and the voice model from its live catalogue, each showing OpenRouter's current prices (and when they were fetched), with a refresh. A voice model not yet known to give word timings is checked with a three-second test clip before it is used. - **Sign in with OpenRouter**: approve Clips Kitty in your browser and it gets a key of your own, on your OpenRouter credits, with nothing to copy or paste (OAuth with PKCE). Pasting your own key is still there, under Advanced. **Copy sign-in link** connects a different OpenRouter account from a private window. - The Gemma models come first in the text model list, under the preferred one. - **★ Preferred** models head each list, one click away: Gemma 4 26B-A4B for text (about a cent for a two-hour stream) and Whisper large-v3 turbo for voice (about $0.01 an hour, with word timings). A free (`:free`) model's note offers its paid version, and a job it stops says it was the free version's limit. - Online transcription no longer stops at a stretch where nothing is said: a stream's ten-minute music intro used to fail it as "no word timings". And the voice detector local Whisper uses now runs on each part first, so the "Thank you." Whisper makes up in quiet stretches (640 in one stream) is dropped, and a part where nobody speaks isn't sent or paid for. - Your key is checked before it is saved, stored encrypted, and never shown again apart from its last four characters. **Test connection** checks the key and model without spending anything. - **Experimental: use a ChatGPT plan you already pay for** instead of an API key, through OpenAI's own Codex (OpenAI / ChatGPT plan, under Advanced). Sign in with ChatGPT in your browser; pick a model your plan offers; the card shows how much of the plan's limit is used. It stops at the limit rather than spend ChatGPT credits, and Watched channels only use it if you allow them. It needs a paid plan (OpenAI refuses free accounts outside its own app), and for now only runs from source. Claude and Google plans can't be used by other apps; their entries say so, and why. - If the provider fails (a bad key, no credit left, rate limits) the job says so plainly. Nothing ever switches to another provider, or back to the local model, without you choosing it. - How it works, what it sends and what it costs: `docs/AI-BACKENDS.md`. - **Ask an AI assistant to do it.** Clips Kitty now speaks MCP, so Claude, Cursor or any MCP client can queue a stream, follow the job, read back the clips it chose and export one, in plain language. It needs no API key of any kind, because the model doing the work is the one already on your PC. - **Integrations can be told when a job finishes.** Send a webhook address with a video and Clips Kitty posts to it once, the moment that video is done, so a dock or an automation can sit quiet instead of asking every few seconds. Add a secret and the message is signed, so your listener knows it is really us. - **Thumbnails made from the clip, on your PC.** Press **Make thumbnails** in the YouTube panel and Clips Kitty looks through the clip for frames where someone is facing the camera, crops each to 16:9 around them and puts the clip's hook across the bottom. Pick one like any other thumbnail. It costs nothing and sends nothing anywhere: the faces, the frames and the type all come from what is already on your machine. The three fixed suggestions are still there, and a clip with no usable frame simply offers none. - **Highlight videos get chapter timestamps.** The description now lists each moment with the time it starts, so viewers can skip straight to the bit they want. They are added only when YouTube's own rules allow it: a chapter list that breaks them is ignored completely, and a list that silently does nothing is worse than none. - **Tell Clips Kitty what to do, in a sentence.** There is a box on the dashboard now. Write something like "clip the newest stream and schedule the clips an hour apart from tomorrow morning" and a Gemma model running on your PC works out which steps to take and takes them, showing you each one as it goes. Uploading is the exception: it can plan a batch of uploads, but the plan comes back for you to read, and nothing goes to YouTube until you press the button. The box needs a model that can call tools, which means Gemma 4 or newer; if the model you have cannot, it says so rather than guessing. - **Plan a batch of uploads before any of it happens.** Assistants and MCP clients can ask for a publishing plan: which clips, what each one's title and description will be, and when each goes out. Nothing is created until the plan is sent back for execution, so a batch with the wrong description is something you catch while reading rather than something you undo thirty times. - **Put the same links under every video.** The YouTube panel has an "Add to every description" box for your Twitch, your Discord, whatever you always paste. It goes under each description as the clip is published, once, without repeating itself when you publish a clip again. - **Say how you want the clips made, in the same sentence.** The box and any MCP client can now set what the panel's tick boxes and menus set: captions on or off, the caption font, size, colour, position and word count, a watermark by the name you saved it under, podcast footage, longer clips, and the horizontal longform modes. "Clip this with big yellow captions at the top and my Main channel watermark" now does all three. A font or colour it does not have is refused with the list of real ones, rather than quietly rendering every clip of the stream in the wrong one. - **Drag the assistant to the height you want it.** There is a grip on its top edge, and the size is remembered. It never grows past the space there is, so the box you type into stays on screen. - **16:9 and 9:16 clips of the same video in one go.** With Longform on, tick **Also make 9:16 Shorts** beside *Longform output*: the video's vertical Shorts are made first, then the 16:9 output, in one run. Each clip is its own card, and the horizontal ones are marked 16:9. - **Tell it what the clips should be about.** Say it in the box at the bottom when you ask for a video: "clip this stream, make sure you include when I died to the boss, prioritize funny moments, and more from the WoW part around 1:35". The clips are still picked the usual way; the direction only adds to it: - points for clips about the topic or moment you named (the AI adds the words it comes up with, so "WoW" also finds "Azeroth"), inside a time you gave ("1:35-1:55", "around 45 minutes", "near the end"), or with the funny, laughing, hype or reaction moments you asked for; - a look at moments there the first pass skipped, across the whole stream; - a must-have ("make sure", "at least two clips of") that was actually said is kept, even under the quality bar or a clip cap. It never lowers a score or removes a clip, so "avoid the intro" is noted rather than applied. A must-have that was never said is reported ("Couldn't find: ...") and no clip is made up for it. The video's clip page shows what was understood, and each clip says what it got extra points for. A video asked for without a direction is processed exactly as before. Works with every AI setup; on the API and MCP it's `focus`. ### Fixed - **16:9 clips no longer fail with "error 404".** Longform asked for the AI model named in settings even when setup had downloaded a different one for your graphics card, so every run stopped with a 404. It now uses the model you have, as 9:16 clips already did. Translating clips and the clip editor's chat did the same, and are fixed too (#118). - **Cancel stops a long video while it's being analysed.** On a long VOD, pressing Cancel during "Finding the best moments" did nothing until a whole-video pass (its sound and picture, the chat replay) had finished, which on a 4-hour stream looked like loading forever. Cancel now stops it within a couple of seconds, decoding and all. - **One odd answer from the AI model no longer fails a whole video.** When the model put a line of text where a clip belonged, the video stopped with "'str' object has no attribute 'get'", ten minutes into a long match. That entry is now skipped and the rest of the answer kept, like any other entry it can't read. - **Videos no longer fail at "Transcribing" on NVIDIA PCs** with "Library cublas64_12.dll is not found". Whisper's engine needs NVIDIA's cuBLAS 12, which the app stopped carrying when it moved to CUDA 13 for the RTX 50-series; it now ships with the app, so GPU transcription works with nothing else to install. And if the GPU's libraries can't be loaded for any reason, the video is transcribed on the CPU (slower) with a note in the log saying why, instead of failing. - **Minimum score can be changed in Settings** (Advanced settings). When a video gives no clips, the app suggests lowering it, but until now it could only be changed in the settings file. - **Closing the window closes the app when nothing is being watched.** With "Keep watching when the window is closed" ticked, Clips Kitty went to the system tray even with watching switched off or no channels on. It now stays in the tray only while it's actually watching a channel. - **Adding a video again for the other format makes its clips.** After 16:9 (Longform) clips of a video, adding it again for 9:16 Shorts finished in two seconds with nothing made. It now makes the Shorts, and Longform after Shorts no longer asks "already processed". A file you've really made Shorts of before now offers **Process again**, as a pasted link does, instead of a silent run. - **Gemma 4 on your own PC reads the stream again.** With gemma4:e2b or gemma4:e4b (what setup installs for graphics cards of 6 GB and under) as the AI, the part that reads what was said came back empty for most of a video, so clips were picked almost only from sound and movement, with titles like "High-energy moment", and it took ten minutes to find one. Gemma 4 now answers without its thinking step and without Ollama's JSON mode, which made it repeat itself until Ollama gave up: on a 13 minute stream, 16-17 moments found in under a minute instead of one. - **The box at the bottom answers every time on Gemma 4.** About one request in three came back blank, with nothing done: the app's instructions and tool list filled Ollama's default 4K context, and Gemma 4 ran out of room while thinking. It now gets 16K, and a model that still says nothing is reported instead of an empty box. - **Esc in the Gaming / Reaction layout editor no longer closes the clip editor behind it.** Opened from the clip editor, Esc closed both; it now leaves fullscreen first and then closes only the layout editor. - **Editing a clip can no longer lose it.** Applying edits deleted the clip before rendering the new version and put it back afterwards, so a render that failed, or closing the app halfway through one, lost the clip and its translations for good. The clip is now only replaced once the new version has rendered. - **The Dashboard's Donate button lines up with Start posting everywhere again.** The posting card's text grew, and the Donate button beside it stayed high; both buttons now sit on one line however long either card is. - **A watched channel uses your clip settings.** Its clips came out with the app's defaults, captions included, even with captions unticked: the choice lived in the Generate bar and never reached the channel, and the channel's own Clip settings needed a separate Save that was easy to miss. Adding a channel now starts from your Generate settings, shown in the form, and a channel's Clip settings and Publishing save themselves as you change them. - **Watched channels skip YouTube Shorts.** There is nothing to clip from a Short, so they are no longer listed or queued; only full videos and finished streams are. - **Hashtags come out as separate hashtags.** The AI sometimes wrote several hashtags run together, like `#creatorname#drama#apology`, and they were posted that way, as one long unreadable tag. They are now split into `#creatorname #drama #apology`, for new clips and for clips you already have. - **No more "Clip from:" captions.** When the AI could not write a clip's caption, the clip was given "Clip from: " and a #clips hashtag. Every clip of that video then went out with the same caption announcing it was a repost, and TikTok flagged them as unoriginal content. A clip like that now gets no caption text beyond its title and your hashtags, and clips that already had it are published without it. - **Publishing from the chat box no longer sends everything at once.** "Process this and publish them all" and "publish all my clips" used to post every clip in one go, and WoopSocial allows about five YouTube posts a day, so most were rejected. Unless you say how fast, clips now go out five a day, an hour apart, after anything already scheduled, and the plan you are shown before saying yes lists those exact times. Hashtags you asked for in the chat now reach the posts too; the confirm button used to drop them. - **WoopSocial posts now show what really happened to them.** Every post sent through WoopSocial stayed at "processing" for good, because Clips Kitty was reading the wrong field of WoopSocial's reply. Posts that went out now show as published with their link, and ones that did not show as failed with the reason in plain words, such as WoopSocial's five-a-day YouTube allowance or TikTok's posting limit. Posts you already sent correct themselves the next time Clips Kitty checks, within a few minutes of opening it. - **Hashtags now actually appear under your videos.** Clips Kitty has always chosen hashtags for a clip, but they were being sent to YouTube's keyword field, which nobody sees, and the description went up without them. They are now written into the description, where they show above the title and are searchable. This reaches clips you made months ago, because it happens when the clip is published rather than when it was created. - **Your channel name is always the first hashtag.** Descriptions were missing the one hashtag that matters most for finding your other videos. Each clip now carries at most five, and the creator's name leads them, so the cap can never cut it off. - **An age-restricted video says so.** YouTube will not hand these over to anyone who is not signed in, and Clips Kitty downloads without an account. It used to fail with a wall of yt-dlp text about exporting cookies, which read like a crash. It now says what happened and what will work instead. The same plain wording now covers failures during the first check of a link, which is the likeliest moment to fail and the one place it was missing. - **The activity list follows what is happening.** New lines were being added at the top, so the newest event was never where you were looking. It now reads downwards with the newest at the bottom and scrolls to keep up, unless you have scrolled up to read something, in which case it leaves you alone. --- ## 1.2.0: every clip now ends with a Clips Kitty end card ### Added - **Every clip ends with a short Clips Kitty end card.** A 2.9-second card with the Clips Kitty mascot is added to the end of each clip you make, so people who watch your clips can find the app that made them. It is joined on without re-encoding, so the clip itself is untouched. - **Korean is now fully translated**, thanks to [@doeil1614-ops](https://github.com/doeil1614-ops). Korean was listed as a finished language and was not: 68 of the app's phrases were falling back to English. All of them are translated now, and the existing wording was reviewed by a native speaker, so clips are called "하이라이트 영상" (highlight videos) where that is what Korean creators say. If something still reads oddly, [#45](https://github.com/ColinGPT9/clips-studio/issues/45) is the place to say so. - **Publish to YouTube from the editor.** Finish a clip, press **YouTube**, fill in the title, description, tags, thumbnail, playlist, audience and visibility, and press Upload. Clips Kitty renders your unsaved edits and uploads straight to your channel. No exporting the file first, no hunting for it on disk, no separate publishing screen. You never leave the editor. **Scheduling uploads the video now** and asks YouTube to publish it later, so you can close Clips Kitty and switch your computer off. There is no timer in this app and nothing to leave running. It is **off until you turn it on** in Settings, and it uses your own free Google API key rather than a shared one, which is what stops every user in the world drawing from the same daily upload allowance. If you never enable it, the editor looks exactly as it did. One thing worth knowing before you rely on it: until your Google Cloud project passes YouTube's free audit, **YouTube locks every video uploaded through an API to private, permanently**, and it cannot be undone in Studio. That is YouTube's policy, not a bug, and no software can work around it. Clips Kitty checks after every upload and tells you if it happened instead of claiming success. Uploading as unlisted or private is unaffected. See [README "Posting publicly"](README.md#posting-publicly). This is new, and few people have tried it yet. If you set it up, tell us how it went through the Feedback Hub, whether it worked or not. - **Star the clips you have exported, and export a whole video at once.** Each clip in the Clip Editor has a star next to its delete button. Exporting a clip stars it, and you can star or unstar any clip by hand. **Export all** saves every clip from a video or stream that is not starred yet, so nothing gets exported twice. Clips you exported before this update start out starred, from the app's export history. - **"No clips" explains itself.** When a video produces nothing, the app now says so where the clips would have been, with the numbers behind it: how many moments were considered, the best score any of them reached, and the threshold they were measured against. When the reason is that nobody was on screen: gameplay, top-down games, anything without a person in frame. It says that too. Part of a clip's score is whether someone is visible, so that footage scores zero on it rather than merely low, lands under the threshold, and comes back empty. That is working as designed, and until now the app gave no hint of it: the screen just said "No clips for this video yet", which reads like a fault. It only names that cause when the detector actually looked and found nobody. A quiet talking-head video that simply did not score well is told apart from gameplay and gets the plain numbers instead: being confidently wrong about someone's footage would be worse than saying nothing. - **Reasoning models find clips.** DeepSeek-R1, OpenAI's gpt-oss and NVIDIA's Nemotron 3 Nano could finish a video with no clips and no error: Ollama either spent their answer on thinking or blanked it while they reasoned. Each is now sent what it needs, and all three are listed on the Models page. The models setup installs are sent exactly what they were before. - **Streamer tools can hand a finished stream to Clips Kitty.** A new supported API, `/integrations/streams`, takes a stream's platform, channel and start and end times. - **Finds the VOD:** looks up the one Twitch or YouTube publishes afterwards, and queues it once. - **Asks when it can't look:** Kick, or no channel name, gets a request for the link. - **Never starts other waiting videos** along with it. - **Reports progress and time left** in the same terms the app shows. The OBS plugin is the first thing built on it. `/health` now also reports `app_version` and `api_version`, so a tool can tell when Clips Kitty needs updating. ### Fixed - **The local API only answers requests addressed to this computer.** A web page could previously reach it by pointing its own domain at 127.0.0.1 (DNS rebinding). Requests carrying any other host name are now refused. - **Bug reports lost the one field that mattered.** The reporter is required to say which video they were processing, and the answer was then dropped before the report was built. It now appears, and the question is a list of your recent videos rather than a text box. - Reports also carry the video and the run summary automatically, so they are useful even when the description is three words. Previously the video was guessed from "most recently updated", which found nothing at all if the reporter had deleted the video first, as they usually have. - **Editing a clip you had translated no longer fails the render.** Translating a clip in the Subtitles tab and then pressing "Apply edits" failed the job with a database error, mentioning nothing you had actually done. Re-rendering replaces the clip's row, and the translation still pointed at the old one. Translations now follow the clip across a re-render, and so do publishing records. - **Your YouTube sign-in is no longer stored in readable form.** The saved token used to sit in plain JSON in the data folder. It is now encrypted against your Windows account, so copying the folder to another PC or user does not carry it over. Existing sign-ins are moved across automatically the first time. - **`python main.py auth` works in the installed app.** It looked for your credentials file relative to whatever folder it happened to be started from, which for an installed copy is not where the file is. - **A blocked YouTube sign-in now says how to fix it.** If your Google Cloud project is still set to Testing, Google refuses the sign-in, and the app used to tell you that you had declined the permission request. It now says to open Google Auth Platform, then Audience, and press Publish app. - **Updates no longer offer an older version.** An installed copy could offer to "update" itself to a version older than the one it was running whenever the update feed was behind it. - **Downloading an update shows real progress.** After a small first step, the bar used to sit at 100% for the whole multi-gigabyte download, which looked frozen. From this version on it counts through the app files as they arrive. - **AI models from older versions are found again.** Since 1.1.3 the app kept its models in a different folder from the rest of its data, so people coming from 0.1.x downloaded their model a second time. It now keeps using whichever folder already has your models. --- ## 1.1.4: setup stops asking for a model you never chose ### Fixed - **Setup no longer asks for a model you were never meant to install.** On a PC without a graphics card, setup downloads the smaller AI model that suits it, and then told you a *different* model was missing, with a red error, directly under a line confirming a model was installed. The download had worked. The check was asking the wrong question: it wanted one specific model rather than any model that runs. It now checks whether an AI model is available at all, and names the one it will actually use. Downloading a model from setup also selects it, unless you already have a working one chosen, so picking a bigger model to try later will not switch you over without asking. **This affected every PC whose recommended model was not the shipped default**, which is any machine without an 8 GB graphics card. If setup told you `gemma:7b` was not installed straight after a download finished, this was why, and there was no way past it. - **A failed YouTube download now says what went wrong.** Pasting a YouTube link could fail with a wall of technical text ending in `HTTP Error 403: Forbidden`. That looks like a broken app and reads like a broken link, and it is neither. YouTube hands over the video's details and then refuses to send the actual data to your network, which is Google rate-limiting the connection itself. It usually clears on its own within an hour, and Twitch, Kick and local files keep working while it does. The app now explains that in plain English instead of printing the error. **What the app cannot do is prevent it.** Nothing in Clips Kitty can persuade Google to serve a connection it has decided to throttle. If it keeps happening, switching off a VPN or moving to a different network is what actually fixes it. Reported by a user through the in-app feedback hub ([#81](https://github.com/ColinGPT9/clips-studio/issues/81)). - **RTX 50-series cards no longer crash every job.** On a GeForce RTX 50 card processing failed part-way through with `CUDA error: no kernel image is available for execution on the device`, every single time. Clips Kitty was built against a version of CUDA that predates those cards, so it could see the GPU, report it as working, and then have no code it could actually run on it. It now ships CUDA 13, which supports them properly. Reported by a user through the in-app feedback hub ([#83](https://github.com/ColinGPT9/clips-studio/issues/83)). - **A GPU that cannot be used falls back to the CPU instead of failing.** Whichever version of CUDA the app ships, some graphics card sits outside it. Until now that meant a job died in the middle; it now finishes on the CPU and says which card it could not use and why. The startup check reports this too, rather than calling the GPU fine right up until the crash. ### Security - **Voice files are now found by listing the folder rather than by building a path from the requested name.** No release was vulnerable. The name was already checked against a strict pattern that rejects anything resembling a path, but the check was a rule about the text, and this is a property of where the value comes from, which is the stronger of the two. A related pattern that only rejected a name ending in a newline was tightened at the same time. ### Changed - **GTX 10-series and older cards now run on the CPU.** Supporting the RTX 50-series meant moving to a newer CUDA, and that does not reach back to cards that old. **GTX 16-series and every RTX card are unaffected**. An RTX 2060 is the oldest card that still uses its GPU. On the machines this does affect, everything still works and produces identical clips, just more slowly, and video encoding uses the GPU exactly as before. No version of CUDA supports both those cards and current ones, so it was a choice between the two. - **The YouTube downloader is six weeks newer** (yt-dlp 2026.8.19). YouTube changes how it serves video often enough that this is the one component worth keeping current, and the shipped copy had fallen behind. Older copies gradually lose access to formats as YouTube moves on. --- ## 1.1.3: the app is now called Clips Kitty > **Same app, same data, nothing to do.** Your clips, settings and creator > profiles stay exactly where they are and open as normal. Only the name > changed. **Why:** the old name was too close to existing software to be listed on the Microsoft Store. The clip editor page had the same problem and is now called **Clip Editor**. Everything that is a link stayed a link: the GitHub repository, this website and the download addresses are all unchanged, so nothing anyone has bookmarked or shared has broken. **The version jumped from 0.1.2 to 1.1.3**, which looks odd and is deliberate. The Store will not accept a version starting with 0, so every release used to carry two numbers (0.1.2 in the app and 1.1.2.0 on the Store) and somebody had to remember the mapping. 1.1.3 is above the 1.1.2.0 already published, so from here the app version and the Store version are the same number. This is still alpha software; the leading 1 is a Store requirement, not a claim. ### Fixed - **Processing no longer needs to reach GitHub.** Every video tried to download a 7 MB detection model, even though that file was already inside the installer. If the download failed, so did the job: "Download failure … Retry limit reached". It now uses the copy it shipped with. **This affected 0.1.2**, so if a video failed with a download error, this was why. It was unpredictable rather than universal: the app looked for the file in whatever folder Windows happened to start it from, so it worked or failed depending on where the shortcut pointed, and it always worked when run from a developer's own copy of the source. That is why it survived to a release. - **A video whose details were lost keeps its name.** Reprocessing a video after the database had been reset or moved showed the raw ID instead of the title, and no channel at all. The empty channel was the worse half: creator profiles are matched on it, so catchphrase learning and preference history quietly did not run for that video. It now re-fetches the title and channel without re-downloading the video, and still works offline. - **The Models page headings no longer run together.** "Recommended" was wider than its column and collided with the next heading, reading as "RECOMMENDEDWHY". The column is now labelled "Model", which is what it holds. ### Added - **Russian is now fully translated**, thanks to [@4nmus](https://github.com/4nmus), the first contribution to Clips Studio from outside. Russian was listed as a finished language and was not: 92 of the app's 208 phrases were quietly falling back to English. All 92 are translated now, and 56 of the existing ones were rewritten by someone who actually speaks Russian rather than by a machine. If you use the app in Russian and something still reads oddly, [#60](https://github.com/ColinGPT9/clips-studio/issues/60) is the place to say so. - **Brazilian Portuguese is now fully translated**, thanks to [@espinafr](https://github.com/espinafr), the second contribution from outside. Portuguese was listed as finished and was not: 133 of the app's 208 phrases were falling back to English. All of them are translated now, and 30 of the existing ones were rewritten by someone who speaks the language. The most visible change is that clips are "cortes" rather than "clipes", which is what Brazilian editors actually call them. If something still reads oddly, [#59](https://github.com/ColinGPT9/clips-studio/issues/59) is the place to say so: two phrases are already known to need a second opinion. - **Clips Studio is coming to the Microsoft Store.** Same application, same local processing; the Store version is updated by the Store rather than by the in-app updater, and its donate button opens your browser. The standalone installer is unchanged and stays the main way to get it. --- ## 0.1.2 (2026-08-10) ### Fixed - **Your clip settings are remembered again.** Turning captions off, closing the app and reopening it brought captions back on. Five settings behaved this way: captions, 60s+ clips, podcast mode, longform and its mode. They were read from storage on startup but never actually saved. - **The Watermark tickbox works.** It silently refused to stay ticked when no branding profile existed yet. It now explains that a profile has to be created first, rather than looking broken. - **A failed render says what went wrong.** A memory failure used to print pages of encoder output for every affected clip. It now says so in one sentence, once, however many clips were hit. ### Changed - **The Models page makes sense.** It had one heading, "Your hardware", over rows like "Multilingual" and "Newer Gemma", which are not hardware, and a "Why" column carrying licences and warnings at the same time. There are now two tables: what your machine can run, and what to pick for a particular job. `gemma3:4b` also appeared twice; it is one row now. - **More models to choose from**, all free to run locally and all usable on clips you earn from. `gemma4:e2b` and `gemma4:e4b` are built for ordinary local machines and are recommended alongside the Gemma 3 line. `e2b` suits a low-power or older PC, `e4b` anywhere `gemma3:4b` fits. Qwen3 for translation and multilingual work, and Mistral Nemo or Phi-4 for anyone who wants a plainly permissive licence. --- ## 0.1.1 (2026-08-09) The release that made 0.1.0 usable. Both bugs were packaging mistakes, and both were invisible on a development machine, which is exactly how they reached a release. ### Fixed - **No clip could be produced, from any source.** Every job died partway with `No module named matplotlib`. The bundle excluded a library that the tracking model needs in order to load at all. - **YouTube downloads failed** with `ffmpeg is not installed`. FFmpeg ships inside the app, but the downloader looked for it on the system instead of being told where it lived, so it could not join YouTube's separate video and audio streams. Twitch and Kick were unaffected, because their recordings arrive as a single stream, which is what made it look like a YouTube problem rather than a packaging one. --- ## 0.1.0 (2026-08-08) First public alpha. - Paste a Twitch VOD, Kick VOD or YouTube link and get vertical clips with word-synced captions and written titles. - Everything runs on your own computer. No uploads, no subscription, no cap on how many clips you make. - One installer. It carries the app, the engine, FFmpeg, the AI runtime and the tracking and transcription models. The only thing fetched afterwards is the language model, sized to your graphics card on first launch. - Editor for fixing anything the AI got wrong, multilingual captions, creator profiles that learn from your corrections, and a queue that runs unattended.