Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
b9fb8ff
Add dubbing workflow and TTS settings
WEIFENG2333 Jun 5, 2026
ea7e28f
Refine dubbing UI and diagnostics
WEIFENG2333 Jun 5, 2026
9f72f38
Polish dubbing layout after UI review
WEIFENG2333 Jun 5, 2026
b164250
Polish dubbing and diagnostics UI
WEIFENG2333 Jun 5, 2026
91b683d
Use Fluent widgets in dubbing UI
WEIFENG2333 Jun 5, 2026
b0edaf7
Address UI review feedback
WEIFENG2333 Jun 5, 2026
5bed00e
Fix dubbing UI usability issues
WEIFENG2333 Jun 5, 2026
9894118
Clean up dubbing UI implementation
WEIFENG2333 Jun 5, 2026
3f294e9
Polish home and dubbing visual density
WEIFENG2333 Jun 5, 2026
5dcf6a9
Tone down selected card colors
WEIFENG2333 Jun 6, 2026
eab1ca1
Improve dubbing UI and bundled voice previews
WEIFENG2333 Jun 6, 2026
55532cf
chore: checkpoint shared config and ui refresh
Jun 8, 2026
cac5147
chore: remove legacy vlc path and plan qt migration
Jun 8, 2026
a566009
feat: unified output naming, core download engine, and release packaging
Jun 12, 2026
7b9092e
fix: guard AssPreviewThread.run against renderer exceptions
Jun 12, 2026
bd12b27
Refine subtitle style management
WEIFENG2333 Jun 14, 2026
086c742
Redesign subtitle style page and add subtitle layout params
Jun 15, 2026
892474b
Fix LLM translate prompts injecting enum repr instead of language name
Jun 15, 2026
9e79a1f
Address PR #1150 review: StrEnum 3.10 crash + dubbing timing "none"
Jun 15, 2026
c31bf11
UI polish, settings dialog perf, and pre-commit review hardening
Jun 16, 2026
56398ae
Subtitle style: per-interface languages, independent bold, faster pre…
Jun 16, 2026
5292714
Add live caption feature + reconnect/debug/comment hardening
Jun 20, 2026
bb88029
Reorganize work_dir by function; extract WS backend base; review fixes
Jun 20, 2026
f620e45
Add hard-subtitle (OCR) extraction: CLI + GUI page + RapidOCR engine
Jun 21, 2026
1a72249
feat(i18n): key-based gettext UI internationalization (zh / en / zh_H…
Jun 21, 2026
b3ef1f6
fix(packaging): bundle OCR / realtime deps into desktop build; verified
Jun 21, 2026
46cdcb2
feat(update): in-app auto-update (manifest + verified download + rest…
Jun 21, 2026
272cc0a
feat(update): real-time announcements in manifest + review hardening
Jun 22, 2026
99bb864
feat(packaging): Windows Inno Setup installer + macOS drag-install dmg
Jun 22, 2026
5692db9
fix(update): preserve Inno uninstaller across installed-copy auto-update
Jun 23, 2026
b5badea
fix(update): preserve symlinks + exec bits on macOS update (ditto, no…
Jun 23, 2026
58d43f9
docs: feedback backend API spec (multipart submit → bitable, no GitHu…
Jun 23, 2026
f3c2554
feat(feedback): in-app feedback dialog → vc-backend (multipart, paste…
Jun 23, 2026
947ff4e
refine(feedback): hardcode endpoint, cleaner form, "goes to developer…
Jun 23, 2026
f1ed6de
refine(feedback): tighter, balanced dialog layout
Jun 24, 2026
6b165b2
refine(feedback): unify control shapes — full-width type dropdown + e…
Jun 24, 2026
865587f
fix(feedback): always send multipart, even with no screenshot
Jun 24, 2026
0b48a5e
feat(feedback): add feedback entry to the home page top-right
Jun 24, 2026
b2e0a72
refine(feedback): move home entry to the footer, leave the top bar un…
Jun 24, 2026
b6ef258
feat(feedback): auto-attach scrubbed recent log (default-on), harden …
Jun 24, 2026
ede888c
feat(translate): add free "Immersive" model translator (no key, concu…
Jun 25, 2026
4ee4dac
feat(llm): make the free "Immersive" gateway an LLM provider (covers …
Jul 4, 2026
a3ec0eb
feat(update): move update/announcement to self-hosted backend (block/…
Jul 4, 2026
2858f10
refine(ui): compact folder-picker control; trim verbose comments
Jul 4, 2026
2affce3
fix(ci): force UTF-8 stdout in desktop smoke so Windows cp1252 consol…
Jul 4, 2026
bb86f56
ci(desktop): build macOS on Apple Silicon (arm64) instead of Intel
Jul 4, 2026
0097a0c
fix(ui): bundle LXGW WenKai as the global UI font; init i18n before p…
WEIFENG2333 Jul 5, 2026
8c01f90
fix(i18n): batch page module-level tr() froze keys as raw labels
WEIFENG2333 Jul 5, 2026
aae2c59
fix(scripts): make i18n tooling work on Chinese Windows
WEIFENG2333 Jul 5, 2026
08e6348
fix(core): force UTF-8 on subprocess text pipes
WEIFENG2333 Jul 5, 2026
a7a16fa
refactor(core): unify media probing on ffmpeg -i via core/utils/media…
WEIFENG2333 Jul 5, 2026
a45e6ad
fix(download): live gh mirrors, archive validation; voxgate v0.3.0 wi…
WEIFENG2333 Jul 5, 2026
87b316a
refine(download): per-platform, actionable download failure feedback
WEIFENG2333 Jul 5, 2026
736ea1e
refine(ui): update banner docks bottom-right instead of covering the …
WEIFENG2333 Jul 5, 2026
bb03fca
fix(ui): subtitle style preview fits the stage without pinning window…
WEIFENG2333 Jul 5, 2026
51c6dce
fix(ui): synthesis result preview shows the full frame
WEIFENG2333 Jul 5, 2026
597737f
fix(ui): live caption surfaces startup errors instead of silently res…
WEIFENG2333 Jul 5, 2026
05146b9
feat(settings): connection test for the free LLM gateway
WEIFENG2333 Jul 5, 2026
351db81
fix(ui): doctor rows size to content; error surfaces stay compact
WEIFENG2333 Jul 5, 2026
44c14c2
feat(ui): first-party collapsible sidebar replaces qfluent navigation
WEIFENG2333 Jul 5, 2026
9172a6b
chore(i18n): catalog updates for download copy, doctor texts, sidebar…
WEIFENG2333 Jul 5, 2026
431844a
docs(agents): media probing rule and the QLabel wrap+selectable row g…
WEIFENG2333 Jul 5, 2026
85789f3
fix(ui): title bar tracks sidebar width so the window title never hides
WEIFENG2333 Jul 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/01_bug.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ body:
attributes:
label: 日志信息(可选)| Logs (Optional)
description: |
(可选)如果你在生成字幕视频过程遇到了错误,请打开根目录下的 AppData/logs/app.log 文件,根据日志的时间复制最近一次运行错误的日志信息并填写。这样可以更好帮助我排查。
(可选)如果你在生成字幕视频过程遇到了错误,请打开 VideoCaptioner AppData 目录下的 logs/app.log 文件,根据日志的时间复制最近一次运行错误的日志信息并填写。这样可以更好帮助我排查。可运行 `videocaptioner config path` 查看 AppData 目录位置

(Optional) Please open the AppData/logs/app.log file in the root directory and copy the log information from the most recent run error.
(Optional) Please open logs/app.log under the VideoCaptioner AppData directory and copy the most recent error logs. Run `videocaptioner config path` to locate the AppData directory.
render: shell
validations:
required: false
60 changes: 54 additions & 6 deletions .github/workflows/build-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ jobs:
include:
- name: Windows x64
os: windows-latest
- name: macOS Intel
os: macos-15-intel
- name: macOS Apple Silicon
os: macos-15

steps:
- uses: actions/checkout@v6
Expand All @@ -54,19 +54,32 @@ jobs:
python-version: "3.12"

- name: Install dependencies
run: uv sync --frozen
# --extra ocr:把硬字幕 OCR(rapidocr/onnxruntime/rapidfuzz)装进构建环境,否则 PyInstaller 收不到、桌面包硬字幕不可用。
run: uv sync --frozen --extra ocr

- name: Build desktop bundle
run: uv run --with pyinstaller --with static-ffmpeg python scripts/build_desktop.py --clean
run: uv run --extra ocr --with pyinstaller --with static-ffmpeg python scripts/build_desktop.py --clean

- name: Smoke test packaged app
run: uv run python scripts/smoke_desktop.py dist/VideoCaptioner

# 安装器 / dmg:给用户首次下载用(便携 zip 仍是自动更新的下载源)。
- name: Build Windows installer (Inno Setup)
if: runner.os == 'Windows'
run: |
choco install innosetup -y --no-progress
uv run python scripts/build_windows_installer.py

- name: Build macOS dmg
if: runner.os == 'macOS'
run: uv run python scripts/build_macos_dmg.py

- name: Upload desktop artifact
uses: actions/upload-artifact@v7
with:
name: desktop-${{ runner.os }}
path: artifacts/*.zip
# zip(自动更新源)+ setup.exe / dmg(人工下载)。manifest job 只挑 zip。
path: artifacts/*
if-no-files-found: error
retention-days: 14

Expand All @@ -79,4 +92,39 @@ jobs:
TAG="${GITHUB_REF#refs/tags/}"
gh release view "$TAG" >/dev/null 2>&1 || \
gh release create "$TAG" --title "$TAG" --generate-notes
gh release upload "$TAG" artifacts/*.zip --clobber
gh release upload "$TAG" artifacts/* --clobber

# 所有平台产物上传完成后,把新版本登记到更新后端(飞书多维表格驱动)。
# 客户端启动调 /api/update/check 即可拿到;二进制仍在本 Release,后端只存下载地址 + 校验信息。
register:
name: Register release to update backend
needs: desktop
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install deps
run: pip install requests

- name: Download all desktop artifacts
uses: actions/download-artifact@v5
with:
pattern: desktop-*
path: artifacts
merge-multiple: true

- name: Register release
shell: bash
env:
CI_RELEASE_TOKEN: ${{ secrets.CI_RELEASE_TOKEN }}
run: |
TAG="${GITHUB_REF#refs/tags/}"
python scripts/register_release.py \
--tag "$TAG" \
--repo "$GITHUB_REPOSITORY" \
--artifacts artifacts
7 changes: 6 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,13 @@ jobs:
- name: Type check CLI
run: uv run pyright videocaptioner/cli/

- name: i18n check (源码 key 集 == .pot;基准 zh_Hans 无空译文)
run: uv run python scripts/i18n.py check
env:
QT_QPA_PLATFORM: offscreen

- name: Unit tests
run: uv run pytest tests/test_cli tests/test_dubbing -q
run: uv run pytest tests/test_cli tests/test_dubbing tests/test_i18n -q

- name: Build package
run: uv build
14 changes: 11 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ __pycache__/
*.egg-info/
dist/
build/
artifacts/

# Virtual environments
.venv/
Expand Down Expand Up @@ -35,8 +36,11 @@ docs/.vitepress/cache/
docs/.vitepress/dist/

# Project-specific
/resource/bin/
!/resource/bin/bin_environment.txt
/resource/bin/*
# macsysaudio:macOS 系统声音 helper(arm64 + x86_64 universal),源码在 native/,体积小、
# 连同产物入库(clone 即用)。voxgate / ffmpeg 体积大且多平台,走
# core/download/dependencies.py 下载,不入库。
!/resource/bin/macsysaudio
/AppData/
/work-dir/
/*.srt
Expand All @@ -45,5 +49,9 @@ docs/.vitepress/dist/

# Claude Code
.claude/
CLAUDE.md
# CLAUDE.md is a tracked symlink to AGENTS.md.
!CLAUDE.md
videocaptioner/_version.py

# Local-only archive of superseded design mocks and internal review docs
/design-archive/
Loading
Loading