9.6 KiB
GUI Video Clipper — v0.1.0 Release Polish Design Spec
Overview
Prepare the GUI Video Clipper project for its initial v0.1.0 tagged release. This covers versioning infrastructure, metadata cleanup, branding, an About dialog, licensing, a proper README, and pushing to the remote repository.
Official title: GUI Video Clipper
Short title: gui-vc
Author: cottongin
Remote: git@code.cottongin.xyz:cottongin/gui-video-clipper.git
License: MIT (2026)
App identifier: xyz.cottongin.gui-video-clipper
1. Versioning Infrastructure
VERSION File
A plain-text VERSION file at the project root. Contains the semantic version with no prefix or trailing whitespace:
0.1.0
Bump Script
scripts/bump-version.sh — a shell script that synchronizes the version across all manifest files.
Behavior:
- If given an argument (
./scripts/bump-version.sh 0.2.0), write that version toVERSION. Otherwise, read the currentVERSION. - Sanitize the value: strip leading
vorV, trim all trailing whitespace/newlines. - Validate the result matches semver (
X.Y.Z). Exit with an error if not. - Patch
package.jsonvianpm pkg set version=$VERSION. - Patch
src-tauri/Cargo.toml: update theversion = "..."line under[package]. - Patch
src-tauri/tauri.conf.json: update the"version": "..."field. - Run
cd src-tauri && cargo generate-lockfileto syncCargo.lock. - Print a summary of all updated files and the new version.
Frontend Version Access
The frontend reads the version at runtime via getVersion() from @tauri-apps/api/app. This reads from the built tauri.conf.json — no custom Tauri command needed.
2. Metadata Cleanup
Replace all placeholder/template values:
| File | Field | Current | New |
|---|---|---|---|
src-tauri/tauri.conf.json |
productName |
"Video Clipper" |
"GUI Video Clipper" |
src-tauri/tauri.conf.json |
identifier |
"xyz.cottongin.gui-video-clipper" |
"xyz.cottongin.gui-video-clipper" |
src-tauri/tauri.conf.json |
windows[0].title |
"Video Clipper" |
"GUI Video Clipper" |
src-tauri/Cargo.toml |
name |
"tauri-app" |
"gui-video-clipper" |
src-tauri/Cargo.toml |
description |
"A Tauri App" |
"A macOS GUI app for clipping online videos" |
src-tauri/Cargo.toml |
authors |
["you"] |
["cottongin"] |
src-tauri/Cargo.toml |
lib.name |
"tauri_app_lib" |
"gui_video_clipper_lib" |
src-tauri/src/main.rs |
run() call |
tauri_app_lib::run() |
gui_video_clipper_lib::run() |
index.html |
<title> |
"Video Clipper" |
"GUI Video Clipper" |
src/lib/components/SetupWizard.svelte |
body text | "Video Clipper requires…" |
"GUI Video Clipper requires…" |
The Cargo.lock entry for tauri-app will auto-update when cargo generate-lockfile runs after the crate rename.
Path Scrubbing
Three files under docs/superpowers/plans/ contain absolute paths with a username that should not appear in the public repo. Replace all occurrences of the absolute project path with relative equivalents (e.g., cd /Users/.../gui-video-clipper && becomes just the command itself, or a relative path).
Affected files:
docs/superpowers/plans/2026-09-21-video-clipper.mddocs/superpowers/plans/2026-09-22-paged-teleprompter-subtitles.mddocs/superpowers/plans/2026-09-22-extended-caption-styling.md
3. About Dialog
Component: AboutDialog.svelte
A modal overlay following the existing pattern used by PreferencesPanel and ExportDialog.
Contents (top to bottom):
- App icon (the scissors/film strip SVG, rendered as an
<img>or inline SVG, ~64px) - "GUI Video Clipper" as the title
- Version string (e.g., "v0.1.0") read via
getVersion()from@tauri-apps/api/app - "by cottongin"
- "MIT License"
- Link to repo:
https://code.cottongin.xyz/cottongin/gui-video-clipper - "Close" button
Styling: Matches the existing dark theme (Catppuccin Mocha palette). Centered modal, rounded corners, consistent with PreferencesPanel.
Triggers
Three ways to open the About dialog:
- Toolbar button: An
(i)/ info button in the header toolbar, next to the existing⚙preferences button. - Keyboard shortcut:
⌘/— added to the globalhandleGlobalKeydowninApp.svelte. - Status bar version: A clickable
v0.1.0label inStatusBar.svelte.
All three toggle the same showAboutDialog state in App.svelte.
4. Window Title
The window title is set statically in tauri.conf.json as "GUI Video Clipper". No runtime version suffix — the version is available in the About dialog.
5. LICENSE & README
LICENSE
A standard MIT license file at project root (LICENSE).
MIT License
Copyright (c) 2026 cottongin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
README.md
Full rewrite replacing the stock Tauri template. Sections:
- Title & Description — "GUI Video Clipper" with a one-line description: a macOS desktop app for clipping segments from online videos.
- Features — URL input (YouTube, etc.), video preview with scrubbing, mark in/out points, timeline with waveform and thumbnails, clip export (lossless and precise modes), caption/subtitle support with burn-in, automatic dependency setup wizard.
- Prerequisites — macOS, Node.js, Rust toolchain. ffmpeg and yt-dlp are installed automatically by the setup wizard.
- Build & Run —
npm install,npm run tauri dev(development),npm run tauri build(production). - Architecture — Tauri v2 backend (Rust) + Svelte 5 frontend (TypeScript). Brief description of the major components: video resolver, media server, waveform generator, thumbnail extractor, export pipeline.
- Contributing — Fork, branch, PR workflow. Run
npm run checkbefore submitting. - License — MIT, with a link to the LICENSE file.
No screenshots.
6. Icons
The custom icon set (scissors cutting a film strip, dark background) is already in place at src-tauri/icons/ with all required sizes:
icon.svg(source) + color variants invariants/icon.png(512x512),32x32.png,128x128.png,128x128@2x.pngicon.icns(macOS),icon.ico(Windows)- Windows Store logos (
Square*.png,StoreLogo.png) - iOS and Android directories
The tauri.conf.json bundle icon paths already reference the correct files. No changes needed.
7. Git History Scrub
The committed history contains REDACTED_USERNAME in blob content (not in author/committer fields — those are already cottongin). Specifically:
src-tauri/tauri.conf.json: the old"xyz.cottongin.gui-video-clipper"identifierdocs/superpowers/plans/*.md: absolute paths like ``
Approach: git-filter-repo --replace-text
After all code/config changes are committed, use git-filter-repo to rewrite history:
-
Create a replacements file (e.g.,
replacements.txt) with literal string replacements:xyz.cottongin.gui-video-clipper==>xyz.cottongin.gui-video-clipper ==> ==>Each line is
OLD==>NEW. The path replacements remove the absolute prefix, leaving just the command (or a relative path). Order matters — longer matches first. -
Run:
git filter-repo --replace-text replacements.txt --force -
Verify:
git log --all -p | grep -i REDACTED_USERNAMEshould return nothing. -
Clean up: remove
replacements.txt(it's a one-time tool, not committed).
Important: git-filter-repo rewrites all commit hashes. Since this repo has never been pushed to a remote, that's fine — there's no shared history to disrupt. The remote must be re-added after filter-repo runs (it strips remotes by default).
8. Commit, Remote & Tag
Commit Strategy
- Make all code/config changes (sections 1-5 above).
- Stage and commit everything — including all currently untracked files (
chat-summaries/,docs/superpowers/, new source files undersrc-tauri/src/services/,src/lib/components/ProcessingModal.svelte,src/lib/utils/vttParser.ts). - Use a descriptive commit message:
chore: v0.1.0 release polish — versioning, branding, about dialog, license, readme.
History Scrub
- Run the
git-filter-repo --replace-textpass (Section 7). - Verify no
REDACTED_USERNAMEremains in any blob.
Remote & Tag
- Re-add the remote (filter-repo removes it):
git remote add origin git@code.cottongin.xyz:cottongin/gui-video-clipper.git - Tag:
git tag -a v0.1.0 -m "Initial release" - Push:
git push -u origin main && git push origin v0.1.0
Non-Goals
- No CI/CD pipeline setup (future work).
- No
.dmg/ installer packaging (future work). - No changelog generation (future work).
- No automated version bumping via git hooks.