vidgrab-studio 4.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vidgrab_studio-4.1.0/.gitignore +24 -0
- vidgrab_studio-4.1.0/CHANGELOG.md +217 -0
- vidgrab_studio-4.1.0/LICENSE +21 -0
- vidgrab_studio-4.1.0/PKG-INFO +130 -0
- vidgrab_studio-4.1.0/README.md +98 -0
- vidgrab_studio-4.1.0/assets/NotoSansTC-Regular.otf +0 -0
- vidgrab_studio-4.1.0/assets/flags/tw.png +0 -0
- vidgrab_studio-4.1.0/assets/flags/us.png +0 -0
- vidgrab_studio-4.1.0/assets/icon.ico +0 -0
- vidgrab_studio-4.1.0/assets/icon.png +0 -0
- vidgrab_studio-4.1.0/docs/icon.png +0 -0
- vidgrab_studio-4.1.0/ffmpeg/pin.json +39 -0
- vidgrab_studio-4.1.0/pyproject.toml +74 -0
- vidgrab_studio-4.1.0/pytest.ini +3 -0
- vidgrab_studio-4.1.0/scripts/build.bat +85 -0
- vidgrab_studio-4.1.0/scripts/build.ps1 +52 -0
- vidgrab_studio-4.1.0/scripts/fetch_ffmpeg.py +36 -0
- vidgrab_studio-4.1.0/scripts/generate_icon.py +42 -0
- vidgrab_studio-4.1.0/scripts/write_version_info.py +67 -0
- vidgrab_studio-4.1.0/tests/conftest.py +6 -0
- vidgrab_studio-4.1.0/tests/test_app.py +19 -0
- vidgrab_studio-4.1.0/tests/test_captions.py +451 -0
- vidgrab_studio-4.1.0/tests/test_cli.py +42 -0
- vidgrab_studio-4.1.0/tests/test_cuda_runtime.py +119 -0
- vidgrab_studio-4.1.0/tests/test_downloader.py +814 -0
- vidgrab_studio-4.1.0/tests/test_ffmpeg_fetch.py +109 -0
- vidgrab_studio-4.1.0/tests/test_gpu.py +123 -0
- vidgrab_studio-4.1.0/tests/test_gui_smoke.py +1861 -0
- vidgrab_studio-4.1.0/tests/test_i18n.py +55 -0
- vidgrab_studio-4.1.0/tests/test_icon.py +65 -0
- vidgrab_studio-4.1.0/tests/test_integration.py +124 -0
- vidgrab_studio-4.1.0/tests/test_jobs.py +53 -0
- vidgrab_studio-4.1.0/tests/test_network.py +54 -0
- vidgrab_studio-4.1.0/tests/test_studio.py +702 -0
- vidgrab_studio-4.1.0/tests/test_ytdlp_update.py +132 -0
- vidgrab_studio-4.1.0/vidgrab/__init__.py +8 -0
- vidgrab_studio-4.1.0/vidgrab/__main__.py +6 -0
- vidgrab_studio-4.1.0/vidgrab/_version.py +3 -0
- vidgrab_studio-4.1.0/vidgrab/app.py +4227 -0
- vidgrab_studio-4.1.0/vidgrab/captions.py +804 -0
- vidgrab_studio-4.1.0/vidgrab/cli.py +73 -0
- vidgrab_studio-4.1.0/vidgrab/cuda_runtime.py +184 -0
- vidgrab_studio-4.1.0/vidgrab/downloader.py +1451 -0
- vidgrab_studio-4.1.0/vidgrab/downloads_panel.py +385 -0
- vidgrab_studio-4.1.0/vidgrab/ffmpeg_fetch.py +152 -0
- vidgrab_studio-4.1.0/vidgrab/gpu.py +196 -0
- vidgrab_studio-4.1.0/vidgrab/i18n.py +1200 -0
- vidgrab_studio-4.1.0/vidgrab/icon.py +396 -0
- vidgrab_studio-4.1.0/vidgrab/jobs.py +103 -0
- vidgrab_studio-4.1.0/vidgrab/network.py +73 -0
- vidgrab_studio-4.1.0/vidgrab/pick_dialogs.py +308 -0
- vidgrab_studio-4.1.0/vidgrab/preview.py +1412 -0
- vidgrab_studio-4.1.0/vidgrab/split_dialog.py +324 -0
- vidgrab_studio-4.1.0/vidgrab/studio.py +1582 -0
- vidgrab_studio-4.1.0/vidgrab/studio_page.py +4952 -0
- vidgrab_studio-4.1.0/vidgrab/ytdlp_update.py +210 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
.venv/
|
|
2
|
+
venv/
|
|
3
|
+
__pycache__/
|
|
4
|
+
*.py[cod]
|
|
5
|
+
build/
|
|
6
|
+
dist/
|
|
7
|
+
*.spec.bak
|
|
8
|
+
*.egg-info/
|
|
9
|
+
.DS_Store
|
|
10
|
+
Thumbs.db
|
|
11
|
+
|
|
12
|
+
# Large binaries downloaded separately (see ffmpeg/README.txt)
|
|
13
|
+
ffmpeg/ffmpeg.exe
|
|
14
|
+
ffmpeg/ffprobe.exe
|
|
15
|
+
ffmpeg/ffplay.exe
|
|
16
|
+
ffmpeg/win/
|
|
17
|
+
ffmpeg/linux/
|
|
18
|
+
ffmpeg/mac/
|
|
19
|
+
assets/icon.icns
|
|
20
|
+
.pytest_cache/
|
|
21
|
+
.ruff_cache/
|
|
22
|
+
|
|
23
|
+
# Generated at build time by scripts/write_version_info.py
|
|
24
|
+
version_info.txt
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 4.1.0
|
|
4
|
+
|
|
5
|
+
Two videos at once, a much more capable Download page, and VidGrab for macOS and pip.
|
|
6
|
+
|
|
7
|
+
### Starting a pip install
|
|
8
|
+
|
|
9
|
+
- **`vidgrab --info`** shows what the installation has (ffmpeg, auto captions, yt-dlp, Python) and **`vidgrab --help`** / **`--version`** answer in the terminal without opening a window; the README now shows how to start the app from a short Python script too
|
|
10
|
+
|
|
11
|
+
### Install with pip, and a macOS app
|
|
12
|
+
|
|
13
|
+
- **`pip install vidgrab-studio`** (then `vidgrab`): the same app as a Python package for Windows, Linux and macOS, Python 3.10+. The package carries no ffmpeg and no AI model: ffmpeg is used from `PATH` or downloaded once on first run (with a prompt), speech models come on first use as always. Auto captions are an extra: `pip install "vidgrab-studio[captions]"`; without it the button explains how to add it. A pip install leaves updating yt-dlp to pip, so the in-app updater is hidden there. Publishing to PyPI is wired into the release workflow but off until the repository variable `PYPI_PUBLISH` is `true` and PyPI trusts the repository
|
|
14
|
+
- **macOS app** (`VidGrab-macos-arm64.zip` for Apple silicon, `VidGrab-macos-x64.zip` for Intel): a `VidGrab.app` built by CI. It is not signed, so the first launch needs right-click → Open. ffmpeg is not inside it (the only static build with libass is not redistributable): the app downloads the pinned build once on first use, after asking, and checks its SHA-256. On a Mac, videos can be encoded with Apple VideoToolbox, and speech recognition uses the performance cores. **Built and self-tested by CI on real Apple-silicon and Intel runners (the speech engine and the Studio renders pass there); not yet used by a person on a Mac.**
|
|
15
|
+
- The pinned ffmpeg now also lists the two macOS builds (`ffmpeg/pin.json`, fetched by `vidgrab/ffmpeg_fetch.py`, which `scripts/fetch_ffmpeg.py` uses too)
|
|
16
|
+
|
|
17
|
+
### Downloads: more formats, sites and control
|
|
18
|
+
|
|
19
|
+
- **Search YouTube from the link box**: type words instead of a link and the button becomes **Search**. The results appear in the page itself, with thumbnails and tick boxes (click anywhere on a row), and **Add to downloads** puts the ticked ones in the link box. Emoji and decorative letters in titles, which the fonts can't draw and used to show as empty boxes, are removed from the titles shown in the window (file names are not changed)
|
|
20
|
+
- **Other sites**: the same link box works for the sites yt-dlp supports (Vimeo, X, Twitch, SoundCloud, Bilibili, Instagram, direct video files and many more); sites that need a login are not supported yet
|
|
21
|
+
- **Audio formats**: besides MP3, **M4A (AAC)**, **Opus**, **FLAC** and **WAV** (the last two are lossless, so they have no bitrate). Pick it next to *Audio*, or set a default in Settings
|
|
22
|
+
- **Exact format**: **Exact format…** lists every resolution / codec / size the video offers (VP9, AV1, 60 fps…) and downloads exactly that one; the sound is added to picture-only formats
|
|
23
|
+
- **Live streams and premieres**: a live video shows *Record this live stream from the start*; a scheduled one waits until it begins. Stopping a recording keeps what was recorded as an MP4. Tested with fakes, not against a real live stream
|
|
24
|
+
- **Subtitles** in 15 languages (Korean, Spanish, French, German, Portuguese, Russian, Indonesian, Vietnamese, Thai, Arabic and Hindi added). A language the video lacks uses YouTube's automatic translation; "too many requests" answers are waited out and retried instead of giving up
|
|
25
|
+
- **Skip videos already downloaded** for playlists and channels (Settings → Downloads), with a list that can be forgotten
|
|
26
|
+
- **Network** settings: speed limit, proxy (HTTP or SOCKS) and retry count
|
|
27
|
+
- **Update yt-dlp without a new VidGrab release** (Settings → Downloads → Download engine): checks PyPI, downloads the new yt-dlp (checksum verified), and uses it after a restart; **Use the built-in version** goes back. A quiet check at start (can be switched off) shows a button on the Download page when one exists. An update that fails to load is switched off automatically, and one made under an older VidGrab is ignored
|
|
28
|
+
|
|
29
|
+
### Settings
|
|
30
|
+
|
|
31
|
+
- **Pop-up windows are easier to see**: dialogs, message boxes, menus, drop-down lists and tooltips now have a lifted background and a clear outline in both the dark and the light theme
|
|
32
|
+
- Settings is now three tabs — **General**, **Downloads**, **Studio** — so nothing needs scrolling
|
|
33
|
+
|
|
34
|
+
### Docs
|
|
35
|
+
|
|
36
|
+
- The README is much shorter and written for people who just want to use the app; build and release notes moved to `CONTRIBUTING.md`, the speed measurements to `docs/performance.md`
|
|
37
|
+
- **Demo video and user guide re-recorded for 4.1.0** (5 min 23 s, 33 pages): search, exact format and audio formats, two videos at once, the three Settings tabs, the macOS and pip notes. The guide's screenshots are stored as high-quality JPEG, so it is 5.5 MB instead of 11 MB. The README's main picture shows the current Studio
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- **The search results panel stayed in the old language** when the app language was changed while it was open
|
|
42
|
+
- **The app could not start on Python 3.10 / 3.11** from source (two f-strings with a backslash inside the braces, valid only from 3.12); the packaged builds were unaffected
|
|
43
|
+
- **MP3s made for "MP4 + MP3" downloads, and trimmed or sped-up MP3s, came out at 64 kbps** whatever you chose (the bitrate was passed to ffmpeg without its "k"); they now use the chosen bitrate
|
|
44
|
+
- **Links to a plain video file** (and other sites whose formats don't report a height) failed with "Requested format is not available" whenever a resolution was chosen; the resolution cap now lets formats of unknown height through
|
|
45
|
+
|
|
46
|
+
### Two videos at once
|
|
47
|
+
|
|
48
|
+
- **Two videos…** in the Studio plays two videos at the same time in one frame and adds the result to the timeline as a normal clip (trim, subtitles and music work on it as usual). Layouts: **Left | Right**, **Top / Bottom**, **Big + small** and **Picture in picture**, with a live preview of both videos in their places. Choose the frame size (16:9, vertical 9:16 for Shorts / Reels, square; stacked videos start on vertical), the gap between them, whether each video is cropped to fill its space, which sound to keep (both, one, none) and whether it ends with the longer or the shorter video (the shorter one holds its last picture). It starts from the first two clips of the project, with their trims. It encodes on the graphics card when that switch is on, with the usual CPU fallback
|
|
49
|
+
|
|
50
|
+
## 4.0.0
|
|
51
|
+
|
|
52
|
+
Offline AI captions that use your graphics card, plus a much bigger Studio: per-clip speed, animated and individually styled subtitles, multi-select, export presets and crash recovery.
|
|
53
|
+
|
|
54
|
+
### Auto captions and graphics cards
|
|
55
|
+
|
|
56
|
+
- **Auto captions**: "Auto captions…" in the Studio turns the speech in the clips into subtitle lines with Whisper, on this computer — nothing is uploaded. Pick the spoken language (or detect it; Chinese can be Traditional or Simplified) and the accuracy: **Fast**, **Balanced** or **Best** (large-v3 turbo). Lines follow the clips' trims, speed and place in the montage; muted clips are skipped. Lines break at sentences, pauses and commas, never inside a word; Chinese lines use spaces instead of commas, as subtitles usually do. Singing over music is still captioned, and Whisper's stock invented lines ("please subscribe…") are dropped. The Render button stops it while it runs; the result is one undo step
|
|
57
|
+
- **Graphics cards for auto captions** — three engines, each falling back to the next if it can't load or fails: **NVIDIA** (CUDA; VidGrab downloads the CUDA 12 cuBLAS / cuDNN libraries once, about 1.3 GB, from NVIDIA's pinned official wheels, so nothing has to be installed), **Intel** graphics (integrated or Arc, through OpenVINO: the *Best* model runs there in 5 s per minute of speech against 19 s on a fast CPU), and the **CPU**. Verified end to end on an Intel Arc 140T; the NVIDIA path is tested with real library downloads and fakes but not on an NVIDIA card
|
|
58
|
+
- **Captions are 5–7× faster on the CPU too**: the old setting used every core, and on laptop chips with performance and efficiency cores that made recognition several times *slower* (one minute of speech: 35 s → 9 s at Balanced). It now uses only the fast cores (read from Windows / Linux), capped at 8 threads
|
|
59
|
+
- **Render on the graphics card**: the video is encoded with NVIDIA NVENC, Intel Quick Sync or AMD AMF when one works (checked by a test encode), the picture quality is the same (SSIM 0.9973 against 0.9975 on a test clip), and a render that fails on the card is redone on the CPU. About 1.5× faster at Balanced and 1.8× at High on a fast laptop CPU, 3× on one with few cores; no gain at Fast
|
|
60
|
+
- **Settings → Hardware**: two switches (render on the graphics card, auto captions on the graphics card; on by default) with a status line saying what was found. **Settings → Storage** shows the downloaded speech models and deletes them
|
|
61
|
+
- **Models are downloaded on demand, not bundled**, to the local cache (`%LOCALAPPDATA%\VidGrab\models` on Windows, `~/.cache/vidgrab/models` on Linux — not the roaming profile): 85 / 260 / 830 MB for Intel graphics, 150 / 490 MB / 1.6 GB for NVIDIA and the CPU
|
|
62
|
+
- **Nothing hangs or crashes when hardware misbehaves**: the graphics-card check is time-limited (a stuck driver counts as "no card"); a render whose graphics encoder stops answering for two minutes is abandoned and redone on the CPU; each captions engine that fails (bad driver, out of memory, corrupt or missing model, no network) hands over to the next, ending on the CPU; a half-downloaded model or CUDA package leaves no partial files and a retry resumes after the last finished package; and quitting while a caption job or hardware check is stuck in a driver no longer aborts the app, nor does it refuse to quit. Basic integrated Intel graphics (under 64 execution units, e.g. UHD 620) are still used when the switch is on, but Settings and the captions dialog say they may be slower than the CPU, so the user decides
|
|
63
|
+
- OpenVINO's analytics (it posts to Google Analytics as soon as it is imported) are switched off, and the package isn't bundled; a test fails if anything touches the network on import
|
|
64
|
+
|
|
65
|
+
### Studio
|
|
66
|
+
|
|
67
|
+
- **Never lose an edit: autosave and crash recovery.** The Studio keeps a recovery copy of the project while you work; if VidGrab closes without saving (a crash, a power cut), it offers to restore it at the next start
|
|
68
|
+
- **Per-clip speed (0.25×–4×)**: in the Clip panel's Trim tab (0.5× / 1× / 1.5× / 2× or any value). The sound keeps its pitch, the timeline block shrinks or grows to match, transitions and subtitles line up with the sped-up clip, and the preview plays at that speed
|
|
69
|
+
- **Subtitle effects and per-line looks**: a new **Effects** tab per line with entry animations (**Pop**, **Slide up**, **Typewriter**, **Karaoke**) and **Give this line its own look** (its own text colour, background, size and bold); the shared style moved to an **All lines** tab. The preview draws the animations as they will render
|
|
70
|
+
- **Multi-select, copy and paste**: Ctrl+click or drag a box on the timeline to select several clips, subtitles and pictures; move them together, delete them, or copy (Ctrl+C) and paste them at the playhead (Ctrl+V), keeping their spacing. Ctrl+D duplicates, Ctrl+A selects everything
|
|
71
|
+
- **Guides**: a **Guides** button over the preview shows the centre lines and the 5 % safe area; dragged subtitles and pictures snap to them (Alt = free)
|
|
72
|
+
- **Export presets**: the Project panel picks what to make — **YouTube (1080p)**, **Shorts / Reels / TikTok** (vertical, with a reminder when the video is over 60 s), **Square (1:1)**, **Same as the clips**, **GIF** or **Audio only (MP3)** — with the matching resolution and file type
|
|
73
|
+
- The Clip panel is split into **Trim**, **Transition** and **Picture and sound** tabs, so it fits without scrolling
|
|
74
|
+
- The Studio toolbar buttons are shorter ("+ Media…", "♪ Music…") so the row fits in a small window
|
|
75
|
+
- **Subtitles fit vertical and square videos**: their size now follows the *shorter* side of the frame (it followed the height, so text in a 9:16 video came out about twice too big), and long lines are wrapped to the frame width, in the preview and in the render alike. Chinese lines have no spaces for the renderer to break at, so a long caption used to run off both sides of a vertical video. Landscape videos are unchanged
|
|
76
|
+
|
|
77
|
+
### Downloads and releases
|
|
78
|
+
|
|
79
|
+
- **Downloads retry over IPv4 when the network is unreachable**: on networks (and CI runners) with IPv6 but no route for it, YouTube downloads and link previews failed with "Network is unreachable"; they now retry the same way over IPv4
|
|
80
|
+
- **New demo video and user guide** (繁體中文) for 4.0: auto captions on the graphics card, speed, subtitle effects, guides, export presets and the Hardware settings; recorded on a real Intel Arc GPU
|
|
81
|
+
- **Releases run the tests first**: the release workflow runs the same lint and test suite as CI (Linux and Windows) before building, so a tag can't publish untested code. The checks live in one shared workflow (`checks.yml`) used by both
|
|
82
|
+
- Fixed the trim integration test, which asked for 50 s–110 s of an 8 s video (a four-part time) and so never trimmed; it was hidden because YouTube's bot-check made CI skip it
|
|
83
|
+
|
|
84
|
+
## 3.3.0
|
|
85
|
+
|
|
86
|
+
- **Images over the video**: "+ Image…" (or drop a picture on the window, or double-click the new **Images** row) shows a picture from the playhead for 4 s, placed by what it is: a cut-out with transparency (a logo, a sticker) small in the top-right corner, a photo as large as fits in the middle (several pictures follow one another). Drag its block in the Images row to change when it shows; in the preview drag the picture to move it, its corner to resize it and the knob above it to **rotate** it (snaps to 0 / 90 / 180 / 270°, Alt = free). The Image panel has start / end, size, opacity, fade in / out, rotation (± 90° buttons), a 3 × 3 position grid and "Fill the frame". Any number of pictures render in the same single ffmpeg pass, under the subtitles; undo and projects include them
|
|
87
|
+
- **The preview shows transitions**: crossfade, dissolve, wipe, slide, circle and zoom are now drawn live in the preview (paused or playing), not just labelled, and the sound crossfades as in the render. A second, hidden player decodes the other clip of a transition for the same preview window
|
|
88
|
+
- **Cut the background music**: the music block now has start / end handles to choose the part of the song that plays, and dragging the block makes the music come in later. When looping, that part repeats (dashed lines mark each pass) and the rest of the song shows faintly behind it. The music panel has exact **Song start**, **Song end** and **Comes in at** fields; undo and projects include them
|
|
89
|
+
- **Several background songs**: "+ Add song…" puts another song on the Music row (right after the previous one); each song has its own part, start time, volume and fade in / out, and overlapping two songs with fades crossfades them. Only the last song loops to the end of the video; the original-audio level and the end fade apply to all music. Projects from 3.2 (one song) still open
|
|
90
|
+
- **Hear the music in the preview**: the play button now plays the background music with the video, as it will be rendered: the chosen part of the song, from its start time, looping, at the music volume, with the original audio turned down and the end fade
|
|
91
|
+
- **Overlapping subtitles (and pictures) stack into lanes**: lines that overlap in time sit one under another in the Subtitles row (which grows to fit) instead of covering each other, so each can be seen, selected and dragged
|
|
92
|
+
- **One pinned ffmpeg everywhere: 9.0.2.** The Windows and Linux executables used to bundle different, unpinned builds (the newest development build on Windows, a 7.x static release on Linux), so behaviour could differ between platforms and change between builds without any code change. Both now ship the same ffmpeg 9.0.2, pinned in `ffmpeg/pin.json` with SHA-256 checks; every CI job tests that exact binary, and `make ffmpeg` gives developers the same one
|
|
93
|
+
- Removed the Studio's **Import .srt / Export .srt** buttons (YouTube subtitles downloaded with a video still come along with "Send to Studio")
|
|
94
|
+
- Headless runs (tests, scripts) never play sound: the download-finished chime is skipped and the preview starts muted
|
|
95
|
+
|
|
96
|
+
## 3.2.0
|
|
97
|
+
|
|
98
|
+
- **Undo / redo** in the Studio (Ctrl+Z / Ctrl+Y, plus toolbar buttons) for every edit: adding, trimming, splitting, reordering and deleting clips; subtitle text, timing, position and style; background music and its settings. Typing and slider drags count as one step
|
|
99
|
+
- **Projects**: save the Studio timeline as a `.vgproj` file and open it later (Project menu, Ctrl+S / Ctrl+O / Ctrl+N, Open recent). Media paths are stored both absolute and relative to the project file, so a moved folder still opens; missing files are reported and left out. VidGrab asks before discarding unsaved changes, including when you close the window. Dropping a `.vgproj` on the window opens it
|
|
100
|
+
- **Timeline zoom**: Ctrl+wheel (or − / + / Fit) zooms around the mouse; Shift+wheel or the scrollbar pans; the view follows the playhead during playback
|
|
101
|
+
- **Snapping**: trim handles and subtitle blocks snap to the playhead, clip boundaries and other subtitles, with a guide line; hold Alt to drag freely
|
|
102
|
+
- **Keyboard editing**: Space / K play-pause, J / L ±1 s, ← / → one frame, Home / End, I / O trim the clip under the playhead, S split it; a **?** button lists every shortcut
|
|
103
|
+
- **Split clips** at the playhead (✂ Split or S); both halves keep their source times
|
|
104
|
+
- **Transitions between clips**: select a clip to open its new **Clip** panel and pick how it comes in: Cut, Crossfade, Dip to black / white, Dissolve, Wipe, Slide, Circle or Zoom in, with a duration (0.2–3 s) and **Use for all cuts**. The clips overlap on the timeline (marked ✕), the sound crossfades too, and the render uses ffmpeg `xfade`. The preview switches at the middle of a transition, draws dips to black / white, and labels the others while they play
|
|
105
|
+
- **Framing (crop and reframe)**: per clip, **Whole picture** (black bars) or **Fill frame** (crop, no bars), a zoom of 100–300 %, and **drag the picture in the preview** to choose what stays in view. Made for vertical 9:16 and square videos from landscape clips; the preview matches the render
|
|
106
|
+
- **Mute or turn down a clip**: a speaker button on every clip row in the timeline mutes it in one click (red when muted; also `M`), and the Clip panel has Mute plus a 0–200 % volume slider. The preview plays at that level and the render applies it (also in music medleys); saved in projects and undoable
|
|
107
|
+
- **Filmstrip thumbnails**: every tile on a video's timeline block shows the frame at its own time, extracted on demand in the background (zooming in fetches finer frames). Before, one frame was repeated across the block, so a video that fades in from black showed an all-black track, and a short part of a long video showed the same image over and over
|
|
108
|
+
- **Easier trimming**:
|
|
109
|
+
- drag a start / end handle **past the edge** of the timeline and the clip keeps growing (faster the further out you hold it) while the view rescales, so a long clip can be lengthened in one drag instead of many small ones
|
|
110
|
+
- hold **Shift** while dragging for 1/10-speed fine adjustment
|
|
111
|
+
- the Clip panel has **exact Start / End** fields (hundredths) with **−1 s / −1 frame / +1 frame / +1 s** buttons (frame length from the video's own frame rate)
|
|
112
|
+
- **Zoom to clip** (button or Z) zooms the timeline onto the selected clip
|
|
113
|
+
- **Clearer subtitle panel**: Line and Style tabs instead of one long scrolling panel; text and background colours are one-click swatches (with a custom colour picker), and the default position is a Bottom / Top switch
|
|
114
|
+
- **The mouse wheel no longer changes dropdowns, number boxes or sliders** anywhere in the app; it scrolls the panel instead
|
|
115
|
+
- Trims can no longer go past the end of the source (a clip could end up 0 s long)
|
|
116
|
+
- **Preview play button sometimes did nothing**: after jumping into a different clip, the player could report the previous file as loaded, so the jump was lost and the new file played from 0:00 while the playhead and time stayed still. The preview now waits for the new file, re-applies a jump the player drops, and when you jump twice while a file is still loading the newest jump wins
|
|
117
|
+
- Demo video re-recorded and the user guide updated for the new Clip panel (trim, transitions, sound, framing), undo, projects and keyboard shortcuts
|
|
118
|
+
- The clip count / length label under the preview now subtracts transition overlaps, so it matches the preview's total
|
|
119
|
+
|
|
120
|
+
## 3.1.0
|
|
121
|
+
|
|
122
|
+
- **Settings page** in two columns with five sections:
|
|
123
|
+
- **Download defaults**: save folder, format, video / audio quality, subtitles (language, save or burn), a file-name pattern (title, title + video ID, channel – title, upload date + title), and a sound plus message when the download queue finishes
|
|
124
|
+
- **Studio**: render quality (Fast / Balanced / High quality), default output resolution, and saved subtitle style presets
|
|
125
|
+
- **Storage**: thumbnail cache size and clear, clear download history, export the log file, reset all settings
|
|
126
|
+
- **About**: VidGrab, yt-dlp, ffmpeg, Qt and Python versions
|
|
127
|
+
- **Subtitle style presets**: save the current font, size, colours, background, fade and position from the Studio's subtitle panel and apply them in one click
|
|
128
|
+
- The theme choice is now translated, and the About text describes the current features
|
|
129
|
+
- User guide: fixed list bullets that showed as boxes and added the Settings page; demo video re-recorded with presets and Settings; README rewritten
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
## 3.0.0
|
|
133
|
+
|
|
134
|
+
- **Studio (new)** — an editor-style workspace that replaces the Edit page. It fits the window with no scrolling:
|
|
135
|
+
- **Layout**: a large preview on top that plays the finished result (play / pause), an **Inspector** beside it (project, subtitle or music settings), and a **timeline** below in which **every clip has its own row**, plus Subtitles and Music rows. Thumbnails show for video and waveforms for audio
|
|
136
|
+
- **Trimming with two handles**: drag a clip's left handle to choose where it starts and its right handle to choose where it ends. The preview shows the frame under the handle, and the faint area shows the rest of the source. Drag a clip up or down to reorder it
|
|
137
|
+
- **Music medley**: join different songs, or sections of songs, into one MP3 / M4A / WAV with an optional crossfade
|
|
138
|
+
- **Video montage**: join different videos into one MP4. Clips of any size or orientation are fitted to one frame (match the first clip, 1080p / 720p / 480p, vertical 9:16 or square), and clips without sound get silence
|
|
139
|
+
- **Subtitles**: add a line at the playhead, then **drag it in the viewer to position it**. Drag or resize its block on the timeline to retime it. Import / export `.srt`, and set size and colour. Burned in as ASS so the render matches the preview; Chinese renders with the bundled Noto Sans CJK TC
|
|
140
|
+
- **Subtitle colours**: pick the text colour and a background box (none / transparent, black, dark gray, white, yellow, or any custom colour) with adjustable opacity. The preview shows exactly what gets rendered
|
|
141
|
+
- **Subtitle tools**: a 3×3 quick-position grid (alongside dragging), split a line at the playhead, duplicate a line, font choice (bundled CJK font or any installed font, which is handed to ffmpeg so the render matches), bold, and fade in / out
|
|
142
|
+
- **Background music**: mix a song under the montage with separate music / original-audio volume, looping and an end fade-out
|
|
143
|
+
- Drop files anywhere in the window to add them. Rendering shows real progress
|
|
144
|
+
- **Edit page removed**: trimming now lives in the Studio. Flip / speed remain on the Download page. The ffplay-based preview and the bundled `ffplay` binary are gone
|
|
145
|
+
- **Download queue + recent downloads (replaces the log)**: paste several links at once; each download gets a row with thumbnail, progress, speed and ETA, and **Cancel / Retry**. Finished downloads are remembered across restarts with **Send to Studio** (adds the file, and its subtitles, to the Studio timeline). Technical details now go to `vidgrab.log` in the config folder instead of the window
|
|
146
|
+
- **MP4 downloads prefer H.264**: at the chosen resolution VidGrab now picks H.264 over AV1. YouTube often serves AV1 in MP4, which many players (and the Studio preview) can't decode. 1440p / 4K, which exist only as VP9 / AV1, are still downloaded at full resolution
|
|
147
|
+
- **Connection status keeps updating**: the online check used to run once at startup, so starting offline left Download disabled until a restart. It now re-checks every 5 s while offline and every 30 s while online
|
|
148
|
+
- **Several links at once**: pasting a list of links (Ctrl+V or Paste) shows each one in the Video Info card with its thumbnail, title and length (or video count for playlists, with a per-playlist "Download whole playlist" box). Drop any link with ✕ before pressing Download
|
|
149
|
+
- **YouTube subtitles**: optionally download a video's captions (Traditional / Simplified Chinese, English, Japanese; uploaded or auto-generated) as `.srt`, or burn them into the video. Timings follow the trim / speed settings
|
|
150
|
+
- **Download page redesigned**: a link bar with Paste and a large Download button, the video card beside a compact options card, and progress + log below. Nothing scrolls
|
|
151
|
+
- **Navigation rail**: the 212 px sidebar became an 84 px icon rail
|
|
152
|
+
- **Chinese subtitle text**: a Paste button next to the subtitle text (WSL can't pass the Windows IME to Linux apps). ibus is enabled automatically when installed
|
|
153
|
+
- **Redesigned UI**: violet→cyan theme, page headers, rounded cards with accent bars, pill navigation, drawn chevrons and icons (no emoji-font dependency), all generated from one stylesheet template shared by dark and light
|
|
154
|
+
- **Languages**: the UI now ships in **English and 繁體中文** only (the other 10 languages, their flags and the JP/KR fonts were removed; a saved language that no longer exists falls back to English)
|
|
155
|
+
- **Release / CI**:
|
|
156
|
+
- release assets are now `VidGrab-windows-x64.exe`, `VidGrab-linux-x64` (+ `.tar.xz`), the demo video, the zh-TW user guide PDF and `SHA256SUMS.txt`, with notes taken from this changelog
|
|
157
|
+
- the release fails if the tag doesn't match `vidgrab/_version.py`
|
|
158
|
+
- the Linux binary is built on Ubuntu 22.04, so it runs on older distros
|
|
159
|
+
- CI also runs the tests on Windows
|
|
160
|
+
- each build renders Studio projects with the exact ffmpeg it bundles
|
|
161
|
+
|
|
162
|
+
## 2.3.2
|
|
163
|
+
|
|
164
|
+
- **Full-resolution downloads**: info card and downloads now probe with the `tv_embedded` player client, so video info shows up to 2160p instead of capping at 360p (and 1080p MP4 is a direct mp4 download)
|
|
165
|
+
- **Likes / dislikes / comments**: the info card now shows those counts (dislikes best-effort from the Return YouTube Dislike dataset, skipped gracefully when unavailable)
|
|
166
|
+
- **Reliable trims**: trimming now always downloads the full video and cuts locally with ffmpeg — YouTube's ranged (section) downloads either got HTTP 403 or silently returned the full file, which saved untrimmed videos
|
|
167
|
+
- **Download fallback**: if the high-quality client's media URLs are rejected (403), the download retries with the low-res-but-reliable fallback client instead of failing
|
|
168
|
+
- **Packaged Linux fix**: the Linux binary had `multimedia=0` on clean runners because QtMultimedia links PulseAudio/ALSA/xcb — release and CI builds now install those libraries, and a new CI `integration` job exercises real YouTube downloads on every push
|
|
169
|
+
- **Bigger window** and a redesigned **LOG section** — a proper card, side-by-side Clear button, aligned with the other sections
|
|
170
|
+
- **Interactive finish**: the progress bar animates to a green 100% when a download or processing job completes (upload button shows the saved path)
|
|
171
|
+
- **Flag icons bundled**: all 12 language flags ship as bundled PNGs (no color-emoji font needed)
|
|
172
|
+
|
|
173
|
+
## 2.3.1
|
|
174
|
+
|
|
175
|
+
- **Fix — inline preview missing from packaged builds**: the Edit-page preview player is back in `VidGrab.exe` / `VidGrab-linux` — the PyInstaller spec excluded `PySide6.QtMultimedia`, so the release binary only offered the ffplay pop-out preview (source builds were unaffected). QtMultimedia is now bundled again, and a hidden `--selftest` flag lets CI verify `multimedia` availability in the packaged binary
|
|
176
|
+
|
|
177
|
+
## 2.3.0
|
|
178
|
+
|
|
179
|
+
- **Playlist & channel downloads**: paste any playlist/channel URL and download every video in the selected quality (MP4/MP3) with `01 - …` numbering and per-video progress
|
|
180
|
+
- **Video info card**: a preview card on the download page shows the title, uploader, duration and available resolutions (or video count for playlists) before you download
|
|
181
|
+
- **Auto-detect on paste**: pasting a YouTube link instantly probes the video and fills the info card (debounced ~700 ms while typing)
|
|
182
|
+
- **In-window media preview**: the Edit page now includes a preview card — an inline video/sound player with a seek timeline showing the current second, so you can read off the exact trim start/end times; dragging the scrubber jumps straight to that frame
|
|
183
|
+
- **Localization × 12**: the picker now includes Español, Français, Deutsch, Português, Italiano, Русский, Tiếng Việt and Indonesia (each shown with its flag), on top of English, 繁體中文, 日本語 and 한국어
|
|
184
|
+
|
|
185
|
+
## 2.2.0
|
|
186
|
+
|
|
187
|
+
- **New brand icon**: futuristic cyber-chip design — chamfered tile, electric blue→cyan→violet→magenta gradient, neon outline + glow, play triangle with download chevron, and the "VidGrab" wordmark (shown in README) — committed as assets (no runtime generation)
|
|
188
|
+
- **日本語 (Japanese) and 한국어 (Korean)**: full UI localization bringing the total to 4 languages; Noto Sans CJK JP/KR fonts bundled so both render on every OS
|
|
189
|
+
- **Repo polish**: dedicated long-running session notes moved to `docs/`, build scripts consolidated under `scripts/`, `version_info.txt` now derived from `vidgrab/_version.py`, single `requirements.txt`, dropped the redundant zip artifact
|
|
190
|
+
- **Makefile**: `setup`/`run`/`lint`/`test`/`build`/`clean`/`icon` targets replace `run.sh`
|
|
191
|
+
|
|
192
|
+
## 2.1.0
|
|
193
|
+
|
|
194
|
+
- **Qt rewrite**: entire GUI rebuilt on PySide6 (Qt 6) replacing CustomTkinter — sidebar + content-panel layout, QSS-styled dark/light themes, proper QStatusBar, professional typography hierarchy
|
|
195
|
+
- **Sidebar navigation**: Download / Edit / Settings pages switch via a left-hand sidebar with icon+label buttons and active accent border
|
|
196
|
+
- **QStatusBar**: connection status, ffmpeg source, and version displayed persistently at the bottom
|
|
197
|
+
- **QSS theming**: hand-crafted dark (deep navy) and light themes with consistent card styling, accent borders, and scrollbar theming
|
|
198
|
+
- **Settings page**: in-app theme combo, about info, version display
|
|
199
|
+
- **Keyboard shortcuts**: Ctrl+V (paste URL), Ctrl+L (clear log), F1 (about)
|
|
200
|
+
- **PyInstaller improvements**: unused Qt modules excluded to reduce bundle size; customtkinter/darkdetect removed
|
|
201
|
+
|
|
202
|
+
## 2.0.0
|
|
203
|
+
|
|
204
|
+
- **Modern GUI**: rebuilt on CustomTkinter — rounded cards, segmented controls, built-in dark/light theme toggle, tooltip hints, styled modal dialogs, high-DPI support
|
|
205
|
+
- **Internet-aware**: a live ● Online / ○ Offline pill shows connectivity in real time; the download button is disabled and a clean Retry/Exit dialog appears when the machine is offline
|
|
206
|
+
- **Single-pass MP4 + MP3**: selecting both formats now downloads the video once, then derives the MP3 locally — saves ~50 % bandwidth when both are requested
|
|
207
|
+
- **Faster re-encode**: flip-only uses ultrafast x264 (CRF 23) and copies audio streams unchanged
|
|
208
|
+
- **Trim-during-download**: when trimming a YouTube URL, only the wanted section is downloaded when possible; falls back to a full download automatically
|
|
209
|
+
- **Linux binary**: a self-contained x86_64 ELF is now published alongside the Windows exe — same zero-install story for Linux desktops
|
|
210
|
+
- **Project restructured**: code lives in a proper `vidgrab/` Python package (`__version__`, `__main__`)
|
|
211
|
+
- **23 tests** covering output locating, MP3 derivation, local processing, network probe (all mocked), and a GUI smoke test under Xvfb
|
|
212
|
+
- **CI/CD**: GitHub Actions runs lint (ruff), the full test suite including the headless GUI smoke test, builds both Windows and Linux single-file binaries, and publishes all artifacts on tag push
|
|
213
|
+
- CustomTkinter data files bundled correctly by PyInstaller; platform-aware ffmpeg folder layout (`ffmpeg/win/`, `ffmpeg/linux/`)
|
|
214
|
+
|
|
215
|
+
## 1.0.0
|
|
216
|
+
|
|
217
|
+
- Initial release — single-file Windows exe with embedded ffmpeg
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Coherent17
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: vidgrab-studio
|
|
3
|
+
Version: 4.1.0
|
|
4
|
+
Summary: Download videos from YouTube and many other sites, then edit them in a Studio with subtitles, music and AI captions — all on your own computer.
|
|
5
|
+
Project-URL: Homepage, https://github.com/coherent17/VidGrab
|
|
6
|
+
Project-URL: Source, https://github.com/coherent17/VidGrab
|
|
7
|
+
Project-URL: Changelog, https://github.com/coherent17/VidGrab/blob/main/CHANGELOG.md
|
|
8
|
+
Project-URL: Issues, https://github.com/coherent17/VidGrab/issues
|
|
9
|
+
Author: coherent17
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: downloader,editor,ffmpeg,pyside6,subtitles,video,whisper,youtube,yt-dlp
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
15
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
16
|
+
Classifier: Operating System :: MacOS
|
|
17
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
18
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Topic :: Multimedia :: Video
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Requires-Dist: pyside6>=6.5.0
|
|
23
|
+
Requires-Dist: yt-dlp>=2024.1.0
|
|
24
|
+
Provides-Extra: captions
|
|
25
|
+
Requires-Dist: faster-whisper>=1.1.0; extra == 'captions'
|
|
26
|
+
Requires-Dist: openvino-genai>=2026.1; (sys_platform != 'darwin') and extra == 'captions'
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: pyinstaller>=6.0.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: ruff>=0.9.0; extra == 'dev'
|
|
31
|
+
Description-Content-Type: text/markdown
|
|
32
|
+
|
|
33
|
+
<div align="center">
|
|
34
|
+
|
|
35
|
+
<img src="https://raw.githubusercontent.com/coherent17/VidGrab/main/docs/icon.png" alt="VidGrab" width="112">
|
|
36
|
+
|
|
37
|
+
# VidGrab
|
|
38
|
+
|
|
39
|
+
**Download videos. Edit them. Caption them with AI. All on your own computer.**
|
|
40
|
+
|
|
41
|
+
Turn a link into a finished video: grab it, cut it, add subtitles (typed, or **written for you from the speech**),
|
|
42
|
+
music and pictures, then export it for YouTube, Shorts, Reels or TikTok. Nothing is uploaded.
|
|
43
|
+
|
|
44
|
+
[](https://github.com/coherent17/VidGrab/actions/workflows/ci.yml)
|
|
45
|
+
[](https://github.com/coherent17/VidGrab/releases/latest)
|
|
46
|
+

|
|
47
|
+
[](LICENSE)
|
|
48
|
+
|
|
49
|
+
[**Download**](https://github.com/coherent17/VidGrab/releases/latest) ·
|
|
50
|
+
[Demo video](https://raw.githubusercontent.com/coherent17/VidGrab/main/docs/VidGrab-demo.mp4) ·
|
|
51
|
+
[User guide (繁體中文)](https://raw.githubusercontent.com/coherent17/VidGrab/main/docs/VidGrab-user-guide-zh-TW.pdf) ·
|
|
52
|
+
[Changelog](CHANGELOG.md)
|
|
53
|
+
|
|
54
|
+
<img src="https://raw.githubusercontent.com/coherent17/VidGrab/main/docs/screenshots/studio.png" alt="VidGrab Studio: preview, inspector and a multi-track timeline" width="900">
|
|
55
|
+
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## What you can do
|
|
61
|
+
|
|
62
|
+
- **Make a Shorts / Reels / TikTok clip** from a long video: trim the best part, pick the vertical format, click **Auto captions**, render.
|
|
63
|
+
- **Subtitle any talk or interview** in about 100 spoken languages, fix a word or two, then burn the subtitles in or keep them as text.
|
|
64
|
+
- **Put two videos side by side** (or stacked, or picture-in-picture) in one frame.
|
|
65
|
+
- **Join clips into a montage or music video** with transitions, per-clip speed, background music and logos.
|
|
66
|
+
- **Download** videos, playlists and music from YouTube and many other sites, as MP4 or MP3 / M4A / Opus / FLAC / WAV.
|
|
67
|
+
|
|
68
|
+
English and 繁體中文, dark and light themes.
|
|
69
|
+
|
|
70
|
+
## Install
|
|
71
|
+
|
|
72
|
+
| Platform | Get it | Run it |
|
|
73
|
+
|----------|--------|--------|
|
|
74
|
+
| Windows 10 / 11 | `VidGrab-windows-x64.exe` | Double-click |
|
|
75
|
+
| macOS 12+ (Apple silicon or Intel) | `VidGrab-macos-arm64.zip` / `VidGrab-macos-x64.zip` | Unzip, then right-click `VidGrab.app` → **Open** the first time |
|
|
76
|
+
| Linux (x64) | `VidGrab-linux-x64` | `chmod +x VidGrab-linux-x64 && ./VidGrab-linux-x64` |
|
|
77
|
+
|
|
78
|
+
Download from the [latest release](https://github.com/coherent17/VidGrab/releases/latest). On a Mac the app is not signed, so macOS asks you to confirm the first launch, and VidGrab offers to download ffmpeg once.
|
|
79
|
+
|
|
80
|
+
**Or with pip** (Python 3.10+, any system):
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
pipx install vidgrab-studio # for auto captions use "vidgrab-studio[captions]"
|
|
84
|
+
vidgrab # start it; "vidgrab --info" shows what is installed
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
To start it from your own script:
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
from vidgrab.app import main
|
|
91
|
+
|
|
92
|
+
main()
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Quick start
|
|
96
|
+
|
|
97
|
+
1. **Download:** copy a video link, click **Paste**, then **Download**. You can also type words to search YouTube.
|
|
98
|
+
2. **Send to Studio:** click **Send to Studio** next to the finished download.
|
|
99
|
+
3. **Edit:** drag a clip's edges to trim it, add **+ Subtitle** lines or click **Auto captions…**, add **♪ Music**.
|
|
100
|
+
4. **Render:** choose an export preset and click **Render**.
|
|
101
|
+
|
|
102
|
+
The [user guide](https://raw.githubusercontent.com/coherent17/VidGrab/main/docs/VidGrab-user-guide-zh-TW.pdf) (繁體中文) shows every page, and the [demo video](https://raw.githubusercontent.com/coherent17/VidGrab/main/docs/VidGrab-demo.mp4) walks through the whole flow.
|
|
103
|
+
|
|
104
|
+
## Good to know
|
|
105
|
+
|
|
106
|
+
- **Auto captions** run on your computer with Whisper: no account, no upload. The speech model (85 MB to 1.6 GB) is downloaded once, the first time you use it. It uses an Intel or NVIDIA graphics card when there is one ([speed numbers](https://raw.githubusercontent.com/coherent17/VidGrab/main/docs/performance.md)).
|
|
107
|
+
- **Rendering** can use your graphics card (Intel, NVIDIA, AMD, Apple) and falls back to the CPU on its own. See **Settings → Hardware**.
|
|
108
|
+
- **Settings** has three tabs: General, Downloads (defaults, speed limit, proxy, updating the download engine) and Studio.
|
|
109
|
+
- **Privacy:** VidGrab only connects to download what you ask for (the video site, and the speech model the first time you use captions). Your projects and captions never leave your computer.
|
|
110
|
+
|
|
111
|
+
## Troubleshooting
|
|
112
|
+
|
|
113
|
+
| Problem | Fix |
|
|
114
|
+
|---------|-----|
|
|
115
|
+
| "Video unavailable" or a download error | Sites change often. Update the download engine in **Settings → Downloads**, or update VidGrab (pip: `pip install -U yt-dlp`) |
|
|
116
|
+
| Downloaded at only 360p | The site refused the high-quality stream. Try again later |
|
|
117
|
+
| Auto captions are slow | Pick **Fast** or **Balanced**, and keep **Settings → Hardware → auto captions on the graphics card** on |
|
|
118
|
+
| Can't type Chinese on Linux / WSL | Paste the text instead, or install ibus: `sudo apt install ibus ibus-chewing` |
|
|
119
|
+
| Antivirus warning | Common with this kind of app: add an exception |
|
|
120
|
+
| Won't start on Linux | Needs a desktop session and Qt's libraries: `sudo apt install libegl1 libxkbcommon0 libxcb-cursor0` |
|
|
121
|
+
|
|
122
|
+
Something else? [Open an issue](https://github.com/coherent17/VidGrab/issues).
|
|
123
|
+
|
|
124
|
+
## For developers
|
|
125
|
+
|
|
126
|
+
Building from source, tests and releases: [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
127
|
+
|
|
128
|
+
## License
|
|
129
|
+
|
|
130
|
+
[MIT](LICENSE). Built with [yt-dlp](https://github.com/yt-dlp/yt-dlp), [FFmpeg](https://ffmpeg.org), [PySide6 (Qt)](https://doc.qt.io/qtforpython/), [Whisper](https://github.com/openai/whisper) and [Noto Sans CJK](https://github.com/notofonts/noto-cjk). Only download content you have the right to use.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="docs/icon.png" alt="VidGrab" width="112">
|
|
4
|
+
|
|
5
|
+
# VidGrab
|
|
6
|
+
|
|
7
|
+
**Download videos. Edit them. Caption them with AI. All on your own computer.**
|
|
8
|
+
|
|
9
|
+
Turn a link into a finished video: grab it, cut it, add subtitles (typed, or **written for you from the speech**),
|
|
10
|
+
music and pictures, then export it for YouTube, Shorts, Reels or TikTok. Nothing is uploaded.
|
|
11
|
+
|
|
12
|
+
[](https://github.com/coherent17/VidGrab/actions/workflows/ci.yml)
|
|
13
|
+
[](https://github.com/coherent17/VidGrab/releases/latest)
|
|
14
|
+

|
|
15
|
+
[](LICENSE)
|
|
16
|
+
|
|
17
|
+
[**Download**](https://github.com/coherent17/VidGrab/releases/latest) ·
|
|
18
|
+
[Demo video](docs/VidGrab-demo.mp4) ·
|
|
19
|
+
[User guide (繁體中文)](docs/VidGrab-user-guide-zh-TW.pdf) ·
|
|
20
|
+
[Changelog](CHANGELOG.md)
|
|
21
|
+
|
|
22
|
+
<img src="docs/screenshots/studio.png" alt="VidGrab Studio: preview, inspector and a multi-track timeline" width="900">
|
|
23
|
+
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## What you can do
|
|
29
|
+
|
|
30
|
+
- **Make a Shorts / Reels / TikTok clip** from a long video: trim the best part, pick the vertical format, click **Auto captions**, render.
|
|
31
|
+
- **Subtitle any talk or interview** in about 100 spoken languages, fix a word or two, then burn the subtitles in or keep them as text.
|
|
32
|
+
- **Put two videos side by side** (or stacked, or picture-in-picture) in one frame.
|
|
33
|
+
- **Join clips into a montage or music video** with transitions, per-clip speed, background music and logos.
|
|
34
|
+
- **Download** videos, playlists and music from YouTube and many other sites, as MP4 or MP3 / M4A / Opus / FLAC / WAV.
|
|
35
|
+
|
|
36
|
+
English and 繁體中文, dark and light themes.
|
|
37
|
+
|
|
38
|
+
## Install
|
|
39
|
+
|
|
40
|
+
| Platform | Get it | Run it |
|
|
41
|
+
|----------|--------|--------|
|
|
42
|
+
| Windows 10 / 11 | `VidGrab-windows-x64.exe` | Double-click |
|
|
43
|
+
| macOS 12+ (Apple silicon or Intel) | `VidGrab-macos-arm64.zip` / `VidGrab-macos-x64.zip` | Unzip, then right-click `VidGrab.app` → **Open** the first time |
|
|
44
|
+
| Linux (x64) | `VidGrab-linux-x64` | `chmod +x VidGrab-linux-x64 && ./VidGrab-linux-x64` |
|
|
45
|
+
|
|
46
|
+
Download from the [latest release](https://github.com/coherent17/VidGrab/releases/latest). On a Mac the app is not signed, so macOS asks you to confirm the first launch, and VidGrab offers to download ffmpeg once.
|
|
47
|
+
|
|
48
|
+
**Or with pip** (Python 3.10+, any system):
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pipx install vidgrab-studio # for auto captions use "vidgrab-studio[captions]"
|
|
52
|
+
vidgrab # start it; "vidgrab --info" shows what is installed
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
To start it from your own script:
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
from vidgrab.app import main
|
|
59
|
+
|
|
60
|
+
main()
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Quick start
|
|
64
|
+
|
|
65
|
+
1. **Download:** copy a video link, click **Paste**, then **Download**. You can also type words to search YouTube.
|
|
66
|
+
2. **Send to Studio:** click **Send to Studio** next to the finished download.
|
|
67
|
+
3. **Edit:** drag a clip's edges to trim it, add **+ Subtitle** lines or click **Auto captions…**, add **♪ Music**.
|
|
68
|
+
4. **Render:** choose an export preset and click **Render**.
|
|
69
|
+
|
|
70
|
+
The [user guide](docs/VidGrab-user-guide-zh-TW.pdf) (繁體中文) shows every page, and the [demo video](docs/VidGrab-demo.mp4) walks through the whole flow.
|
|
71
|
+
|
|
72
|
+
## Good to know
|
|
73
|
+
|
|
74
|
+
- **Auto captions** run on your computer with Whisper: no account, no upload. The speech model (85 MB to 1.6 GB) is downloaded once, the first time you use it. It uses an Intel or NVIDIA graphics card when there is one ([speed numbers](docs/performance.md)).
|
|
75
|
+
- **Rendering** can use your graphics card (Intel, NVIDIA, AMD, Apple) and falls back to the CPU on its own. See **Settings → Hardware**.
|
|
76
|
+
- **Settings** has three tabs: General, Downloads (defaults, speed limit, proxy, updating the download engine) and Studio.
|
|
77
|
+
- **Privacy:** VidGrab only connects to download what you ask for (the video site, and the speech model the first time you use captions). Your projects and captions never leave your computer.
|
|
78
|
+
|
|
79
|
+
## Troubleshooting
|
|
80
|
+
|
|
81
|
+
| Problem | Fix |
|
|
82
|
+
|---------|-----|
|
|
83
|
+
| "Video unavailable" or a download error | Sites change often. Update the download engine in **Settings → Downloads**, or update VidGrab (pip: `pip install -U yt-dlp`) |
|
|
84
|
+
| Downloaded at only 360p | The site refused the high-quality stream. Try again later |
|
|
85
|
+
| Auto captions are slow | Pick **Fast** or **Balanced**, and keep **Settings → Hardware → auto captions on the graphics card** on |
|
|
86
|
+
| Can't type Chinese on Linux / WSL | Paste the text instead, or install ibus: `sudo apt install ibus ibus-chewing` |
|
|
87
|
+
| Antivirus warning | Common with this kind of app: add an exception |
|
|
88
|
+
| Won't start on Linux | Needs a desktop session and Qt's libraries: `sudo apt install libegl1 libxkbcommon0 libxcb-cursor0` |
|
|
89
|
+
|
|
90
|
+
Something else? [Open an issue](https://github.com/coherent17/VidGrab/issues).
|
|
91
|
+
|
|
92
|
+
## For developers
|
|
93
|
+
|
|
94
|
+
Building from source, tests and releases: [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
95
|
+
|
|
96
|
+
## License
|
|
97
|
+
|
|
98
|
+
[MIT](LICENSE). Built with [yt-dlp](https://github.com/yt-dlp/yt-dlp), [FFmpeg](https://ffmpeg.org), [PySide6 (Qt)](https://doc.qt.io/qtforpython/), [Whisper](https://github.com/openai/whisper) and [Noto Sans CJK](https://github.com/notofonts/noto-cjk). Only download content you have the right to use.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"comment": "The one ffmpeg every build, CI job and `make ffmpeg` uses. BtbN keeps each month's last autobuild long-term, so pin to one of those. To upgrade: pick a newer month-end autobuild-YYYY-MM-DD-* release at https://github.com/BtbN/FFmpeg-Builds/releases, copy the *-linux64-gpl-X.Y.tar.xz / *-win64-gpl-X.Y.zip names and their sha256 digests here, and let CI render-test it. The macOS entries are eugeneware/ffmpeg-static b6.1.1 (static, GPL, libass + x264; built with --enable-nonfree, so VidGrab never bundles it: the app downloads it on first use, checking these SHA-256s).",
|
|
3
|
+
"version": "9.0.2 (n9.0.2-17-g2a571b6068)",
|
|
4
|
+
"release": "autobuild-2026-09-30-13-08",
|
|
5
|
+
"files": {
|
|
6
|
+
"linux": {
|
|
7
|
+
"name": "ffmpeg-n9.0.2-17-g2a571b6068-linux64-gpl-9.0.tar.xz",
|
|
8
|
+
"sha256": "68ee646831adaae2495618346f3bba94ff207ff83bbd34d643e7004730d66269"
|
|
9
|
+
},
|
|
10
|
+
"win": {
|
|
11
|
+
"name": "ffmpeg-n9.0.2-17-g2a571b6068-win64-gpl-9.0.zip",
|
|
12
|
+
"sha256": "a0e45723c72141975f51d8666302e614711745f3102b704ca3f82c897a58d278"
|
|
13
|
+
},
|
|
14
|
+
"mac-arm64": {
|
|
15
|
+
"url_base": "https://github.com/eugeneware/ffmpeg-static/releases/download/b6.1.1/",
|
|
16
|
+
"version": "6.1.1",
|
|
17
|
+
"ffmpeg": {
|
|
18
|
+
"name": "ffmpeg-darwin-arm64.gz",
|
|
19
|
+
"sha256": "8923876afa8db5585022d7860ec7e589af192f441c56793971276d450ed3bbfa"
|
|
20
|
+
},
|
|
21
|
+
"ffprobe": {
|
|
22
|
+
"name": "ffprobe-darwin-arm64.gz",
|
|
23
|
+
"sha256": "d986a8ec7b030899fe66a8a288ed809a3543338705a3ce178cfb85869c5d80be"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"mac-x64": {
|
|
27
|
+
"url_base": "https://github.com/eugeneware/ffmpeg-static/releases/download/b6.1.1/",
|
|
28
|
+
"version": "6.1.1",
|
|
29
|
+
"ffmpeg": {
|
|
30
|
+
"name": "ffmpeg-darwin-x64.gz",
|
|
31
|
+
"sha256": "929b375c1182d956c51f7ac25e0b2b0411fb01f6f407aa15c9758efeb4242106"
|
|
32
|
+
},
|
|
33
|
+
"ffprobe": {
|
|
34
|
+
"name": "ffprobe-darwin-x64.gz",
|
|
35
|
+
"sha256": "d4da574d6e2e197bd259b47d69cf262df9e312af24ad960444f6d806d3d4c186"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|