Skip to content

v1.9.2

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Oct 02:15
· 1 commit to main since this release
530a5a7

Published to PyPI: https://pypi.org/project/videokidnapper/1.9.2/

macOS: *-macos-arm64.dmg (Apple Silicon) · *-macos-x86_64.dmg (Intel). Signed and notarized by Apple; FFmpeg bundled.


Everything in one window, easier trimming, and a steadier player. Typing in a caption no longer fires shortcuts, Play no longer opens a console window or crashes, the preview keeps up with 4K, and on Windows updates now install themselves.

Added

  • Updates install themselves on Windows. When a new version is out, the bar at the top of the window asks whether to Restart to update (Setup, winget and portable installs). The new version downloads from the GitHub release with a progress bar in that same bar, is checked against the SHA-256 checksum GitHub publishes, and after you're asked to save your project the app closes, installs it and opens again. Setup and winget installs upgrade silently in the same per-user or all-users scope they were installed with (an all-users install still shows the Windows admin prompt); the portable build swaps its own .exe. You can cancel the download at any time, and the first start after an update says which version you're on. This works from 1.9.2 onward: updating to 1.9.2 itself still goes through the release page once.
  • Trimming is easier to see and to do.
    • The two trim handles are now solid blue tabs on the video and audio lanes. They sit just inside the part being kept, so you can grab them even at the very start and end of the clip, and they light up under the mouse. The video and audio that will be cut are washed out.
    • While you drag a handle, the ruler shows exactly where it is and how long the part is.
    • Drag across the empty Ranges lane, or Shift-drag anywhere on the timeline, to draw the part to keep in one go.
    • The timeline bar says what will be exported, for example "Keeping 1:55.0 – 2:07.2 · 12.2 s", and Whole video puts the full clip back.
    • Under the preview, Mark in and Mark out are now Start here and End here, in the trim colour.
    • ← and → step one frame for a cut on the exact frame; Shift+←/→ move a second.
  • Delete (or Backspace) removes the caption or image picked on the timeline, and Ctrl+Z brings it back.
  • Icon buttons say what they do. Hover over any icon (undo, crop, previous and next caption, the arrows under the preview…) and the status bar says what it does and its key. The caption's delete button now sits a little apart from the others.
  • Discord presets warn about size. With Discord (8 MB) or Discord (25 MB) picked, "You'll get" turns orange when the export will probably be too big to upload, instead of the upload failing afterwards.
  • Right-click a text box for Cut, Copy, Paste and Select all.
  • Right-click a caption or image on the timeline to go to its start, duplicate it (captions) or delete it.
  • Export says when the frame shape cuts the picture. A platform preset sets the frame shape too, so picking "YouTube 1080p" for a vertical clip cut most of it away, and only the Edit preview showed it. "You'll get" now says, for example, "Frame 16:9: cuts off the top and bottom, keeping 32% of the picture", with a Keep its shape button.
  • A crash leaves a note behind. If the app ever closes unexpectedly, the next start says so in the status bar and puts what it logged (including where every thread was when it died) in Settings › Debug log. The log is kept in .videokidnapper_crash.log in your home folder and trimmed to the last few runs.

Changed

  • One window. Recovering unsaved work, saving before you close or open another project, stopping an export that is still running, and restarting after a theme change are now asked in a bar at the top of the window instead of separate popups. The bar floats over the top edge, so nothing else moves, and you can keep working while it waits. Closing the recovery bar with ✕, or opening another video first, keeps the unsaved work for next time.
  • Projects are in the main window. Click the project's name in the header for Open project, Save, Save as and your recent projects. Import lists recent projects too, each with an Open button. The separate Projects window is gone.
  • No welcome window on first start. The app opens on Import, which already shows the ways to bring a clip in.
  • Exporting no longer opens a separate window. Progress, Stop and the finished file now appear right under the Export button: open the file, show it in its folder, or share it from there. While an export runs the button turns into Stop, so pressing it again can't start a second export. Quick export and Ctrl+E take you to Export so you can watch it.
  • Captions from speech is now in the Text tab. Pick the Whisper model and press Generate captions; progress, Stop and the result show in the same place, and the model you chose is remembered. Captions ▾ ▸ Captions from speech opens it.
  • Screen recording is set up on the Import page. Type how many seconds and press Start recording. The window still hides while it records; open it again to stop early, and what was recorded so far is kept. The Record buttons in Edit take you there.
  • Text colour no longer opens the system colour picker. The Text tab shows the eight preset swatches and a box for any hex code, such as #FF8800, next to the current colour.
  • Setup and components opens inside the window. It used to open a second window. It is now a page in the main window, like the debug log: the prerequisites on the left, the install output on the right, all without scrolling. Back or Esc returns to the step you were on. An install keeps going if you leave the page, and the page shows how it went when you come back. On first run, Review details opens the same page in place of the setup screen.
  • Keyboard shortcuts open inside the window. Press ?, or the ? button in the header, to see every shortcut on one page. Press ? again, Esc or Back to return to where you were. A ? typed into a caption or any other text box is still just a question mark.
  • The update offer is in the main window too. Store, pip and release-page installs see their update route in the bar at the top instead of a separate window.
  • Smooth scrubbing. Dragging the playhead no longer freezes the window while each frame is fetched: frames load in the background and show as they arrive. In a test drag across a 1080p clip the window was unresponsive for 3.7 seconds in total before, and 0.2 seconds now. Loading a clip also shows the window sooner.
  • Faster start. The window is ready about a third sooner (2.6 s to 1.7 s on the test machine): the Export page and the Inspector's Text and Image tabs are built the first time they are used instead of at startup.
  • The Text tab fits without scrolling. At a 1440×900 window, half of it (position, timing, fade and motion) used to sit below a scrollbar. Position and its hint share a row, the From/to times and Fade each take one row, and Motion is a single row until you switch it on. The Clip tab's trim times are labelled Start and End and share a row.
  • Smoother preview. Shrinking each frame to fit the preview takes about half as long (a 1080p frame went from 12 ms to 6 ms, 4K from 33 ms to 15 ms), which matters most while playing, typing a caption and dragging. Stickers are resized once instead of on every redraw, a sticker drag no longer reloads the file twice per step, and an animated sticker's frames are freed when it's removed. Resizing the window redraws the preview and timeline once it settles instead of for every pixel, and dragging a caption that isn't on screen no longer redraws the preview. History thumbnails are fetched small, and the app starts a little sooner.
  • Faster timeline and much less memory. The filmstrip under the timeline loads about twice as fast and uses a few hundred kilobytes instead of up to 800 MB for 4K video, because it now fetches small frames several at a time instead of full-size frames one by one. The preview's frame cache is now capped by memory as well as by count. The waveform for an hour-long video is drawn in a fraction of a second instead of several seconds. Loading a clip no longer asks ffprobe about the same file eight times.
  • 4K plays in step with the sound. Playback now has ffmpeg decode frames at about the size they're shown, and skips a frame that arrives late instead of falling further behind. In a 6-second 4K test the picture used to run about 50 ms behind the sound and showed 105 of its 180 frames; it now shows all 180, in step.
  • Typing a caption no longer redraws the whole frame. The frame is shrunk to the preview once, and each keystroke, sticker drag or caption edit only redraws the captions and stickers on top, as small patches laid out exactly as before. A keystroke on a 4K frame went from 40 ms to 7 ms (84 ms to 7 ms with a colour grade), and a blur-filled 9:16 frame from 72 ms to 24 ms. Animated stickers load in the background instead of pausing the window, a sticker drag counts as one change instead of two, and the timeline only redraws when something on it changed.
  • Every installed font is in the caption font menu, and each one draws as itself. The menu stopped at 30 fonts, and 19 of those came out as Arial in the preview and the export, because the font file was guessed from its name. The app now reads each font file's own name in the background at start, so all of them can be picked (about 200 on a stock Windows 11), Bold and Italic find the right file, and fonts installed just for you are found too.
  • Time boxes take the short forms. "1:30", "90" or "90.5" in a Start, End, From or Until box now work; they used to be thrown away. Anything that isn't a time gets a red border, and so does a font size that isn't a number, instead of quietly becoming 24.

Fixed

  • A failed export only said "Clip 1 failed". It now says why and what to try, for the common cases: a full drive, a folder Windows won't let it write to, a missing file, a damaged video, running out of memory, or the graphics card's encoder failing. ffmpeg's own output is still in the Debug log.
  • Captions from speech in the installed app told you to run a pip command, which the installed app has no way to do. It now says plainly that this version can't make captions from speech, and to import an SRT or VTT file instead.
  • Deleting a caption or image now says that Ctrl+Z brings it back.
  • A sticker larger than the frame could stop the preview from drawing. It is now clipped to the frame, as in the export.
  • A terminal window popped up when you pressed Play (Windows). The sound for playback comes from ffmpeg, a console program, and it was started without hiding its window, so a black console window opened over the editor and took the focus. It now runs hidden, like every other ffmpeg the app starts, and a test checks every place the app starts a program. The first export on a new PC and Captions from speech could flash a console the same way.
  • Pausing and playing again quickly could still crash the app. Every Play starts a new player, and the sound of the one just paused could still be closing while the next one opened, inside a sound library that can't take both at once. That is the crash Windows logged for 1.9.1 (an access violation in PortAudio). Opening and closing sound now take turns, and closing the window waits for every player's sound to close, not just the last one.
  • Playback was silent when ffmpeg wasn't on PATH, for example a copy installed by Setup next to the app. Playback now uses the same ffmpeg as everything else, for the picture too, so the preview's colours match the export.
  • Scrubbing could show a garbled frame that stayed until it dropped out of the cache. A frame was cached before it was decoded, and two threads then decoded it at once.
  • One frame that failed to draw stopped playback's picture while the sound carried on, and the button stayed on Pause. The picture now keeps going, and the problem goes to the Debug log.
  • An export could get stuck on "Stop export" until the app restarted, if something went wrong between clips (a drive unplugged, say). It now reports the error and is ready for the next export.
  • Stop didn't stop joining clips into one file, and a join that failed or was stopped left a half-written file. Stop now stops it, the partial file is removed, and a failed join says the clips were saved separately instead of reporting success.
  • A "Save to" folder that can't be used showed a raw Windows error. It now says which folder and to pick another with Change.
  • A screen recording that failed while saving left the window minimised and the page stuck on "Encoding…". Its frames are now also deleted once the video is made, instead of staying on disk until the app closed.
  • An update offered at startup was sometimes lost, when GitHub answered before the window was ready.
  • Saving a project failed when another program had it open for a moment (antivirus, OneDrive, a backup tool). Saves and autosaves now retry, as settings already did.
  • The app could hang or close to the desktop when something printed in the background. Everything printed goes to the Debug log, and the log updated the window straight from whichever thread printed. Background work (playback, downloads, exports) now only queues its lines, and the window picks them up.
  • A caption box kept the keyboard after you clicked away. After typing a caption and clicking the preview, Space typed a space instead of playing, and I, O, J, K, L and Q went into the caption. Clicking anything that isn't a text box, or pressing Esc, now hands the keys back, and a time typed into a "Shows from" or "Until" box is applied when you click away. Switching between Import, Edit and Export does the same for a box that's no longer on screen.
  • Ctrl+O in a caption inserted a line break instead of opening a file, and Ctrl+K, Ctrl+D and Ctrl+T deleted or swapped letters. These leftover Unix editing keys are gone from every text box; Ctrl+O and Ctrl+E now open and export from inside one too.
  • Ctrl+Z inside the caption box did nothing. It now undoes your typing there. Text pasted with the mouse now reaches the caption, too.
  • Undoing a delete skipped back past your last edit if you deleted within a moment of making it.
  • Short clips on the timeline could only be resized, never moved. A clip narrower than about 12 pixels was all edge; its middle now always moves it.
  • Typing with Num Lock on triggered shortcuts on Windows. A capital S typed into a caption opened Save As, a lowercase s saved the project, O opened a file instead of marking the out point, and outside text fields E could start an export. The ⌘ shortcuts meant for macOS were bound on every platform, and Windows reports Num Lock as the same modifier. They are now bound only on macOS; Ctrl shortcuts work as before.
  • Captions and stickers appeared at the wrong moment. The editor times them on the full video, but the export counted from the start of the clip, so any clip that did not start at 0:00 showed them late or not at all. They now appear exactly where the preview shows them, at any speed, and a motion-tracked caption follows the same path.
  • A speed change made the clip the wrong length. At 2x the export ran on past the end of the selection, and at 0.5x it stopped halfway through. MP4, GIF and MP3 exports now cover exactly the selection.
  • A caption with % in it came out wrong. "100% done" lost its percent sign, "%{pts}" turned into a timestamp, and backslashes were mangled. Caption text is now printed exactly as typed.
  • A manual crop with a frame shape was stretched. With a manual crop and a preset such as 9:16, the export squeezed the crop into the preset's box. The manual crop now keeps its own shape, as it does in the preview.
  • Some manual crops could not be exported. A crop with an odd width or height failed with an encoder error unless the export also downscaled. It is now trimmed by a pixel to an even size.
  • A failed or stopped export left a broken file behind. It is now removed.
  • Stop did nothing during the first part of a GIF export, and a long GIF could fail after three minutes. The first pass now shows progress, stops when asked and has no time limit.
  • Non-English file names could stop an export. On Windows, ffmpeg messages containing such names were read with the wrong text encoding.
  • An export kept running in the background if its progress window failed partway. ffmpeg is now stopped.
  • A file with sound but no picture now gets a clear message pointing to Audio only instead of an empty video. A file ffprobe describes strangely now gives a clear "cannot read" error instead of a crash.
  • Saving a recovered project deleted it. After recovering unsaved work from a crash, Save wrote into the autosave and then removed it. Save now asks where to save. Closing the recovery prompt, or the app while the prompt is up, no longer throws the autosave away; it is offered again next time.
  • A damaged project could overwrite the one you had open. If a project failed partway through opening, the next Save wrote its content into the previous project's file. A damaged project now opens as an untitled project with a warning, and odd values in project files are read sensibly instead of failing.
  • A moved or shared project lost its media. Projects now find the video and images next to them after the folder is moved, copied to another drive or sent to someone else.
  • Odd values in the settings file stopped the app from starting. A hand-edited or damaged settings file now falls back to defaults for the values it cannot use.
  • Settings changes were sometimes lost on Windows when something else was reading the settings file at the same moment, for example the newest History entry. Writes now retry.
  • One broken plugin stopped the app from starting. A plugin with a numeric version range, or one that quits while loading, is now skipped and reported in the Debug log.
  • Closing or restarting during an export left ffmpeg running in the background. You are now asked first, and the export is stopped cleanly. "Restart now" after a theme change and Setup's Relaunch now ask about unsaved work like closing does.
  • Check for updates said "You're up to date" when it could not reach GitHub. It now says the check failed. A pip install inside another git folder is no longer mistaken for a source checkout.
  • Dropping a file with braces in its name, such as "Take {2}.mp4", now works.
  • Pressing ? to close the shortcuts list opened it again. It now closes.
  • Command line: --audio-only now writes an .mp3, --audio-only with --format GIF and a speed outside 0.25–4 are refused, and an unreadable file prints an error instead of a traceback.
  • Pausing could close the app. Pausing playback, or anything that stops it (clicking the timeline, stepping with J or L, opening another file), could crash the app without a word. Closing the window while a clip played left the sound running and crashed on the way out. Playback now stops cleanly.
  • Videos without sound would not play. Screen recordings, GIFs and other silent videos stopped a fraction of a second after pressing Play. They now play to the end, as does a clip whose sound ends before its picture.
  • Playback ignored rotation, frame shape and stickers. While a clip played, the preview showed the original video without the rotation, frame shape, crop, blur fill or image overlays, and stayed that way after pausing, so a caption dragged just after pausing landed in the wrong place. Playback now shows what the export will.
  • Dragging the in or out point on a zoomed-in timeline went the wrong way. The timeline scrolled under the mouse while you dragged, so the edge ran off, often towards the start of the video. The edge now follows the mouse.
  • The preview ignored a finished crop. After cropping by hand, the preview laid captions out on the whole picture while the export placed them inside the crop. The preview now shows the cropped frame, so captions land where they will be exported.
  • Dragging a sticker could move a different one. If an earlier image overlay's file had gone missing, dragging the visible sticker moved the missing one instead. The sticker you drag is now the one that moves.
  • "Follow an object" reset the caption's look. After tracking, the caption went back to the default size, color, box, outline and shadow. It now keeps its style.
  • Dragging the in or out point lagged once ranges were saved, up to a second per mouse movement with ten ranges, because the hidden Export page rebuilt its range list on every move. It now updates when you open it.
  • Empty clips were exported as broken files. Pressing O at the very start or I at the very end made an empty selection, and a project reopened with a shorter video kept an Out point and saved ranges past its end. Both exported tiny files with no picture and called it a success. The mark keys now keep a selection at least a twentieth of a second long, a reopened project's ranges are fitted to the video, and an export that comes out empty is reported as failed.
  • Work that finished after you opened another video landed in it. Captions from speech and "Follow an object" applied their results to whatever was open when they finished, and a multi-part export cut its remaining parts from a video opened with Ctrl+O in the meantime. Each now sticks to the video it started with, and Ctrl+O, Ctrl+E and the other shortcuts wait while the export window is open.
  • Closing the app deleted downloaded videos and pasted stickers. Downloads and images pasted from the clipboard were kept in a temporary folder that was emptied on exit, so a saved project could not find its video or stickers the next time. They are now kept in Downloads\VideoKidnapper (pasted images in its "Pasted images" folder), and closing the app only clears unfinished downloads.
  • Importing a subtitle file froze the app. Each caption built a hidden set of controls, so a 50-line SRT took most of a minute and a 300-line one stopped after about 90 lines with "No more menus can be allocated". Captions are now plain data edited in the Inspector: a 300-line file imports in a fraction of a second, and undo with many captions is fast too.
  • One odd value made a whole project count as damaged. A caption, sticker or motion-path value of the wrong kind in a project file (a word where a number belongs, a missing point) made the project open as an untitled copy. Such values now fall back to their defaults and the project opens normally under its own name. A motion path with no usable points no longer stops the preview; the caption stays where its position says.
  • A download could open a different video with the same title. Instagram names every reel "Video by" its account, so the second reel from an account came back as the first one, with no error. Downloaded files now carry the video's id in their name.
  • Batch "Stop after this file" stopped the file it was on. It cut the current export short, marked it Stopped and left a broken half-file behind. It now lets that file finish and stops before the next one; click it again ("Stop now") to stop the current file too, which removes the unfinished file.
  • Batch export could overwrite its own files, or ignore "Save to". Two files whose names differed only in capitals, such as Clip.mp4 and clip.mp4 from different folders, were saved to the same file, so one replaced the other while both rows said Done. Changing "Save to" after adding files still saved them to the old folder, and switching between MP4 and MP3 could overwrite an earlier export. Each file now gets its own name, and the queue follows the current folder and format, never writing over an existing file.
  • A link pasted during a download was lost. While a video downloaded, the link box ignored pasted links (while saying "Link pasted"), and the Edit page's Get button downloaded the previous link a second time and threw the new one away. One download now runs at a time, a new link waits in its box until you press Download, and a new Cancel button stops the running download. A download that fails unexpectedly no longer leaves the Download button stuck.
  • Subtitle files lost lines or showed their markup. WebVTT files that leave out the hours (as most do for clips under an hour) imported nothing; a caption that was just a number, such as a "3, 2, 1" countdown, was dropped; italics and colour tags such as and {\an8} were burned into the video as text; accented letters in older subtitle files turned into "�"; and a time like 00:00:01,5 was read as 1.005 seconds. All of these now import correctly. Lines that start after the end of the video are left out (and counted in the message) instead of being added invisibly, and the first imported caption is selected.
  • History listed only one file from a multi-part export. Exporting several ranges without joining them wrote a file for each, but History showed only the last. Every file is now listed.
  • Some links were taken for X (Twitter). Any link containing "x.com/", such as Dropbox, Netflix or Xbox links, lit up the X chip, used X's download settings and blamed X for errors ("This X/Twitter post is private"). Platforms are now recognised by the link's site name only.