diff --git a/.dockerignore b/.dockerignore index a9bf09d21..13f8a2dfb 100644 --- a/.dockerignore +++ b/.dockerignore @@ -69,9 +69,6 @@ docs/ # Scripts *.sh -!start_autoclip.sh -!stop_autoclip.sh -!status_autoclip.sh # Container entrypoints are COPY'd by Dockerfile / Dockerfile.dev; excluding # them makes `docker build` fail with "/docker-entrypoint.sh: not found". !docker-entrypoint.sh @@ -110,3 +107,5 @@ dump.rdb # PID files *.pid +*.pid.json +*.pid.tmp diff --git a/.github/DISCUSSION_TEMPLATE/ai-models.yml b/.github/DISCUSSION_TEMPLATE/ai-models.yml index 7cb96cbd7..98c7fe4f8 100644 --- a/.github/DISCUSSION_TEMPLATE/ai-models.yml +++ b/.github/DISCUSSION_TEMPLATE/ai-models.yml @@ -3,13 +3,13 @@ body: - type: markdown attributes: value: | - 说明你要的模型或供应商。AutoClip 已支持 OpenAI 兼容接口、Gemini、通义千问、硅基流动,以及本机的 Ollama / LM Studio。 + 说明你要的模型或供应商,以及用途:分析、视觉、封面或字幕转写。当前支持与配置以[模型指南](https://github.com/zhouxiaoka/autoclip/blob/main/docs/AI_MODEL_CONFIGURATION.md)和设置页为准;本地转写包括 Whisper 与 SenseVoice。 只是「名单里没有这一项」、但兼容接口已经能填的,请在正文里写明,避免重复开需求。 - type: input id: model attributes: label: 模型或供应商 - placeholder: "Gemini 2.5 / Claude / Qwen 某个具体型号" + placeholder: "服务商与具体型号;本地转写注明模型名称" validations: required: true - type: dropdown @@ -27,6 +27,6 @@ body: id: detail attributes: label: 补充 - description: 报错请打码,不要贴 API Key。 + description: 报错请先脱敏,移除 API Key、Cookie 和私人素材内容;可复现故障请使用 Bug 模板。 validations: required: false diff --git a/.github/DISCUSSION_TEMPLATE/announcements.yml b/.github/DISCUSSION_TEMPLATE/announcements.yml index 7199aed33..96a0f57b2 100644 --- a/.github/DISCUSSION_TEMPLATE/announcements.yml +++ b/.github/DISCUSSION_TEMPLATE/announcements.yml @@ -8,7 +8,7 @@ body: id: version attributes: label: 版本 - placeholder: "v1.3.0" + placeholder: "实际发布版本 vX.Y.Z;未发布的源码更新请注明" validations: required: true - type: textarea diff --git a/.github/DISCUSSION_TEMPLATE/q-a.yml b/.github/DISCUSSION_TEMPLATE/q-a.yml index 76a99fbf9..c5e2c42cb 100644 --- a/.github/DISCUSSION_TEMPLATE/q-a.yml +++ b/.github/DISCUSSION_TEMPLATE/q-a.yml @@ -21,6 +21,6 @@ body: id: env attributes: label: 版本 / 平台 / 模型 - placeholder: "v1.2.1 · Windows · 通义千问 qwen-plus" + placeholder: "实际版本或 commit SHA · 平台 · 相关服务商与模型" validations: required: false diff --git a/.github/DISCUSSION_TEMPLATE/show-and-tell.yml b/.github/DISCUSSION_TEMPLATE/show-and-tell.yml new file mode 100644 index 000000000..4737948a8 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/show-and-tell.yml @@ -0,0 +1,52 @@ +title: "成片投稿:" +body: + - type: markdown + attributes: + value: | + 用 AutoClip 做出了好片子?发在这里。维护者会挑选收录到[官网案例库](https://zhouxiaoka.github.io/autoclip_intro/cases/),并署上你的名字。 + 收录标准:AutoClip 生成、没有在其他软件里再剪辑(在 AutoClip 里改标题、换模板可以);原片是公开视频;你有权发布这些成片。 + - type: input + id: source + attributes: + label: 原片链接 + placeholder: "https://www.youtube.com/watch?v=… 或 B 站链接" + validations: + required: true + - type: checkboxes + id: platforms + attributes: + label: 成片平台 + options: + - label: 抖音 + - label: 小红书 + - label: B 站 + - label: TikTok + - label: Instagram Reels + - label: YouTube Shorts + - label: YouTube + - type: textarea + id: clips + attributes: + label: 成片 + description: 附上成片 MP4 或可访问的成片链接;有发布包的,把封面和发布文案一起附上。 + validations: + required: true + - type: input + id: setup + attributes: + label: 版本与模型 + placeholder: "例如 v1.5.0 · qwen-plus · macOS" + validations: + required: true + - type: input + id: run + attributes: + label: 用时与费用(可选) + placeholder: "例如 原片 1h20m,出片 9 分钟,模型费用约 ¥0.1" + - type: checkboxes + id: consent + attributes: + label: 授权 + options: + - label: 我同意 AutoClip 在官网和 README 展示这些成片,并署名链接到我的 GitHub + required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 49143c6dc..90675ed51 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -24,16 +24,17 @@ body: id: version attributes: label: AutoClip 版本 / Version - description: 设置页底部或「关于」里可见 / Shown in Settings → About - placeholder: "v1.2.1" + description: 填写实际安装版本;源码用户附提交 SHA / Installed version, or commit SHA for source builds + placeholder: "vX.Y.Z;源码附 commit SHA / include commit SHA for source" validations: required: true - type: input id: model attributes: - label: 使用的模型提供商 / LLM provider - placeholder: "例如 通义千问 qwen-plus / OpenAI gpt-4o / 硅基流动 / 自定义 OpenAI 兼容" + label: 相关模型 / Relevant models + description: 分析服务与具体型号;转写问题附 Whisper / SenseVoice 型号。尚未配置或不相关可注明 / Provider and model; include transcription model when relevant + placeholder: "分析:服务商 + 型号;转写:Whisper / SenseVoice / 不相关" validations: required: true @@ -66,5 +67,5 @@ body: attributes: label: 日志 / 截图 / Logs or screenshots description: | - 桌面版日志位置:macOS `~/Library/Application Support/AutoClip/logs`,Windows `%APPDATA%\AutoClip\logs`。粘贴最后 50 行即可,注意删掉 API Key。 + 桌面版日志位置:macOS `~/Library/Application Support/AutoClip/logs`,Windows `%APPDATA%\AutoClip\logs`。粘贴失败前后相关日志即可,删除 API Key、Cookie、邮箱、私人路径与素材内容。Docker/源码用户请注明运行方式与日志来源。安全问题按 SECURITY.md 私下联系。 render: text diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 525fc8b0c..63febca04 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -9,3 +9,6 @@ contact_links: - name: 🙋 使用提问 / Q&A url: https://github.com/zhouxiaoka/autoclip/discussions/categories/q-a about: 怎么用、模型怎么选、切片效果怎么调。能复现的故障仍开 Issue。 + - name: 🔒 安全问题 / Security + url: https://github.com/zhouxiaoka/autoclip/blob/main/SECURITY.md + about: 漏洞或凭据泄露请按安全政策私下联系,不公开敏感细节 / Follow the security policy for private contact. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..2ad283e73 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,11 @@ +## 问题与结果 + + + +## 验证 + + + +## 兼容或迁移说明(如有) + + diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bb8dcf7b3..2eb62914d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,13 +1,37 @@ name: CI on: + workflow_call: pull_request: push: branches: - main - master +permissions: + contents: read + jobs: + windows-runtime: + uses: ./.github/workflows/windows-asyncio.yml + + contracts: + name: Release contract checks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Versions, translations and acceptance gate regressions + run: python scripts/quality_gate.py --group contracts --report quality/contracts.json + - uses: actions/upload-artifact@v4 + if: always() + with: + name: quality-contracts + path: quality/contracts.json + if-no-files-found: error + backend: name: Backend tests runs-on: ubuntu-latest @@ -21,27 +45,74 @@ jobs: python-version: "3.11" cache: pip + - name: Install video test runtime + run: | + sudo apt-get update + sudo apt-get install -y ffmpeg fonts-noto-cjk + ffmpeg -version + ffprobe -version + - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - pip install ruff + pip install -r requirements-test.txt - - name: Lint backend (ruff) + - name: Report existing Python style debt (advisory) continue-on-error: true run: ruff check backend - - name: Run tests + - name: Blocking correctness lint, all backend tests and editorial fixtures env: DASHSCOPE_API_KEY: test_api_key LOG_FORMAT: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" - run: python -m pytest backend/tests -q + run: python scripts/quality_gate.py --group backend --report quality/backend.json + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: quality-backend + path: quality/backend.json + if-no-files-found: error + + - name: Installed wheel portrait framing smoke + run: | + pip install 'opencv-python-headless>=4.10' + pip wheel --no-deps --wheel-dir /tmp/autoclip-wheel . + python scripts/verify_python_wheel.py /tmp/autoclip-wheel/autoclip-*-py3-none-any.whl --video backend/assets/example/source.mp4 --report /tmp/autoclip-wheel/portrait-report.json - name: Community board and feedback ingest checks run: | python3 scripts/test_community_board.py python3 scripts/test_ingest_feedback.py + - name: Set up Node for source launcher + uses: actions/setup-node@v4 + with: + node-version: "20" + - name: Source launcher and scoped shutdown smoke + run: | + python -m venv --system-site-packages venv + (cd frontend && npm ci) + cp env.example .env + docker run -d --name autoclip-source-redis -p 6379:6379 redis:7-alpine + for i in $(seq 1 30); do + if docker exec autoclip-source-redis redis-cli ping; then break; fi + sleep 1 + done + ./quick_start.sh + ./status_autoclip.sh + ./stop_autoclip.sh + if ./status_autoclip.sh; then echo 'Stopped services incorrectly reported healthy'; exit 1; fi + - name: Source runtime logs on failure + if: failure() + run: cat logs/backend.log logs/frontend.log logs/celery.log 2>/dev/null || true + - name: Clean up source smoke + if: always() + run: | + ./stop_autoclip.sh || true + docker rm -f autoclip-source-redis || true + frontend: name: Frontend checks runs-on: ubuntu-latest @@ -62,29 +133,18 @@ jobs: - name: Install dependencies run: npm ci - - name: Lint - run: npm run lint - - - name: Typecheck - run: npm run typecheck - - - name: Analytics contract tests - run: node --test tests/analytics.test.cjs - - - name: Sentry build configuration tests - run: node --test tests/sentry-build.test.cjs tests/desktop.test.cjs - - - name: Internationalization checks - run: node --test tests/i18n.test.cjs - - - name: Publish UI helpers - run: node --test tests/upload-post-ui.test.cjs - - - name: Feedback draft checks - run: node --test tests/feedback-draft.test.cjs - - - name: Build - run: npm run build + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Blocking lint, types, tests and production build + working-directory: . + run: python scripts/quality_gate.py --group frontend --report quality/frontend.json + - uses: actions/upload-artifact@v4 + if: always() + with: + name: quality-frontend + path: quality/frontend.json + if-no-files-found: error # Guards the README's recommended `docker compose` path, which was broken for months # without anything in CI noticing (issue #88): the image failed to build, the worker @@ -166,3 +226,41 @@ jobs: - name: Tear down if: always() run: docker compose down -v --remove-orphans + + docker-dev-smoke: + name: Docker development compose smoke + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - name: Build development image + run: docker compose -f docker-compose.dev.yml build autoclip-dev + - name: Start development services through compatibility entrypoint + run: ./docker-start.sh dev --no-build + - name: Wait for both development servers and the worker + run: | + for i in $(seq 1 90); do + if curl -fsS http://localhost:8000/api/v1/health/ >/dev/null 2>&1 && curl -fsS http://localhost:3000/ >/dev/null 2>&1; then break; fi + sleep 3 + done + curl -fsS http://localhost:8000/api/v1/health/ + curl -fsS http://localhost:3000/ >/dev/null + for i in $(seq 1 20); do + out=$(docker compose -f docker-compose.dev.yml exec -T celery-worker-dev celery -A backend.core.celery_app inspect --json --timeout 5 active_queues 2>/dev/null || true) + if echo "$out" | grep -q '"name": "processing"'; then break; fi + sleep 3 + done + for q in celery processing video notification upload; do + echo "$out" | grep -q "\"name\": \"$q\"" + done + ./docker-status.sh dev + - name: Stop through compatibility entrypoint + run: | + ./docker-stop.sh dev + if ./docker-status.sh dev; then echo 'Stopped containers incorrectly reported healthy'; exit 1; fi + - name: Dump logs on failure + if: failure() + run: docker compose -f docker-compose.dev.yml logs --no-color + - name: Tear down CI resources + if: always() + run: docker compose -f docker-compose.dev.yml down -v --remove-orphans diff --git a/.github/workflows/desktop-build.yml b/.github/workflows/desktop-build.yml index a9e0512b9..db1cb332b 100644 --- a/.github/workflows/desktop-build.yml +++ b/.github/workflows/desktop-build.yml @@ -35,6 +35,7 @@ on: # step fails with "Resource not accessible by integration" (403). permissions: contents: write + actions: read env: # GitHub runners are in the US; the default tsinghua mirror in the build @@ -44,7 +45,61 @@ env: SENTRY_PROJECT: autoclip-frontend jobs: + # Internal product acceptance must precede creation of a public release tag. + # Manual builds stay untagged; tagged builds require an immutable receipt for + # the exact source SHA. A green CI run alone cannot satisfy this gate. + candidate-gate: + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + TAG: ${{ github.ref_name }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Reject manual builds of already public version numbers + if: github.event_name == 'workflow_dispatch' + run: | + set -euo pipefail + case "$GITHUB_REF" in refs/heads/*) ;; *) echo "Internal builds require an untagged branch"; exit 1 ;; esac + VERSION=$(python -c 'import json; print(json.load(open("src-tauri/tauri.conf.json"))["version"])') + gh api --paginate "repos/$GH_REPO/releases?per_page=100" --jq '.[].tag_name' > known-release-tags.txt + git ls-remote --tags origin "refs/tags/v$VERSION" > existing-candidate-tag.txt + python - "$VERSION" <<'PY' + import pathlib, re, sys + version = sys.argv[1] + assert re.fullmatch(r'\d+\.\d+\.\d+', version), 'invalid internal candidate version' + assert 'v' + version not in pathlib.Path('known-release-tags.txt').read_text().splitlines(), 'candidate version is already public; choose the next patch only after authorization' + assert not pathlib.Path('existing-candidate-tag.txt').read_text().strip(), 'candidate tag already exists' + PY + - name: Require successful internal desktop acceptance before tagged builds + if: startsWith(github.ref, 'refs/tags/v') + run: | + set -euo pipefail + # actions/checkout rewrites refs/tags/$TAG as a lightweight tag; restore the annotated object. + git fetch --no-tags --force origin "refs/tags/$TAG:refs/tags/$TAG" + ACCEPTANCE_RUN_ID=$(python scripts/internal_acceptance.py tag-run --tag "$TAG") + gh api "repos/$GH_REPO/actions/runs/$ACCEPTANCE_RUN_ID" > internal-acceptance-run.json + gh run download "$ACCEPTANCE_RUN_ID" -n internal-acceptance -D internal-accepted + python scripts/internal_acceptance.py check-receipt --version "${TAG#v}" --commit "$GITHUB_SHA" \ + --receipt internal-accepted/receipt.json --acceptance-run internal-acceptance-run.json + + # The exact candidate must pass source checks, including hotfix tag builds. + source-quality: + uses: ./.github/workflows/ci.yml + + sensevoice-runtime: + uses: ./.github/workflows/sensevoice.yml + + whisper-runtime: + uses: ./.github/workflows/issue-recovery.yml + build-macos-arm64: + needs: [candidate-gate, source-quality, sensevoice-runtime, whisper-runtime] if: github.event_name == 'push' || inputs.build_macos runs-on: macos-14 # Apple Silicon runner steps: @@ -102,6 +157,25 @@ jobs: TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} run: bash scripts/build_macos_arm.sh + - name: Verify shipped macOS runtime before publishing + shell: bash + run: | + set -euo pipefail + APP="src-tauri/target/release/bundle/macos/AutoClip Desktop.app" + RESOURCES="$PWD/$APP/Contents/Resources/resources" + codesign --verify --deep --strict "$APP" + "$RESOURCES/python/bin/python3" -B scripts/verify_macos_bundle.py --resources "$RESOURCES" --output-parent "$RUNNER_TEMP/autoclip-release-validation" + "$RESOURCES/python/bin/python3" -B scripts/verify_sensevoice.py --resources "$RESOURCES" --report "$RUNNER_TEMP/macos-sensevoice-installed.json" + codesign --verify --deep --strict "$APP" + + - name: Preserve installed macOS ASR evidence + uses: actions/upload-artifact@v4 + if: always() + with: + name: macos-installed-sensevoice + path: ${{ runner.temp }}/macos-sensevoice-installed.json + if-no-files-found: ignore + - name: Upload DMG artifact uses: actions/upload-artifact@v4 with: @@ -113,6 +187,7 @@ jobs: retention-days: 30 build-windows-x64: + needs: [candidate-gate, source-quality, sensevoice-runtime, whisper-runtime] if: github.event_name == 'push' || inputs.build_windows runs-on: windows-latest defaults: @@ -186,14 +261,74 @@ jobs: src-tauri/target/release/bundle/nsis/*.sig retention-days: 30 + # 没有 Windows 真机时的替代冒烟:在干净的 windows-latest 上装上一个正式版, + # 模拟旧版后端残留锁住 _asyncio.pyd,再静默覆盖安装本次构建,然后用安装目录里的 Python + # 跑后端 / ffmpeg / 来源守卫。界面和真实链接下载仍需人工或用户验证,见 RELEASE_CHECKLIST.md。 + smoke-windows-x64: + needs: build-windows-x64 + if: needs.build-windows-x64.result == 'success' + runs-on: windows-latest + defaults: + run: + shell: pwsh + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download new installer + uses: actions/download-artifact@v4 + with: + name: autoclip-desktop-windows-x64 + path: new + + - name: Upgrade over previous release and verify installed runtime + run: | + $installer = Get-ChildItem -Recurse new -Filter '*-setup.exe' | Select-Object -First 1 + ./scripts/windows_upgrade_smoke.ps1 -NewInstaller $installer.FullName + + - name: Upload smoke report + if: always() + uses: actions/upload-artifact@v4 + with: + name: windows-smoke-report + path: | + windows-smoke.json + windows-sensevoice-installed.json + windows-whisper-installed.json + if-no-files-found: ignore + + # Bind untagged installers to their source/run without creating a Release. + internal-provenance: + if: github.event_name == 'workflow_dispatch' && needs.build-macos-arm64.result == 'success' && needs.build-windows-x64.result == 'success' && needs.smoke-windows-x64.result == 'success' + needs: [build-macos-arm64, build-windows-x64, smoke-windows-x64] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + pattern: autoclip-desktop-* + path: internal-assets + merge-multiple: true + - name: Record untagged package hashes and source identity + run: | + set -euo pipefail + VERSION=$(python3 -c 'import json; print(json.load(open("src-tauri/tauri.conf.json"))["version"])') + python3 scripts/internal_acceptance.py provenance --version "$VERSION" --commit "$GITHUB_SHA" \ + --build-run-id "$GITHUB_RUN_ID" --assets internal-assets + - uses: actions/upload-artifact@v4 + with: + name: internal-desktop-provenance + path: internal-assets/internal-build-provenance.json + if-no-files-found: error + retention-days: 30 + # Publish only after both platforms succeed; never advertise a partial release. release: - if: startsWith(github.ref, 'refs/tags/v') && needs.build-macos-arm64.result == 'success' && needs.build-windows-x64.result == 'success' - needs: [build-macos-arm64, build-windows-x64] + if: startsWith(github.ref, 'refs/tags/v') && needs.build-macos-arm64.result == 'success' && needs.build-windows-x64.result == 'success' && needs.smoke-windows-x64.result == 'success' + needs: [build-macos-arm64, build-windows-x64, smoke-windows-x64] runs-on: ubuntu-latest - env: - # 放在 job 级:step 自己的 env 在它的 if 里读不到 - WEBSITE_DISPATCH_TOKEN: ${{ secrets.WEBSITE_DISPATCH_TOKEN }} steps: - name: Checkout code uses: actions/checkout@v4 @@ -208,6 +343,22 @@ jobs: - name: List artifacts run: ls -la dist + - name: Set up Python for CLI and MCP release + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Build and verify CLI and MCP wheel from the same tag + run: | + sudo apt-get update + sudo apt-get install -y ffmpeg fonts-noto-cjk + python -m pip install -r requirements.txt + python -m pip install 'opencv-python-headless>=4.10' + python -m pip wheel --no-deps --wheel-dir dist . + python scripts/verify_python_wheel.py dist/autoclip-*-py3-none-any.whl --video backend/assets/example/source.mp4 --report "$RUNNER_TEMP/wheel-portrait-report.json" + python scripts/build_python_release.py dist/autoclip-*-py3-none-any.whl --out "dist/autoclip-${GITHUB_REF_NAME#v}-cli-mcp.zip" + (cd dist && sha256sum *.whl *-cli-mcp.zip > python-release-sha256.txt) + # Release 正文 = CHANGELOG.md 里该版本的段落 + 平台安装说明(scripts/release_notes.py,仅标准库) - name: Render release notes from CHANGELOG run: python3 scripts/release_notes.py "${{ github.ref_name }}" -o release_body.md && cat release_body.md @@ -228,24 +379,21 @@ jobs: python3 scripts/write_updater_manifest.py "${ARGS[@]}" ls -la dist/latest.json 2>/dev/null || echo "NOTE: latest.json not written (no signed artifacts)" - - name: Create / update GitHub Release + # 先以 Pre-release 发出:应用内更新读的是 releases/latest/download/latest.json, + # Pre-release 不算 latest,所以这时只有手动下载的人拿得到。 + # 真机冒烟 + 观察期通过后,跑 promote-release.yml 转正,才推给所有用户。见 RELEASE_CHECKLIST.md。 + - name: Bind final release assets to this source and build run + run: | + python3 scripts/release_acceptance.py provenance --tag "$GITHUB_REF_NAME" \ + --commit "$(git rev-parse HEAD)" --build-run-id "$GITHUB_RUN_ID" --assets dist + + - name: Create / update GitHub Release (pre-release) uses: softprops/action-gh-release@v2 with: name: "AutoClip Desktop ${{ github.ref_name }}" files: dist/* body_path: release_body.md + prerelease: true + make_latest: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - # 通知官网仓库更新版本号 / 下载链接(autoclip_intro/.github/workflows/sync-release.yml)。 - # 需要 WEBSITE_DISPATCH_TOKEN(fine-grained PAT,仓库 autoclip_intro,Contents: Read and write); - # 没配就跳过——官网那边有每日 cron 兜底。见 scripts/website/README.md。 - - name: Notify website (repository_dispatch) - if: env.WEBSITE_DISPATCH_TOKEN != '' - run: | - curl -sS -f -X POST \ - -H "Authorization: Bearer $WEBSITE_DISPATCH_TOKEN" \ - -H "Accept: application/vnd.github+json" \ - https://api.github.com/repos/zhouxiaoka/autoclip_intro/dispatches \ - -d '{"event_type":"autoclip-release","client_payload":{"tag":"${{ github.ref_name }}"}}' - echo "已通知官网同步到 ${{ github.ref_name }}" diff --git a/.github/workflows/internal-acceptance.yml b/.github/workflows/internal-acceptance.yml new file mode 100644 index 000000000..8f8259121 --- /dev/null +++ b/.github/workflows/internal-acceptance.yml @@ -0,0 +1,77 @@ +name: Internal Acceptance + +on: + workflow_dispatch: + inputs: + source_commit: + description: "Full source SHA of the untagged internal desktop build" + required: true + type: string + build_run_id: + description: "Successful untagged Desktop Build run, both platforms" + required: true + type: string + manifest_path: + description: "Committed sanitized internal acceptance manifest" + required: true + type: string + +permissions: + contents: read + actions: read + +jobs: + acceptance: + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + SOURCE_COMMIT: ${{ inputs.source_commit }} + BUILD_RUN_ID: ${{ inputs.build_run_id }} + MANIFEST: ${{ inputs.manifest_path }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Collect the untagged source and immutable build artifacts + run: | + set -euo pipefail + python - <<'PY' + import os, re + assert re.fullmatch(r'[0-9a-f]{40}', os.environ['SOURCE_COMMIT']), 'full source SHA required' + assert re.fullmatch(r'[1-9]\d*', os.environ['BUILD_RUN_ID']), 'invalid build run' + PY + git ls-files --error-unmatch -- "$MANIFEST" >/dev/null + git fetch --no-tags origin "$SOURCE_COMMIT" + VERSION=$(git show "$SOURCE_COMMIT:src-tauri/tauri.conf.json" | python -c 'import json,sys; print(json.load(sys.stdin)["version"])') + echo "VERSION=$VERSION" >> "$GITHUB_ENV" + gh api "repos/$GH_REPO/actions/runs/$BUILD_RUN_ID" > build-run.json + gh api "repos/$GH_REPO/actions/runs/$BUILD_RUN_ID/jobs?per_page=100" > build-jobs.json + gh run download "$BUILD_RUN_ID" -n autoclip-desktop-macos-arm64 -D internal-assets + gh run download "$BUILD_RUN_ID" -n autoclip-desktop-windows-x64 -D internal-assets + gh run download "$BUILD_RUN_ID" -n internal-desktop-provenance -D internal-assets + - name: Fetch every hash-bound original and current source + run: | + set -euo pipefail + python scripts/release_acceptance.py source-commits --manifest "$MANIFEST" > evidence-source-commits.txt + while IFS= read -r source; do + git fetch --no-tags origin "$source" + done < evidence-source-commits.txt + - name: Validate installed desktop cases and every repair before tagging + run: | + python scripts/internal_acceptance.py validate --version "$VERSION" --commit "$SOURCE_COMMIT" \ + --assets internal-assets --manifest "$MANIFEST" --build-run build-run.json \ + --build-jobs build-jobs.json --acceptance-run-id "$GITHUB_RUN_ID" --bundle accepted + - name: Preserve only reviewed, sanitized internal evidence + uses: actions/upload-artifact@v4 + with: + name: internal-acceptance + path: accepted/ + if-no-files-found: error + retention-days: 90 + - name: Summary + run: | + echo "Internal acceptance passed for $SOURCE_COMMIT. No tag or release was created. An authorized annotated tag must include Internal-Acceptance-Run: $GITHUB_RUN_ID and point to this exact source." >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/issue-hygiene.yml b/.github/workflows/issue-hygiene.yml index 1bb49e2aa..397f9a9b9 100644 --- a/.github/workflows/issue-hygiene.yml +++ b/.github/workflows/issue-hygiene.yml @@ -30,9 +30,9 @@ jobs: '', '- 当前状态与已知问题:#96', '- Issue 只收能复现的故障,以及维护者确认后放进路线图的需求。希望支持什么、你的用法、想要哪个模型,请发到 [Discussions](https://github.com/zhouxiaoka/autoclip/discussions)。', - '- bug 缺少 **版本 / 平台 / 模型** 时会被打上 `needs-info`,14 天内没补充会自动关闭(补充后重开即可)。', + '- bug 缺少 **版本 / 平台 / 模型** 时会被打上 `needs-info`,14 天内没人补充会先标记为 stale,再过 7 天仍无回复才自动关闭;补充后由维护者确认是否重开。', '', - '_Issues are for reproducible bugs and accepted roadmap items. Ideas belong in Discussions. Bugs missing version / platform / model get `needs-info` and auto-close after 14 days without a reply._' + '_Issues are for reproducible bugs and accepted roadmap items. Ideas belong in Discussions. Bugs missing version / platform / model get `needs-info`, are marked stale after 14 days without a reply, then close after 7 more days._' ].join('\n'); await github.rest.issues.createComment({ owner: context.repo.owner, @@ -53,8 +53,8 @@ jobs: days-before-pr-stale: -1 days-before-pr-close: -1 stale-issue-label: stale - stale-issue-message: "还缺少复现所需的信息(版本 / 平台 / 模型 / 日志),7 天内没有补充会自动关闭。补充后会自动重开处理。" - close-issue-message: "因长期缺少复现信息已关闭。补充信息后回复即可重开。" + stale-issue-message: "还缺少复现所需的信息(版本 / 平台 / 模型 / 日志),7 天内没有补充会自动关闭。补充后由维护者确认是否重开。" + close-issue-message: "因长期缺少复现信息已关闭。可在此回复补充信息,由维护者确认是否重开。" remove-stale-when-updated: true operations-per-run: 100 diff --git a/.github/workflows/issue-recovery.yml b/.github/workflows/issue-recovery.yml new file mode 100644 index 000000000..1633878f1 --- /dev/null +++ b/.github/workflows/issue-recovery.yml @@ -0,0 +1,46 @@ +name: Issue recovery acceptance +on: + workflow_call: + workflow_dispatch: + pull_request: + paths: + - 'backend/services/whisper_runtime.py' + - 'backend/services/whisper_model_manager.py' + - 'backend/utils/speech_recognizer.py' + - 'backend/pipeline/**' + - 'backend/core/database.py' + - 'backend/tests/test_database_connections.py' + - 'scripts/verify_whisper_recovery.py' + - '.github/workflows/issue-recovery.yml' +permissions: + contents: read +jobs: + windows-recovery: + runs-on: windows-latest + timeout-minutes: 20 + env: + PYTHONUTF8: '1' + PYTHONIOENCODING: utf-8 + HF_HUB_DISABLE_PROGRESS_BARS: '1' + AUTOCLIP_DATA_DIR: '${{ github.workspace }}/.test-data/autoclip-recovery' + AUTOCLIP_APP_DIR: '${{ github.workspace }}/.test-data/autoclip-recovery' + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.13.13' + cache: pip + - name: Install dependencies + run: | + python -m pip install -r requirements.txt numpy + choco install ffmpeg --yes --no-progress + - name: Failure recovery regressions + run: python -m pytest backend/tests/test_issue_closure_regressions.py backend/tests/test_whisper_local_subtitle.py backend/tests/test_whisper_model_download.py backend/tests/test_windows_media_feedback.py backend/tests/test_windows_asyncio.py backend/tests/test_recent_feedback.py backend/tests/test_deepseek_cost_guard.py backend/tests/test_task_submission.py backend/tests/test_database_connections.py -q + - name: Install Whisper and transcribe real speech offline + run: python scripts/verify_whisper_recovery.py + - uses: actions/upload-artifact@v4 + if: always() + with: + name: windows-issue-recovery + path: issue-recovery-report.json + if-no-files-found: ignore diff --git a/.github/workflows/promote-release.yml b/.github/workflows/promote-release.yml new file mode 100644 index 000000000..ed652aaff --- /dev/null +++ b/.github/workflows/promote-release.yml @@ -0,0 +1,130 @@ +# 发版分两步:tag 触发 desktop-build.yml 先发 Pre-release(应用内更新拿不到), +# 真机冒烟和观察期过了再跑这里转正。发现坏版本时用 halt 让应用内更新退回上一个好版本。 +# 流程见 RELEASE_CHECKLIST.md。 +name: Promote / Halt Release + +on: + workflow_dispatch: + inputs: + tag: + description: "版本 tag,例如 v1.4.1" + required: true + type: string + action: + description: "promote = 转正并推给所有用户;halt = 撤下该版本,应用内更新退回 fallback_tag" + required: true + type: choice + options: [promote, halt] + fallback_tag: + description: "halt 时恢复为最新的好版本,例如 v1.4.0(promote 时忽略)" + required: false + type: string + acceptance_run_id: + description: "promote 必填:通过的 Release Acceptance run ID(halt 忽略)" + required: false + type: string + +permissions: + contents: write + actions: read + +concurrency: + group: release-promotion + cancel-in-progress: false + +jobs: + release: + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + TAG: ${{ inputs.tag }} + FALLBACK: ${{ inputs.fallback_tag }} + ACCEPTANCE_RUN_ID: ${{ inputs.acceptance_run_id }} + WEBSITE_DISPATCH_TOKEN: ${{ secrets.WEBSITE_DISPATCH_TOKEN }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Require verified acceptance before promotion + if: inputs.action == 'promote' + run: | + set -euo pipefail + python - <<'PY' + import os, re + assert re.fullmatch(r'v\d+\.\d+\.\d+', os.environ['TAG']), 'invalid tag' + assert re.fullmatch(r'[1-9]\d*', os.environ['ACCEPTANCE_RUN_ID']), 'promote requires a Release Acceptance run ID' + PY + gh api "repos/$GH_REPO/actions/runs/$ACCEPTANCE_RUN_ID" > acceptance-run.json + python - <<'PY' + import json + run = json.load(open('acceptance-run.json')) + assert run['path'] == '.github/workflows/release-acceptance.yml', 'wrong evidence workflow' + assert run['status'] == 'completed' and run['conclusion'] == 'success', 'acceptance did not pass' + PY + gh run download "$ACCEPTANCE_RUN_ID" --name release-acceptance --dir accepted + BUILD_RUN_ID=$(python - <<'PY' + import json + value = json.load(open('accepted/acceptance.json'))['build_run_id'] + assert type(value) is int and value > 0, 'invalid build run ID' + print(value) + PY + ) + git fetch --no-tags origin "refs/tags/$TAG:refs/tags/$TAG" + TARGET_COMMIT=$(git rev-parse "$TAG^{commit}") + gh api "repos/$GH_REPO/actions/runs/$BUILD_RUN_ID" > build-run.json + gh api "repos/$GH_REPO/actions/runs/$BUILD_RUN_ID/jobs?per_page=100" > build-jobs.json + gh release download "$TAG" --dir release-assets + python scripts/release_acceptance.py source-commits --manifest accepted/acceptance.json > evidence-source-commits.txt + while IFS= read -r source; do + git fetch --no-tags origin "$source" + done < evidence-source-commits.txt + python scripts/release_acceptance.py validate --tag "$TAG" --commit "$TARGET_COMMIT" \ + --assets release-assets --manifest accepted/acceptance.json --repository "$GH_REPO" \ + --build-run build-run.json --build-jobs build-jobs.json + - name: Check release assets + run: | + set -e + assets=$(gh release view "$TAG" --json assets -q '.assets[].name') + echo "$assets" + if [ "${{ inputs.action }}" = "promote" ]; then + echo "$assets" | grep -q '^latest.json$' || { echo "::error::$TAG 缺少 latest.json,应用内更新会拿不到"; exit 1; } + echo "$assets" | grep -q '\.dmg$' || { echo "::error::$TAG 缺少 macOS DMG"; exit 1; } + echo "$assets" | grep -q 'setup\.exe$' || { echo "::error::$TAG 缺少 Windows 安装包"; exit 1; } + fi + + - name: Promote + if: inputs.action == 'promote' + run: | + gh release edit "$TAG" --prerelease=false --latest + echo "$TAG 已转正:releases/latest/download/latest.json 现在指向它" >> "$GITHUB_STEP_SUMMARY" + + - name: Halt + if: inputs.action == 'halt' + run: | + set -e + [ -n "$FALLBACK" ] || { echo "::error::halt 需要 fallback_tag"; exit 1; } + gh release view "$FALLBACK" --json assets -q '.assets[].name' | grep -q '^latest.json$' \ + || { echo "::error::$FALLBACK 没有 latest.json,不能作为回退目标"; exit 1; } + gh release edit "$FALLBACK" --prerelease=false --latest + gh release edit "$TAG" --prerelease=true + { + echo "$TAG 已撤回为 Pre-release,应用内更新退回 $FALLBACK。" + echo "已经升级到 $TAG 的用户不会被降级,需要尽快发补丁版。" + } >> "$GITHUB_STEP_SUMMARY" + + # 通知官网仓库更新版本号 / 下载链接(autoclip_intro/.github/workflows/sync-release.yml)。 + # 没配 WEBSITE_DISPATCH_TOKEN 就跳过,官网每日 cron 兜底。见 scripts/website/README.md。 + - name: Notify website (repository_dispatch) + if: env.WEBSITE_DISPATCH_TOKEN != '' + run: | + current="$TAG"; [ "${{ inputs.action }}" = "halt" ] && current="$FALLBACK" + curl -sS -f -X POST \ + -H "Authorization: Bearer $WEBSITE_DISPATCH_TOKEN" \ + -H "Accept: application/vnd.github+json" \ + https://api.github.com/repos/zhouxiaoka/autoclip_intro/dispatches \ + -d "{\"event_type\":\"autoclip-release\",\"client_payload\":{\"tag\":\"$current\"}}" + echo "已通知官网同步到 $current" diff --git a/.github/workflows/release-acceptance.yml b/.github/workflows/release-acceptance.yml new file mode 100644 index 000000000..829cf048f --- /dev/null +++ b/.github/workflows/release-acceptance.yml @@ -0,0 +1,73 @@ +name: Release Acceptance + +on: + workflow_dispatch: + inputs: + tag: + description: "Candidate tag, e.g. v1.5.1" + required: true + type: string + build_run_id: + description: "Successful Desktop Build run for this tag" + required: true + type: string + manifest_path: + description: "Committed sanitized acceptance manifest, e.g. docs/releases/v1.5.1/acceptance.json" + required: true + type: string + +permissions: + contents: read + actions: read + +jobs: + acceptance: + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + TAG: ${{ inputs.tag }} + BUILD_RUN_ID: ${{ inputs.build_run_id }} + MANIFEST: ${{ inputs.manifest_path }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Resolve target and collect immutable build evidence + run: | + set -euo pipefail + python - <<'PY' + import os, re + assert re.fullmatch(r'v\d+\.\d+\.\d+', os.environ['TAG']), 'invalid tag' + assert re.fullmatch(r'[1-9]\d*', os.environ['BUILD_RUN_ID']), 'invalid build run' + PY + git ls-files --error-unmatch -- "$MANIFEST" >/dev/null + git fetch --no-tags origin "refs/tags/$TAG:refs/tags/$TAG" + echo "TARGET_COMMIT=$(git rev-parse "$TAG^{commit}")" >> "$GITHUB_ENV" + gh api "repos/$GH_REPO/actions/runs/$BUILD_RUN_ID" > build-run.json + gh api "repos/$GH_REPO/actions/runs/$BUILD_RUN_ID/jobs?per_page=100" > build-jobs.json + gh release download "$TAG" --dir release-assets + - name: Fetch every hash-bound original and current source + run: | + set -euo pipefail + python scripts/release_acceptance.py source-commits --manifest "$MANIFEST" > evidence-source-commits.txt + while IFS= read -r source; do + git fetch --no-tags origin "$source" + done < evidence-source-commits.txt + - name: Validate both platforms, regressions, observation and reviewer + run: | + python scripts/release_acceptance.py validate --tag "$TAG" --commit "$TARGET_COMMIT" \ + --assets release-assets --manifest "$MANIFEST" --repository "$GH_REPO" \ + --build-run build-run.json --build-jobs build-jobs.json --bundle accepted + - name: Preserve only reviewed, sanitized evidence + uses: actions/upload-artifact@v4 + with: + name: release-acceptance + path: accepted/ + if-no-files-found: error + retention-days: 90 + - name: Summary + run: echo "Acceptance passed for $TAG ($TARGET_COMMIT). This run does not publish. Supply this run ID to Promote / Halt Release." >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/sensevoice.yml b/.github/workflows/sensevoice.yml new file mode 100644 index 000000000..12454bca9 --- /dev/null +++ b/.github/workflows/sensevoice.yml @@ -0,0 +1,46 @@ +name: Local SenseVoice acceptance +on: + workflow_call: + workflow_dispatch: + pull_request: + paths: + - 'backend/services/sensevoice*.py' + - 'backend/tests/test_sensevoice.py' + - 'scripts/verify_sensevoice.py' + - '.github/workflows/sensevoice.yml' +permissions: + contents: read +jobs: + real-transcription: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-14] + runs-on: ${{ matrix.os }} + timeout-minutes: 35 + env: + PYTHONUTF8: '1' + PYTHONIOENCODING: utf-8 + HF_HUB_DISABLE_PROGRESS_BARS: '1' + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.13.13' + cache: pip + - run: python -m pip install -r requirements.txt + - if: runner.os == 'Linux' + run: sudo apt-get update && sudo apt-get install -y ffmpeg + - if: runner.os == 'Windows' + run: choco install ffmpeg --yes --no-progress + - if: runner.os == 'macOS' + run: brew install ffmpeg + - run: python -m pytest backend/tests/test_sensevoice.py -q + - name: Install optional runtime, download models, transcribe real speech offline + run: python scripts/verify_sensevoice.py + - uses: actions/upload-artifact@v4 + if: always() + with: + name: sensevoice-${{ matrix.os }} + path: sensevoice-acceptance.json + if-no-files-found: ignore diff --git a/.github/workflows/windows-asyncio.yml b/.github/workflows/windows-asyncio.yml new file mode 100644 index 000000000..842671488 --- /dev/null +++ b/.github/workflows/windows-asyncio.yml @@ -0,0 +1,89 @@ +name: Windows asyncio regression + +on: + workflow_call: + push: + paths: + - 'backend/core/windows_asyncio.py' + - 'backend/tests/test_windows_asyncio.py' + - 'backend/services/studio/store.py' + - 'backend/tests/test_studio_store_recovery.py' + - 'backend/tests/test_studio_persistent_write_failure.py' + - 'scripts/windows_tests/test_studio_store.py' + - 'backend/app_factory.py' + - 'scripts/lib/desktop_build_common.sh' + - '.github/workflows/windows-asyncio.yml' + - 'src-tauri/**' + pull_request: + paths: + - 'backend/core/windows_asyncio.py' + - 'backend/tests/test_windows_asyncio.py' + - 'backend/services/studio/store.py' + - 'backend/tests/test_studio_store_recovery.py' + - 'backend/tests/test_studio_persistent_write_failure.py' + - 'scripts/windows_tests/test_studio_store.py' + - 'backend/app_factory.py' + - 'scripts/lib/desktop_build_common.sh' + - '.github/workflows/windows-asyncio.yml' + - 'src-tauri/**' + workflow_dispatch: + +permissions: + contents: read + +jobs: + media-runtime: + name: Windows media runtime regressions + runs-on: windows-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.13.13" + - run: python -m pip install -r requirements.txt -r requirements-test.txt + - name: Real media inference, SenseVoice recovery and Windows state replacement + env: + AUTOCLIP_DATA_DIR: ${{ runner.temp }}/autoclip-media-regression + AUTOCLIP_APP_DIR: ${{ runner.temp }}/autoclip-media-regression + SENTRY_DSN: "" + run: python -m pytest backend/tests/test_framing_concurrency.py backend/tests/test_sensevoice.py backend/tests/test_studio_store_recovery.py backend/tests/test_studio_persistent_write_failure.py scripts/windows_tests/test_studio_store.py -q + - name: Prepare FFmpeg for real interview-window rendering + shell: pwsh + run: | + if (-not (Get-Command ffmpeg -ErrorAction SilentlyContinue)) { + choco install ffmpeg --yes --no-progress + if ($LASTEXITCODE -ne 0) { throw 'FFmpeg installation failed' } + $env:PATH = "$env:ChocolateyInstall\bin;$env:PATH" + } + ffmpeg -version + if ($LASTEXITCODE -ne 0) { throw 'FFmpeg unavailable' } + - name: Quote-card edges and shot-mode transitions on Windows + env: + AUTOCLIP_DATA_DIR: ${{ runner.temp }}/autoclip-window-render-regression + AUTOCLIP_APP_DIR: ${{ runner.temp }}/autoclip-window-render-regression + SENTRY_DSN: "" + run: python -m pytest backend/tests/test_packaging_render.py -k preserves_slide_edges -q + + windows-asyncio: + name: Windows Proactor cleanup + runs-on: windows-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + # Match the desktop bundle; review the shim when upgrading Python. + python-version: "3.13.13" + - run: python -m pip install pytest + - run: python -m pytest backend/tests/test_windows_asyncio.py -q + + - name: Backend process tree lifecycle + run: cargo test --manifest-path src-tauri/tests/windows-job/Cargo.toml + - name: Prepare compile-only resource placeholders + shell: pwsh + run: | + New-Item -ItemType Directory -Force src-tauri/resources/python, src-tauri/resources/backend, src-tauri/resources/ffmpeg, frontend/dist | Out-Null + Set-Content frontend/dist/index.html '' + - name: Compile desktop integration (not an installer build) + run: cargo check --manifest-path src-tauri/Cargo.toml diff --git a/.github/workflows/windows-install-smoke.yml b/.github/workflows/windows-install-smoke.yml new file mode 100644 index 000000000..2b0f0d990 --- /dev/null +++ b/.github/workflows/windows-install-smoke.yml @@ -0,0 +1,90 @@ +# 只重跑 Windows 安装冒烟,复用某次 desktop-build 已经打好的安装包,不用再等 25 分钟构建。 +# 调冒烟脚本、复现安装问题时用。 +name: Windows Install Smoke + +on: + workflow_dispatch: + inputs: + build_run_id: + description: "desktop-build.yml 的 run id(其中 build-windows-x64 成功)" + required: true + type: string + verify_whisper: + description: "Install Whisper and run cached real speech with installed portable Python" + type: boolean + default: false + +permissions: + contents: read + actions: read + +jobs: + smoke: + runs-on: windows-latest + defaults: + run: + shell: pwsh + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + + - name: Download installer from build run + uses: actions/download-artifact@v4 + with: + name: autoclip-desktop-windows-x64 + path: new + run-id: ${{ inputs.build_run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Upgrade over previous release and verify installed runtime + run: | + $installer = Get-ChildItem -Recurse new -Filter '*-setup.exe' | Select-Object -First 1 + ./scripts/windows_upgrade_smoke.ps1 -NewInstaller $installer.FullName + + - name: Upload smoke report + if: always() + uses: actions/upload-artifact@v4 + with: + name: windows-smoke-report + path: windows-smoke.json + if-no-files-found: ignore + + - name: Installed CLI/MCP wheel portrait and font smoke + run: | + $resources = (Get-Content windows-smoke.json -Raw | ConvertFrom-Json).resources + $python = Join-Path $resources 'python\python.exe' + $runtime = Join-Path $env:RUNNER_TEMP 'wheel-framing-runtime' + & $python -m pip install --target $runtime 'opencv-python-headless>=4.10' + if ($LASTEXITCODE -ne 0) { throw 'OpenCV test runtime install failed' } + & $python -m pip wheel --no-deps --wheel-dir wheel . + if ($LASTEXITCODE -ne 0) { throw 'CLI/MCP wheel build failed' } + $wheel = Get-ChildItem wheel -Filter 'autoclip-*-py3-none-any.whl' | Select-Object -First 1 + $env:AUTOCLIP_FFMPEG_PATH = Join-Path $resources 'ffmpeg\ffmpeg.exe' + $env:AUTOCLIP_FFPROBE_PATH = Join-Path $resources 'ffmpeg\ffprobe.exe' + & $python -B scripts/verify_python_wheel.py $wheel.FullName --opencv-dir $runtime --video backend/assets/example/source.mp4 --report installed-wheel-portrait.json + if ($LASTEXITCODE -ne 0) { throw 'Installed wheel portrait/font smoke failed' } + + - name: Upload installed wheel portrait report + if: always() + uses: actions/upload-artifact@v4 + with: + name: installed-wheel-portrait-report + path: installed-wheel-portrait.json + if-no-files-found: ignore + + - name: Verify actual installed Whisper runtime and cached transcription + if: inputs.verify_whisper + run: | + $report = Get-Content windows-smoke.json -Raw | ConvertFrom-Json + $resources = $report.resources + & (Join-Path $resources 'python\python.exe') -B scripts\verify_whisper_recovery.py --resources $resources --report installed-whisper-report.json + if ($LASTEXITCODE -ne 0) { throw "Installed Whisper acceptance failed: $LASTEXITCODE" } + + - name: Upload installed Whisper report + if: always() && inputs.verify_whisper + uses: actions/upload-artifact@v4 + with: + name: installed-whisper-report + path: installed-whisper-report.json + if-no-files-found: ignore diff --git a/.gitignore b/.gitignore index 28b19da67..9f78e0732 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,10 @@ venv_*/ *.webm *.m4v *.3gp +# 随包提供的示例项目原片(17 MB,backend/services/example_project.py) +!backend/assets/example/source.mp4 +# 随包提供的片尾动画(backend/services/output_branding.py,源文件见 design/outro-v5) +!backend/assets/outro/*.mp4 *.mp3 *.wav *.flac @@ -133,6 +137,8 @@ local_backups/ # 进程ID文件 *.pid +*.pid.json +*.pid.tmp # Redis数据文件 dump.rdb diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..bdee8ea23 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,15 @@ +# AutoClip quality and release requirements + +Read [docs/TESTING_ACCEPTANCE.md](docs/TESTING_ACCEPTANCE.md) before changing code or preparing a release. Use [RELEASE_CHECKLIST.md](RELEASE_CHECKLIST.md) for release operations. + +- Diagnose the latest report using its version, platform and build. Preserve unrelated work, user data and secrets. Use isolated data directories for every test. +- For a production defect, reproduce the triggering conditions and show the regression fails before the fix and passes afterward. Test boundaries between configuration, requests, persistence, runtime and UI; test count alone is not acceptance. +- Run `python scripts/quality_gate.py --report /absolute/local/path/quality.json` before claiming a candidate passes source checks. Install dependencies first. The report identifies the commit and tracked changes. A targeted run is useful during development; a release requires all groups and the exact tag's CI. +- Python correctness lint, frontend lint/types/tests/build, backend tests, version/readme contracts and release-gate regressions are blocking. Existing general Python style warnings remain debt; never waive new runtime errors. Add corresponding checks when changing provider routing, migrations, retries, SQLite, optional runtimes, downloads or telemetry. +- Keep all eight UI locales consistent. Change the event producer, query/measurement contract and validation acceptance together. +- Before creating any release tag, build the untagged candidate branch with Desktop Build, complete every required installed-package case on both platforms and every repair regression, and pass Internal Acceptance. Bind evidence to the exact source SHA and package hashes. The receipt always identifies the current source and packages. After a source/version/package change, rebuild when necessary and re-run affected assertions; previously passed unaffected assertions may be inherited only through the audited impact-inheritance contract in docs/TESTING_ACCEPTANCE.md, preserving their original source, package hashes and execution time. Pending, failed or unknown assertions cannot be inherited. Do not consume a public version for internal repairs. An authorized annotated tag must carry `Internal-Acceptance-Run: RUN_ID`; the tag build rejects missing, failed or mismatched acceptance. +- Use the final installed package on Windows x64 and macOS arm64 for the required acceptance cases. Record OS, VM/emulation status, portable runtime, package SHA-256, source commit and outcomes. A source checkout, loopback model fixture, wheel test or successful CI does not replace desktop UI/real-model acceptance. +- A candidate with pending/failed/skipped required cases, unresolved blockers, no observation samples or mismatched evidence is **NO-GO**. Do not bypass this by extending an observation period or merely disclosing the gap. Fix and re-test first. +- `scripts/release_acceptance.py` and the **Release Acceptance** workflow must pass before **Promote / Halt Release**. Never promote directly with `gh release edit`, change an existing tag, claim a local fix is shipped, or close an issue before release and report-specific verification. +- Hotfixes start from the affected tag and contain only necessary repairs and regression tests. Keep unrelated quality cleanup and new features separate; bring the fixes back to main. +- Paid calls, contacting testers, publishing, release promotion and rollback need authorization from the user's request/session. Prepare concrete evidence before asking for any missing authorization. Never upload raw PostHog/Sentry exports, credentials, personal paths or user media to the public repository; only reviewed sanitized acceptance summaries belong there. diff --git a/CHANGELOG.md b/CHANGELOG.md index eb0cb2d58..5515d397d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,211 @@ _(本周尚无改动)_ +## [1.5.6] - 2026-10-06 + +- 默认自动预检失败时改走字幕路线继续出片,不再整单失败;只有明确要求视觉分析时才停住。 + +- 导入前检查分析模型、转写、视觉和 FFmpeg。缺什么直接给出连接、安装或打开设置的入口;没有字幕且转写未就绪时不能开始。 + +- 自动出片失败事件补齐失败阶段、HTTP 状态和字幕/视觉路线,不再把所有失败都记成笼统的模型错误。 + +- 安装冒烟改为走 Studio 一键出片,并用 ffprobe 检查成片。 + +- 桌面版不再启动 Celery。项目列表以 studio.json 的出片终态为准,避免首页一直停在「制作中」。 + +- 删除已不再使用的旧导入页和未引用的 Celery 试验文件。 + +## [1.5.5] - 2026-10-06 + +- 包含未公开发布的 1.5.4 全部修复(1.5.4 标签的发布构建被验收门禁误拦,未生成安装包),并修复发布构建读取验收标签的问题。 + +- 云端转写失败时保留云端原因和配置提示,不再误报本地 Whisper 未安装;保留原有请求上限。 + +- 成片保存后继续同步本次封面收尾,修复最后一张卡片封面生成后未自动显示的问题;可选封面失败或服务重启仍保留已生成视频。 + +- 发布简介中的 CEO、CTO、CFO、COO 或“公司负责人”等任职说法缺少原字幕依据时,保留标题与话题并省略简介,避免补入没有依据的身份或曾任经历;不增加模型请求。 + +- 静音切点检测兼容 Windows 本地编码和缺失的 FFmpeg 错误输出;可选停顿检测失败时仍可按字幕完成选段。 + +- 修复制作偏好和调整方案弹窗中下拉菜单被遮挡、无法用鼠标选择的问题。 + +- 修复隐私设置读取较慢时覆盖刚修改的崩溃报告开关,以及离开设置页后旧请求覆盖新选择的问题。 + +- 将访谈式成片的重点词标签和人物名牌放到字幕区域下方,避免与生成字幕或原视频字幕重叠。 + +- 模型目录的本地缓存无法写入时,继续返回已取得的账号模型列表;避免可选缓存故障阻断设置页刷新。 +- Windows 安装包补齐微软 C++ 运行库,修复旧系统运行库导致本地 Whisper 转写崩溃;限制转写并行度,并修复已有模型缓存重试仍保留旧错误。 +- 修复低帧率素材尾部取帧失败;自动视觉制作遇到读取或模型错误时明确失败并提供重试,不再静默切换成字幕制作。 +- 修复在设置中开启崩溃报告后,后台错误丢失运行环境标签的问题,保证验收告警与线上告警能够区分。 + +- 修正本地视频处理超时的错误分类,避免被统一记录成未知错误;渲染失败保留已有成片并可重新生成。 + +- 自动视觉成片完成或失败后同步项目列表状态,修复游戏视频已可下载但首页一直显示“制作中”的问题;旧项目按已保存的终态恢复,保留成片与原设置。 + +- 关闭使用统计后不再初始化统计 SDK 或请求远程配置、功能开关;重新开启后正常恢复统计。 +- 修复 Windows 原生便携 Python 路径带扩展前缀时未使用内置 SenseVoice wheel 的问题,保留 macOS 便携运行时识别与安装限制。 + +- 无口播的视觉高光不再误报字幕不可用;仍保留访谈字幕缺失和已恢复字幕的真实提示。 +- Windows 桌面程序包含所需 Visual C++ 运行库;新增实际程序依赖检查,防止开发机预装组件掩盖干净机器无法启动的问题。 +- 翻译包装遗漏字幕行时保留可用译文或原文,旧的空字幕草稿重新导出时恢复原字幕;界面根据实际字幕显示双语与降级情况。 +- 访谈切点识别字幕中的说话人切换,避免带入下一个问题的开头;忽略上一句只重叠几毫秒的字幕,标题按自然短语换行。 + +- 浏览器登录信息被占用或拒绝读取时,公开视频尝试一次无浏览器登录信息下载;仍需登录时提示关闭浏览器后重试,不修改浏览器数据。 + +- 封面接口地址错误、连接失败或超时时继续本地排版或截帧;封面校对连接中断时保留已生成图片,提示不带请求中的敏感信息。 +- 文案重写与字幕翻译的文字服务错误区分权限、限流、超时及连接失败,避免全部归为未知错误。 +- 汇总此前未转正补丁中的必要修复:升级后模型设置加载、限流和断网后的有限重试与恢复、数据库占用恢复、SenseVoice 准备与安装依赖、成片卡片竖版预览和紧凑排版。 +- 保留引用卡与幻灯片两侧内容,补齐百炼视觉模型能力,兼容视觉事件列表;关闭画面识别后不再通过自动封面或字幕判断发送素材画面。 + +- 发布前增加双平台内部安装包验收;场景未通过或验收提交不匹配时,阻断公开候选构建,避免用连续补丁号代替内部回归。 + +- 修复项目状态持续无法保存时,制作任务卡在等待或进行中、无法重试的问题;保留已有成片。 +- 修复项目状态文件无法读取后,分析、制作与封面任务仍显示进行中且无法重试的问题;读取恢复后保存真实终态,项目列表同步恢复,保留已完成成片。 +- 修复导出任务快速完成或失败时,成片卡片漏接结果而一直显示排队的问题。 + +## [1.5.3] - 2026-10-03 + +> **验收未通过,请暂缓安装此预发布版本。** 项目状态文件持续无法写入时,部分制作任务可能一直显示等待或进行中。对应修复仍在验收,本版安装包未包含。 + +- 修复访谈式竖屏成片裁掉引用卡、幻灯片两侧文字的问题。 +- 百炼视觉模型缺少能力信息时可正确使用画面分析;未知模型能力可在设置中确认。 +- 关闭画面识别后,自动封面选帧和硬字幕语言判断不再向视觉服务发送素材画面。 +- 视觉高光分析兼容模型直接返回事件列表,保留选段边界和错误格式校验。 + +## [1.5.2] - 2026-10-03 + +- 修复 Windows 成片状态文件被短暂读取占用时导致导出失败;持续无法写入时保留原状态。 + +- 快速视觉判断抽帧失败或超时时,继续使用字幕方案,保留原素材与重试入口。 +- 内容分析失败时保留具体阶段;模型限流、断网、超时和无法解析的回答提供对应提示,避免统一显示为未知错误。 + +## [1.5.1] - 2026-10-02 + +- 修复部分升级用户的 AI 模型设置一直加载:无效旧封面配置会单独提示修正,原配置保留。 +- 修复服务持续失败时请求反复重试的问题,失败后能及时结束并提示。 +- 修复旧数据库被占用时,启动阶段可选检查导致连接失败的问题。 +- 自动出片失败保留具体错误分类,便于及时发现和定位问题。 +- 损坏的 AI 配置可在设置页修正,保留有效连接,保存时备份损坏的文件。 +- 损坏配置不再被误报为已保存,首页会重新显示连接服务入口。 +- 一键出片启动时保持在制作进度页,不再误跳到旧导入确认页。 +- 本地素材缺少节目出处时,发布文案不再保留猜测的节目名或空出处占位。 +- 本地素材的自动话题只使用字幕中出现的原词,避免模型补入没有依据的人物和公司名称。 +- 旧 Gemini、Grok、GLM 封面服务迁移保留原生生图协议和服务地址。 +- 修复并发出片时人物识别结果混入其他视频,导致取景不准确的问题。 +- SenseVoice 状态更新不再复用残留临时文件,损坏的状态文件可恢复并重新准备。 +- SenseVoice 模型准备可绕过残留只读 ready 临时文件,状态与模型就绪记录读写同步。 +- SenseVoice 所需的原生依赖随桌面安装包提供,避免首次准备时要求用户本机编译;双平台构建验证包内真实安装与转写。 +- 修复筛选失败后自动出片仍停在进行中,以及按需生成任务未启动后无法重试的问题。 +- 自动出片汇总保留渲染失败分类;部分成功也记录失败原因,成功重试清理旧分类。 +- 自动筛选不再提示手动确认;自动制作失败后正确显示未完成状态。 +- 自动制作在生成成片前失败时提供重试与调整方案入口;修正模型或字幕条件后可继续,恢复结果保持同一流程关联并按尝试去重。 +- 并发重试成片时重新核验状态,避免覆盖另一次请求已经排队、运行或完成的任务。 +- 成片预览完整显示竖版画幅,避免横版容器裁掉标题和字幕;标题与简介集中到封面文案区,移除独立制作标签,卡片底部操作对齐,窄窗口及八种界面语言可正常换行。 + +## [1.5.0] - 2026-10-01 + +- CLI / MCP wheel 补齐人物检测 ONNX 和 MIT 许可证,修复竖版取景回退;CI 从安装包重新检测真实素材,并校验中文 ASS 字体。macOS 修正随包字体名称匹配,避免中文字幕显示方框。 + +### 新增 +- **一键出片**:贴一个视频链接、选好要发的平台(抖音、小红书、TikTok、Reels、YouTube Shorts、B 站、YouTube),自动挑出值得发的片段,按每个平台的画幅、时长和包装直接生成可发布成片;可随时追加平台版本,失败的单条可重试。 +- **两套包装模板**:抖音 / 小红书用「访谈式」(上方两行标题、4:3 说话人窗口、中英双语字幕、左下名牌、编辑点评标签);TikTok / Reels / Shorts 用「播客式」(全屏跟随说话人、逐词高亮字幕、开头一句 hook、名牌)。外语素材自动翻成目标平台的语言;原片自带字幕时保留完整画面,字幕放在画面下方。 +- **按内容情绪变换风格**:模型判断每段内容的情绪(冷静、严肃、强观点、真诚、轻松),据此在 7 套配色和多种字幕动效里挑选,不同片段风格各异,同一片段在各平台保持一致。 +- **每个平台先生成最好的 10 条**:长视频会挑出 20–40 个片段,先按目标平台的时长要求筛选,再自动生成评分最高的 10 条,其余列为「备选片段」,点「生成这条」再制作,省时间也省模型费用。 +- **每条成片自带发布包**:按目标平台写好标题、简介和话题(抖音钩子式、小红书笔记式、B 站信息完整、TikTok / Reels / Shorts 英文文案),按平台字数与话题数限制;封面在成片完成后自动设计——说话人画面、成片同款标题与配色、嘉宾名牌,按平台比例(竖屏 9:16、小红书 3:4、B 站 16:10、YouTube 16:9)。成片卡片上可直接改文案、复制、导出「发布包」(视频 + 封面 + 文案),也可以一键用 AI 重新设计封面;去发布时自动带上这套文案与封面。 +- **新片尾动画**:1.8 秒的 AutoClip 标志动画与提示音,竖屏、横屏各一版,其他比例自动居中适配。 +- 竖屏成片按说话人自动取景,主持人与嘉宾切换时画面跟着说话的人走。 +- 新增赞助合作伙伴 88API:八语 README、首页与设置页推荐入口、独立 API Key、模型发现、兼容封面与 Whisper 转写;CLI / MCP 使用 `api88`。 +- 模型设置新增赞助合作伙伴「Infistar 无限星河」:接口地址已预设,填好 Key 后自动列出账号可用的模型;设置页提供专属注册链接(可领 $5 体验额度)和接入说明。CLI / MCP 支持 `--provider infistar` 与 `INFISTAR_API_KEY`。 +- 设置 → AI 模型重新整理为「AI 服务 / 字幕转写 / 封面 / 高级」四段:选一家服务、填好 Key,分析模型自动选好;画面识别首次配置默认开启,注明适合游戏画面、口播较少的内容;封面默认免费自动设计,自己选好生图服务和模型后才用 AI 生成。从 1.4 升级的用户:1.4 首次配置时自动打开的 AI 封面会改回自动设计(已选的模型保留,在设置里选「AI 生成」即可恢复),不会在后台自动按张计费。供应商分组中的赞助伙伴改为「推荐」。 +- 首次打开应用会弹出「连接 AI 服务」引导,未连接时导入会提示先去连接;不再需要自己摸索设置页。 +- 首页空状态提供「用示例项目看看效果」:一键生成一个带来源链接的已完成示例项目(Sam Altman 访谈三段),可以直接进编辑器、渲染、生成封面、导出,体验完整流程。 +- Studio 编辑器:字幕改为整条成片统一的四种样式(带预览);片头文字降为可选并用视觉缩略图选择;播放器始终跟随滚动可见;预览播放条改为成片自身的时间轴。 +- 竖屏「满屏」构图新增按镜头自动取景:先识别镜头切换,再对准正在说话的人;引用卡、PPT 等没有人物的镜头自动改为完整画面 + 模糊背景,不再被裁掉两侧。首次使用需下载约 45 MB 的人物识别组件;每个镜头都可以单独改为「对准人物 / 完整画面」并微调位置。 + +### 改进 +- 客户端补齐发布包保存、AI 封面结果、单条重试、竖版版式与实际片尾的匿名统计,便于发现生成失败与降级;关闭统计后停止观察。 +- CLI / MCP 同步接入一键出片:按平台生成视频、封面、发布文案与 ZIP 发布包,支持查询进度,版本统一为 1.5.0。 +- 竖版成片可选「按平台默认 / 访谈式(人物窗口)/ 播客式(满屏)」,字幕和文案语言仍按平台;追加平台和备选片段继承选择。 +- 设置页增加「自动添加品牌片尾」开关,默认开启;修改自动成片后重新导出也会保留片尾。 +- **出片速度大幅提升**:一条 2 小时访谈从链接到成片,由约 65 分钟缩短到 7–8 分钟(视频有作者字幕时)或约 30 分钟(需要本地语音识别时)。片段挑选改为一次通读全文,原来几十次模型调用、半小时以上,现在一分钟以内;各步骤的模型调用并行执行;视频有作者上传的字幕时直接使用,不再本地语音识别。 +- **云端语音识别更快**:选用云端转写时,音频分段并行上传识别,一条近 3 小时的中文访谈约 4 分钟转写完(本地 Whisper 约 23 分钟);阿里云百炼连接支持填写专属接口地址。 +- **封面更清晰、不认错人**:从成片里挑嘉宾最清晰的画面(有视觉模型时由它确认是哪位嘉宾),名牌只标在确认过的嘉宾身上,不再把主持人标成嘉宾;英文长标题自动换行放大。AI 封面不让模型自己写人名,名牌由我们叠加;生成后核对标题文字,写错会重试,仍不对就保留自动设计的封面;按平台比例生成,不再裁掉标题或留出上下黑边。成片卡片上直接显示完整封面。 +- **模型费用更低**:一条 2–3 小时访谈的模型费用由约 ¥0.6 降到 ¥0.1–0.2(qwen-plus 估算),模型调用由近 200 次降到 30 次左右;同语言包装不再让模型复述整段字幕。 +- **更安静**:成片用电脑自带的硬件编码器(macOS VideoToolbox、Windows NVENC / QSV / AMF),CPU 占用约降到原来的四分之一,风扇不再狂转;硬件编码不可用时自动改用软件编码。 +- **切点更自然**:片段从问题或观点的第一句开始,到回答讲完、说话人有明显停顿时才结束;按原片音频的真实停顿下刀,不再带进半句下一段话或主持人的下一个问题。 +- 导入确认页去掉重复的分析方式提问,控件和文案与设置页统一;发布页和编辑器的「烧录」「标题卡」等术语换成直白说法,编辑器和导出对话框补上封面入口,发布页默认自动生成封面。 + +### 修复 +- YouTube 长视频先筛选至少 180 秒的完整片段,再选前十,避免被高分短片段挤成备选后一直等待;没有可执行任务时明确结束,CLI / MCP 不再停在 rendering。 +- 横版长字幕不再整段铺满画面;各画幅按字号分屏,单屏最多两行,截取长字幕中段不会重新播放前面的整段文字。 +- 成片卡片只保留「复制发布文案」,复制内容不附产品署名;AI 重新设计封面使用当前平台的设计流程,重复点击不会重复生成。 +- 发布包和桌面下载改为逐段写入文件,长视频不再在内存里整份复制;下载失败会移除残缺文件。 +- 外语素材原片烧有英文字幕时,抖音版也会配中文字幕。 +- 原片已有硬字幕时,按目标平台判断是否加字幕:中文硬字幕投抖音不再重复加中文字幕,投 TikTok 加英文;外语访谈配了英文硬字幕的,投 TikTok 不再重复。细小、无描边的硬字幕(常见于 B 站访谈)也能识别。 +- YouTube 偶尔只给 360p 画质时会自动换方式重新下载到 720p 以上,不再出模糊成片。 +- TikTok / Reels / Shorts / YouTube 版本只用英文:标题、字幕、发布文案和封面都不再混入中文;原片没有字幕时一定补上英文字幕;原片烧有中文字幕时,英文版会模糊掉那一条字幕带,再配上英文字幕,并照常跟随说话人取景。台标、PPT 文字不再被误认成原片字幕。 +- 一键出片的项目里不再多出一排打不开的原始切片卡片(这些切片没有单独的视频文件,预览、下载都会失败);原始切片仍在「来源片段」里,可以拿来做新成片。 +- 同语言字幕与声音同步;电影感字幕改为一次 2–5 个词,不再一个词一个词跳。 +- 标题不再出现 Markdown 符号或 `&` 之类的转义字符;中文平台不会出现日文标题;包装偶发不合规时会自动重试一次,不再整段退回原字幕。 +- 时间线重试只使用本次有效结果,避免失败后误用上次候选;原始响应缓存现在会正常解析,无效缓存不会自动触发模型请求。 +- 智能导入后台任务提交失败后可明确重试,已有方案、草稿和成片保留;修改方案失败时同步恢复偏好。 +- 时间线兼容常见时间戳格式;相邻短片段在丢弃前尝试合并,保留既有时长限制。 +- 保留的旧导入组件支持更多 YouTube 分享链接格式;当前 Studio 入口增加独立链接回归覆盖。 +- Windows 覆盖安装前会结束旧版本残留的后端进程,不再报「无法打开要写入的文件 _asyncio.pyd」;应用内更新先停后端再安装。 +- 链接导入把内置 ffmpeg 交给下载器,Windows 上合并音视频不再失败;下载阶段显示真实百分比,不再长时间停在同一个进度。 +- 测试使用临时数据库,不再清空开发者本机的 `data/autoclip.db`。 + +### 安全 +- 本地后端只接受 AutoClip 自己界面的跨域请求,其他网页不能再读取设置里的 API Key 或发起导入、发布;桌面端拒绝非本机 Host,防 DNS 重绑定。 +- 调试路由默认不再挂载(`AUTOCLIP_ENABLE_DEBUG_ROUTES=1` 开启);`python -m backend.main` 默认只监听 127.0.0.1。 +- Docker 从局域网 IP 或自定义域名打开前端时,需要在 `AUTOCLIP_ALLOWED_ORIGINS` 里加上前端地址(逗号分隔)。 + +## [1.4.0] - 2026-09-27 + +### 新增 +- 游戏视觉分析:自行配置多模态模型,在确认后识别录屏中的独立事件,生成可编辑高光与推广草稿。 +- 双分析路线:保留低成本字幕分析;旧配置默认字幕模式。模型配置与调用授权分离,付费视觉初筛需显式启用。 +- 统一导入、确认、编辑与导出:快速推荐制作类型,支持手动校正;未确认导入可恢复,确认后才正式理解和剪辑。 +- 字幕高光与推广草稿接入共用编辑器;六款文字模板、语言配置、候选边界调整及导出历史。 + +### 改进与修复 +- 有界视觉扫描与有效候选保留,按独立事件组织高光,最多六段,不按时间相邻强行合成全片。 +- 推广草稿的自动画幅匹配为竖屏,用户手动选择优先;保持原音轨并支持本机渲染与原生保存。 +- 旧项目重分析显式确认,文字任务不隐式回退到视觉接口;导出调度失败可恢复。 +- 保留便携 Python 运行时资源签名,统一八语界面与匿名业务统计。 + +### 验收范围与已知限制 +- macOS Apple Silicon 已有候选包安装、非空数据升级/回退、原生编辑/导出/保存和真实跑酷样本验证。单一样本不代表所有游戏质量;输出仍需人工检查边界、裁切和文案,不承诺广告投放效果。 +- Windows 提供构建产物,实际安装、导入与保存尚待实机验收。 +- 本次不含 CTA 动效、生成式品牌尾卡、卡拉 OK / 逐词字幕;后续独立迭代。 +- 使用云端视觉模型会发送抽样画面及必要文字;字幕路线发送相关字幕/文案,费用取决于所选服务商。剪辑与渲染在本机完成。 +- macOS 为 ad-hoc 签名、未公证;Windows 安装包未做系统代码签名。更新包签名与系统代码签名是不同机制。 + +## [1.3.5] - 2026-09-26 + +### 改进 +- 导入失败的监控分类:缺字幕、缺少 API Key,以及未预期的导入故障,会以不同异常类型分开上报。Sentry 里对应 fingerprint 为 `import-processing` / `missing-subtitle`、`import-processing` / `missing-key`;未预期故障仍是 `ImportProcessingError`,沿用默认栈归组。日志里带 `kind=missing-subtitle`、`kind=missing-key` 或 `kind=unexpected`。这只改善监控分类,不改变导入是否成功,也不改变字幕质量。 + +### 修复 +- YouTube / 链接导入时,项目卡不再停在约 5%:下载进度会写入数据库,进度条会跟上列表里的真实百分比。这不表示所有 YouTube 下载或 Whisper 转写都会成功(Related #163 / #183) +- 切片预览改为原生 video。播放地址没有 .mp4 后缀时,ReactPlayer 不会挂上播放器,弹层只剩一块黑底。新切片转成 H.264 / AAC 并前移索引,应用内能解出画面。已经生成的旧切片不会重编码;解不开时预览会说明去下载,用系统播放器打开(Related #175) +- 走 DeepSeek 官方接口做切片分析时关闭思考模式,并限制单次输出长度。思考模式默认开着,推理内容按输出 token 计费,长字幕会比可见回答贵很多。长视频仍按约 30 分钟一块、分几步调用;刷新页面不会重新计费,重新开始处理才会(Related #175) +- 时间线为空时不再误导去改模型设置(Related #182) +- 本地导入调用 Whisper 时,不再因为多传了时间戳、标点或超时参数,在转写开始前就失败。未安装时仍指到「设置 → 转写」 +- Whisper 只返回空白片段,或上次留下的字幕文件没有正文时,不再把空文件当成转写成功 +- 本地导入没有可用字幕时,失败说明会指到「设置 → 转写」,也可以在重新导入时附上 .srt。已经失败、只记下「字幕文件不存在」的项目,打开后同样能看到这条去向(#186) +- 桌面端连续查看项目、下载或生成合集时,不再因为数据库连接占满而打不开列表和详情(#175) +- 切片标题含中文等非英文字符时,预览和下载不再因为响应头无法编码而失败 + +## [1.3.4] - 2026-09-24 + +### 修复 +- macOS 桌面端切片生成后可以预览,下载会保存到「下载」文件夹(#166 / #168) +- 片源处理进度显示更准:不再因读错字段停在约 5%;真下载失败仍需看日志(Related #163 / #169) +- 导入任务失败时,Celery 结果可正确记为 FAILURE(#20 / #170) +- 无字幕或未安装 Whisper 时,失败提示指到「设置 → 转写」(#165 族 / #171) +- 没有可用模型或连接测试失败时,提示需自备 API Key,并指到「设置 → 模型」(Related #161/#162 / #174) + ## [1.3.3] - 2026-09-23 ### 修复 @@ -219,7 +424,15 @@ _(本周尚无改动)_ ### 链接 -- [Unreleased]: https://github.com/zhouxiaoka/autoclip/compare/v1.3.3...HEAD +- [Unreleased]: https://github.com/zhouxiaoka/autoclip/compare/v1.5.6...HEAD +- [1.5.6]: https://github.com/zhouxiaoka/autoclip/compare/v1.5.3...v1.5.6 +- [1.5.3]: https://github.com/zhouxiaoka/autoclip/compare/v1.5.2...v1.5.3 +- [1.5.2]: https://github.com/zhouxiaoka/autoclip/compare/v1.5.1...v1.5.2 +- [1.5.1]: https://github.com/zhouxiaoka/autoclip/compare/v1.5.0...v1.5.1 +- [1.5.0]: https://github.com/zhouxiaoka/autoclip/compare/v1.4.0...v1.5.0 +- [1.4.0]: https://github.com/zhouxiaoka/autoclip/compare/v1.3.5...v1.4.0 +- [1.3.5]: https://github.com/zhouxiaoka/autoclip/compare/v1.3.4...v1.3.5 +- [1.3.4]: https://github.com/zhouxiaoka/autoclip/compare/v1.3.3...v1.3.4 - [1.3.3]: https://github.com/zhouxiaoka/autoclip/compare/v1.3.2...v1.3.3 - [1.3.2]: https://github.com/zhouxiaoka/autoclip/compare/v1.3.1...v1.3.2 - [1.3.1]: https://github.com/zhouxiaoka/autoclip/compare/v1.3.0...v1.3.1 diff --git a/CLAUDE.md b/CLAUDE.md index 58d103454..4e29f68ac 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,3 +8,6 @@ ## Roadmap 产品长期规划见 `ROADMAP.md`(账号 / 埋点 / 商业化分阶段)。当前阶段与现状见 `HANDOFF.md`。公开社区看板见 `docs/COMMUNITY_BOARD.md`(Discussions 收想法,Issue 只收已确认需求)。 + +## 发版 +所有发版严格按 `RELEASE_CHECKLIST.md`:问题先分级(S1 热修 / S2 进周版 / S3 排计划);常规版每周最多一版;打 tag 只出 Pre-release,Windows + macOS 真机冒烟和观察期通过后,才用 `promote-release.yml` 转正推给所有用户;坏版本用同一 workflow 的 halt 撤回,再发补丁版往前修。不要跳过 Pre-release,不要重打同名 tag。 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 408863c06..bfc11f673 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,313 +1,88 @@ # 贡献指南 -感谢您对AutoClip项目的关注!我们欢迎所有形式的贡献,包括但不限于: +AutoClip 接受故障修复、文档与翻译改进,以及已经确认范围的功能贡献。首次参与可先看 [README](README.md)、[仓库目录说明](docs/REPOSITORY_LAYOUT.md) 和 [当前状态](HANDOFF.md)。个人业余维护,回复时间不固定。 -- 🐛 Bug修复 -- ✨ 新功能开发 -- 📚 文档改进 -- 🧪 测试用例 -- 💡 功能建议 -- 🎨 UI/UX改进 +## 先选择反馈入口 -## 开发环境设置 +- 可复现故障:[Bug 报告](https://github.com/zhouxiaoka/autoclip/issues/new/choose)。提供实际版本或源码提交、平台、相关模型、复现步骤、预期与实际结果,以及脱敏日志。 +- 使用提问:[Q&A](https://github.com/zhouxiaoka/autoclip/discussions/categories/q-a)。先查 [FAQ](docs/FAQ.md) 与 [已知问题](https://github.com/zhouxiaoka/autoclip/issues/96)。 +- 新想法与功能建议:[Ideas](https://github.com/zhouxiaoka/autoclip/discussions/categories/ideas)。说明场景与遇到的问题;较大的功能先讨论范围,再开始实现。 +- 安全问题:按 [SECURITY.md](SECURITY.md) 私下联系,不在公开帖子中披露漏洞细节或凭据。 -### 1. Fork并克隆项目 +Discussions 中的想法不代表开发承诺,确认后的工作才进入 Issue 与路线图,见 [社区看板](docs/COMMUNITY_BOARD.md)。 + +## 准备开发环境 + +Fork 本仓库并克隆你的 Fork,添加上游: ```bash -# Fork 项目到您的 GitHub 账户,再将下面的 your-username 替换为您的用户名 -git clone https://github.com/your-username/autoclip.git cd autoclip - -# 添加上游仓库 git remote add upstream https://github.com/zhouxiaoka/autoclip.git +git fetch upstream +git switch -c fix/your-change upstream/main ``` -### 2. 设置开发环境 +源码 Web 环境以 [STARTUP_GUIDE.md](STARTUP_GUIDE.md) 为准;当前 CI 验证 Python 3.11 和 Node.js 20。Python 依赖统一在根目录 `requirements.txt`,Node 依赖只在 `frontend/`,安装时使用锁定依赖: ```bash -# 创建虚拟环境 python3 -m venv venv -source venv/bin/activate # Linux/macOS -# 或 venv\Scripts\activate # Windows - -# 安装依赖 -pip install -r requirements.txt -cd frontend && npm install && cd .. - -# 配置环境变量 +source venv/bin/activate +python -m pip install -r requirements.txt +(cd frontend && npm ci) cp env.example .env -# 编辑.env文件,填入必要的配置 ``` -### 3. 启动开发服务器 +以上命令适用于 macOS/Linux。Windows 桌面开发与打包按 [BUILD_GUIDE.md](BUILD_GUIDE.md) 和 [scripts/README.md](scripts/README.md) 准备工具链,不要直接套用 POSIX Web 启动脚本。 -```bash -# 启动Redis -brew services start redis # macOS -# 或 sudo systemctl start redis-server # Linux - -# 启动后端 -python -m uvicorn backend.main:app --reload --port 8000 +Web 开发需要 Redis,准备后用 `./start_autoclip.sh`;管理命令和手动启动方式见启动指南。桌面后端由 Tauri 管理,入口是 `backend/desktop_main.py`;容器部署见 [DOCKER.md](DOCKER.md),CLI/MCP 见 [对应指南](docs/CLI_AND_MCP.md)。 -# 启动Celery Worker(必须带 -Q,否则只消费默认 `celery` 队列,流水线任务无人执行) -celery -A backend.core.celery_app worker --loglevel=info -Q celery,processing,video,notification,upload +## 修改与验证 -# 启动前端 -cd frontend && npm run dev -``` +保持改动聚焦,遵循相关模块已有的结构和命名。说明解决了什么问题,以及哪些条件会触发它。UI 修改遵循 [DESIGN.md](DESIGN.md),涉及行为变化时附截图或操作说明。翻译修改遵循 [翻译维护](docs/i18n.md)。 -## 开发流程 - -### 1. 创建功能分支 +完整质量与安装包验收要求见 [测试验收工作流](docs/TESTING_ACCEPTANCE.md)。提交前安装 `requirements-test.txt`,在隔离数据目录运行统一入口;报告写到仓库外,避免把测试记录混入源码: ```bash -# 从main分支创建新分支 -git checkout main -git pull upstream main -git checkout -b feature/your-feature-name +python scripts/quality_gate.py --report /absolute/local/evidence/quality.json ``` -### 2. 开发规范 - -#### 代码风格 +生产 bug 的回归需要证明旧代码失败、修复后通过。CI 全绿还需要最终安装包验收,才能作为可发布版本;局部验证命令如下。 -**Python (后端)** -- 遵循PEP 8规范 -- 使用Black进行代码格式化 -- 使用isort进行导入排序 -- 函数和类需要添加docstring - -```python -def example_function(param1: str, param2: int) -> bool: - """ - 示例函数的文档字符串 - - Args: - param1: 参数1的描述 - param2: 参数2的描述 - - Returns: - 返回值的描述 - """ - pass -``` - -**TypeScript (前端)** -- 使用ESLint和Prettier -- 组件需要添加JSDoc注释 -- 使用函数组件和Hooks -- 遵循Ant Design设计规范 - -```typescript -/** - * 示例组件的描述 - */ -interface ExampleProps { - /** 属性描述 */ - title: string; - /** 可选属性描述 */ - optional?: boolean; -} - -const ExampleComponent: React.FC = ({ title, optional = false }) => { - return
{title}
; -}; -``` - -#### 提交信息规范 - -使用约定式提交格式: - -``` -(): - -[optional body] - -[optional footer(s)] -``` - -**类型 (type):** -- `feat`: 新功能 -- `fix`: Bug修复 -- `docs`: 文档更新 -- `style`: 代码格式调整 -- `refactor`: 代码重构 -- `test`: 测试相关 -- `chore`: 构建过程或辅助工具的变动 - -**示例:** -``` -feat(api): add video download endpoint -fix(ui): resolve upload modal display issue -docs(readme): update installation instructions -``` - -### 3. 测试 - -#### 后端测试 +后端测试从仓库根目录运行: ```bash -# 运行所有测试 -pytest - -# 运行特定测试文件 -pytest tests/test_api.py - -# 生成覆盖率报告 -pytest --cov=backend --cov-report=html +python -m pytest backend/tests -q +# 开发时可先运行与改动相关的现有测试文件 ``` -#### 前端测试 +前端验证使用 `frontend/package.json` 中的真实脚本: ```bash cd frontend - -# 运行测试 -npm test - -# 运行lint检查 npm run lint - -# 类型检查 -npm run type-check -``` - -### 4. 提交代码 - -```bash -# 添加更改 -git add . - -# 提交更改 -git commit -m "feat(api): add video download endpoint" - -# 推送分支 -git push origin feature/your-feature-name +npm run typecheck +npm test +npm run build ``` -### 5. 创建Pull Request - -1. 在GitHub上创建Pull Request -2. 填写PR模板 -3. 确保所有检查通过 -4. 等待代码审查 - -## 代码审查流程 - -### 审查标准 - -- ✅ 代码符合项目规范 -- ✅ 功能正常工作 -- ✅ 测试用例覆盖 -- ✅ 文档已更新 -- ✅ 无安全漏洞 -- ✅ 性能影响评估 - -### 审查反馈 - -- 积极回应审查意见 -- 及时修复问题 -- 保持PR更新 -- 与审查者保持沟通 - -## 问题报告 - -### Bug报告 - -使用GitHub Issues报告Bug时,请包含: - -1. **环境信息** - - 操作系统版本 - - Python版本 - - Node.js版本 - - 浏览器版本 - -2. **重现步骤** - - 详细的操作步骤 - - 预期结果 - - 实际结果 - -3. **错误信息** - - 完整的错误日志 - - 截图或录屏 - -4. **附加信息** - - 相关配置文件 - - 网络环境 - - 其他可能相关的信息 - -### 功能建议 +CI 的后端 lint 使用 Ruff,目前是非阻塞检查;测试及前端检查仍需通过。项目没有统一配置 Black、isort 或 Prettier,不要为无关修改重新格式化整个仓库。修复可复现的代码故障时补充有意义的回归覆盖;纯文档修改检查命令、链接和对应实现即可。 -提出新功能建议时,请说明: +涉及启动、Docker、桌面安装或平台差异时,应验证受影响路线并记录平台与结果。CI 通过不等于安装包已完成界面或真实出片验收,发布必须遵守 [RELEASE_CHECKLIST.md](RELEASE_CHECKLIST.md)。 -1. **功能描述** - - 详细的功能说明 - - 使用场景 - - 预期效果 +## 提交 Pull Request -2. **实现方案** - - 技术实现思路 - - 可能的挑战 - - 替代方案 +先检查改动,再按文件添加;下例用 `git add -p` 选择已有文件的修改,新文件需按实际路径添加。提交标题可使用 `fix:`、`feat:`、`docs:`、`refactor:`、`test:` 或 `chore:`,简述具体变化。推送分支后向本仓库 `main` 发起 PR: -3. **影响评估** - - 对现有功能的影响 - - 性能影响 - - 用户体验影响 - -## 文档贡献 - -### 文档类型 - -- 📖 用户文档 -- 🔧 开发者文档 -- 🚀 部署指南 -- ❓ 常见问题 -- 📝 API文档 - -### 文档规范 - -- 使用Markdown格式 -- 添加目录结构 -- 包含代码示例 -- 保持内容更新 -- 使用清晰的标题层级 - -## 想法放哪里 - -希望 AutoClip 支持什么、你的用法、想要哪个模型,发到 [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions)。 -能复现的故障用 Issue 里的 bug 模板。已经决定要做的需求才会出现在公开路线图上。 -分类、六列和 Agent 的操作见 [社区看板](docs/COMMUNITY_BOARD.md)。 - -## 社区行为准则 - -### 我们的承诺 - -为了营造开放和友好的环境,我们承诺: - -- 尊重所有贡献者 -- 接受建设性批评 -- 关注社区最佳利益 -- 对其他社区成员表示同理心 - -### 不可接受的行为 - -- 使用性暗示的语言或图像 -- 人身攻击或侮辱性评论 -- 公开或私下骚扰 -- 未经许可发布他人私人信息 -- 其他在专业环境中不当的行为 - -## 联系方式 - -个人业余维护,回复时间不固定。请先查看 [常见问题](docs/FAQ.md)。 - -邮箱:[christine_zhouye@163.com](mailto:christine_zhouye@163.com) +```bash +git add -p +git commit -m "fix: describe the problem being resolved" +git push -u origin fix/your-change +``` -## 致谢 +按 [PR 模板](.github/PULL_REQUEST_TEMPLATE.md) 说明问题、最终行为和验证结果;有相关 Issue 时附链接。验证未覆盖的平台或步骤应明确写出,避免把未运行的检查标为通过。不要提交 `.env`、API Key、Cookie、私人素材、运行数据库、模型缓存或构建产物;文件归档规则见 [归档规范](docs/REPOSITORY_ARCHIVE_POLICY.md)。 -感谢所有为AutoClip项目做出贡献的开发者!您的贡献让这个项目变得更好。 +收到审查反馈后在同一 PR 更新。较大的方案调整先在对应讨论中说明,避免把无关改动混在一起。合入源码与正式安装包发布是不同步骤;发布信息以 [Releases](https://github.com/zhouxiaoka/autoclip/releases) 为准。 ---- +## 社区与联系 -**再次感谢您的贡献!** 🎉 +尊重其他参与者,围绕问题和证据讨论;不接受骚扰、人身攻击或公开他人私人信息。一般提问优先使用社区入口,私密联系可发送至 [christine_zhouye@163.com](mailto:christine_zhouye@163.com)。 diff --git a/DESIGN.md b/DESIGN.md index 66cbf5245..ae0745c27 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -138,9 +138,9 @@ sans + serif 混排是高级感来源:衬线只用于**拉丁品牌时刻**( - **Display 字号阶**(web 专用,产品内不用): | 角色 | 字号 | 字重 | 备注 | |------|------|------|------| - | hero h1 | `clamp(40px, 1.6rem+3vw, 60px)` | 500 | 行高 1.12,letter-spacing −.02em;英文允许一个 serif italic 词做点睛,中文一律无衬线 | + | hero h1 | `clamp(44px, 1.6rem+3.6vw, 72px)` | 中 600 / 英 400 | 衬线:拉丁 `Instrument Serif`,中文 `Noto Serif SC`(2026-10-01 起官网标题例外,见决策记录);行高 1.06 | | hero wordmark | 28–40px serif | 400 | 放在 h1 之上,替代 logo 大图 | - | section h2 | `clamp(28px, 1.3rem+1.5vw, 36px)` | 500 | 上方配 11px uppercase eyebrow(`--muted`) | + | section h2 | `clamp(28px, 1.3rem+1.5vw, 36px)` | 中 600 / 英 400 | 同 hero 衬线;上方配 11px uppercase eyebrow(`--muted`)。正文、按钮、产品内一律无衬线 | | lede | 17px | 400 | `--sub`,最大 56ch | | 正文 | 16px | 400 | 产品内为 14–15px | - **节奏**:容器 1120px;区块纵向间距 `clamp(72px, 6vw+40px, 128px)`;区块之间用发丝线分隔,不换底色。 @@ -150,6 +150,17 @@ sans + serif 混排是高级感来源:衬线只用于**拉丁品牌时刻**( - **下载**:两张等高卡(macOS / Windows),mono 版本号 + 体积,首启提示折叠;主 CTA 按 UA 自动切换平台。 - **语言切换**:胶囊分段(中 / EN / 日 / 한),文字不加旗帜图标。 - **深色**:跟随系统 `prefers-color-scheme`,不提供手动切换;缩略图占位在深色下整体压暗而非换色。 +- **成片展示带(Stage)**:官网首页唯一一条全宽深色区块,只用于展示真实成片和包装模板,其余区块保持浅色主体。规格: + - 色值:`--stage-bg #141315` / `--stage-card #1E1C1F` / `--stage-line #2A282B` / 文字沿用深色主题 `--ink` `--sub` `--muted`;系统深色下 `--stage-bg` 再压一档到 `#111012`,保证和页面底色有层次。不用纯黑、不加渐变。 + - 内容:9:16 成片卡横向滚动(圆角 14px、发丝边框),左上 mono 玻璃标签写「平台 · 模板」,右下写时长;标题 14px 两行截断,下方一行 mono 写来源。 + - 动态:卡片进入可视区才加载 8 秒静音循环预览;点击打开带声音的完整成片。`prefers-reduced-motion` 下只显示海报,不自动播放。 + - 色彩:成片本身的配色(7 套内容配色)只出现在成片画面和一行配色样点里,不扩散到 UI 控件;UI 强调色仍只有 `--accent`。 + - 每次只放真实输出,注明原片来源;不放概念图、不放未发布能力的示意。 +- **首页节奏(2026-10-01)**:参考 Granola 的「产品叠在画面上」和区块换底。首屏左文右图:左侧标题与下载,右侧是真实成片画面压暗做底、上面叠 HTML 搭的应用窗口,循环演示「贴链接 → 选平台 → 一键出片 → 计时 → 成片弹出」(`prefers-reduced-motion` 直接显示终态)。区块底色按 `--bg` / `--card`(白带)/ Stage 交替,不新增颜色。 +- **对照区**:「剪辑软件 / AI 对话 / AutoClip」三栏。前两栏是去饱和的示意(时间线、不断追问的对话),第三栏实心墨底 + 一个按钮,表达「一键」;不画竞品界面、不用插画。 +- **步骤叙事**:左侧 sticky 步骤列表(mono 编号,当前步 `--accent`),右侧每步一块面板,内容取自案例库真实数据(候选片段、模板成片、发布包);发布包里没有真实文案时用骨架条,不写假文案。 +- **艺术层(Art)**:官网可用孔版印刷风的艺术素材(`autoclip_intro/assets/art/`,可 AI 生成,提示词随文件记录):剪辑记号、网点光束、胶片拼贴等与剪辑/放映相关的母题。墨色只取 7 套内容配色,纸色暖白或柠檬黄;不出现文字、人物与品牌。只用于首屏拼贴与横幅,上面压 `--bg` / `--card` 卡片承载文字与按钮;不做全页背景、不放在正文后面。 +- **数字证明**:大号数字用 `Instrument Serif`,中文单位拆成 `` 用无衬线,次级说明 14px `--sub`;数据表用 mono 数字 + 发丝线,最新一行用 `--accent` 小圆点标出。数字必须来自实测记录(官网 `data/benchmarks.json`),测试条件写进同区块脚注。阶段耗时用横向堆叠条:灰阶分阶段、只有「挑片段」用 `--accent`。 ## Decisions Log | 日期 | 决策 | 理由 | @@ -157,3 +168,5 @@ sans + serif 混排是高级感来源:衬线只用于**拉丁品牌时刻**( | 2026-05-31 | 初版设计系统 | /design-consultation 产出。方向几经迭代(暖编辑→玩具风→否决)最终锁定 Dia 式「克制专业」,浅/深双主题,去大标题、低密度、单一克制蓝。 | | 2026-09-06 | 官网改版并入同一系统;新增 Web 层规范 | 旧官网为 2025 年 Tailwind 模板风(紫渐变、彩色 icon 网格、旧截图),与产品方向割裂。改版不做第二套视觉,而是把产品 token 原样搬到官网、补 display 字号阶与区块节奏;hero 用代码搭的产品框替代截图,既不会过时,也作为下一轮产品 UI 迭代的对照基准。技术形态保持单文件 `index.html` + `tokens.css`(GitHub Pages 零构建)。 | | 2026-09-07 | 产品内高频屏重做(详情 / 设置 / 卡片);新增 App Layer 原语 | 主产品仍是 AntD 默认件堆出来的「上一代 AI 工具」味:彩色 Tag、卡片套卡片、绿/红实心按钮、emoji 分类。参照 Granola / Raycast / Dia 这类「安静、留白、单强调色、设置页系统化」的桌面工具,把详情页、设置页、切片 / 合集 / 项目卡换成 `frontend/src/ui/` 原生原语;AntD 只留 Select / Form / message。反馈入口按同一规范做进设置页与全部失败态。 | +| 2026-10-01 | 官网首页加入深色「成片展示带」与数字证明区(经维护者同意) | 出片链路 V2 之后,产品最有说服力的是真实成片和速度/成本数字。参考同类视频产品常见的成片墙与模板对比,但保留 Calm Premium 浅色主体:只开一条深色带承载 9:16 成片,让素材自己提供色彩;其余仍是排版与留白。不整站改深色,不引入第二种强调色。 | +| 2026-10-01 | 官网标题改衬线(含中文宋体);新增艺术层与页脚大字标(经维护者同意) | 对标 Granola / Anthropic / OpenAI 官网:衬线大标题 + 纹理插画让克制的版面有温度和格调。AutoClip 是内容工具,画材取自剪辑与放映(剪辑记号、网点、胶片),墨色沿用产品内容配色,既 light up 又不引入第二套品牌色。产品内仍全部无衬线。 | diff --git a/DOCKER.md b/DOCKER.md index d60a1a3fd..78b8d2b44 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -102,6 +102,20 @@ docker compose start 备份含本地视频和可能含密钥的配置,请保存在受控位置。恢复前停止服务、保留当前目录副本,然后恢复数据并核对文件归属;不要直接覆盖唯一一份数据。 +## 兼容脚本 + +根目录脚本仍可用,实际逻辑统一在 `scripts/runtime/docker.sh`: + +```bash +./docker-start.sh # 生产编排,构建后启动 +./docker-start.sh dev # 开发编排 +./docker-status.sh dev # 检查同一开发项目的全部服务 +./docker-stop.sh dev # 停止开发容器,保留数据 +./docker-stop.sh dev --cleanup # 移除开发容器与网络,仍保留绑定数据与命名卷 +``` + +`--no-build` 可用于已有镜像的启动。状态检查在缺失、退出或尚未健康时返回非零值。旧的 `--force` 全局清理入口已移除;脚本不会清理其他项目的容器、镜像或卷。启动成功只表示容器已创建,服务健康应再用状态命令确认。 + ## 更新与停止 备份后更新源码并重建。存在本地改动时先检查 `git status` 并处理改动,不要强制覆盖。 diff --git a/Dockerfile b/Dockerfile index 590ac832d..48077f289 100644 --- a/Dockerfile +++ b/Dockerfile @@ -81,7 +81,7 @@ COPY --from=frontend-builder /app/frontend/dist /app/frontend/dist # 复制项目文件 COPY backend/ ./backend/ COPY scripts/ ./scripts/ -COPY *.sh ./ +COPY init_database.py ./ COPY env.example .env COPY docker-entrypoint.sh ./ diff --git a/Dockerfile.dev b/Dockerfile.dev index f583674ec..e0aa1856c 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -5,6 +5,7 @@ FROM python:3.11-slim ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONPATH=/app +ENV PATH="/app/venv/bin:$PATH" WORKDIR /app @@ -32,7 +33,7 @@ RUN . venv/bin/activate && pip install -r requirements.txt COPY frontend/package*.json ./frontend/ # 安装前端依赖 -RUN cd frontend && npm install && npm run build +RUN cd frontend && npm ci # 复制项目文件 COPY . . @@ -44,7 +45,6 @@ COPY docker-dev-entrypoint.sh ./ RUN mkdir -p data/projects data/uploads data/temp data/output logs # 设置权限 -RUN chmod +x *.sh RUN chmod +x docker-dev-entrypoint.sh # 暴露端口 diff --git a/HANDOFF.md b/HANDOFF.md index 8afb119e8..9fa965804 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,11 +1,62 @@ # AutoClip — 项目状态 / 进度 / 计划 -> 更新:2026-09-23 · **v1.3.3** 发版(项目列表旧枚举、进度轮询、导入崩溃、Whisper 安装/转写/下载)。 -> v1.3.0 及更早需要先手动安装 v1.3.1,之后才能在设置里检查更新。 -> 2026-09-20 的下载快照是 v1.2.1(Windows 1136 / DMG 334)。不要用刚挂上的下载数做平台对比。 +> 更新:2026-10-06。**1.5.5 已正式发布为 latest**(tag `v1.5.5` → `e9aba52e`),包含 1.5.1–1.5.4 的全部修复。负责人豁免了未完成的安装包验收和观察期,出问题往前修;豁免范围和上线后要盯的信号见 [1.5.5 发布记录](docs/RELEASE_1_5_5.md)。1.5.1–1.5.3 保持 Pre-release,`v1.5.4` 标签没有生成 Release。待跟进:#247、#249(Whisper 失败)、#266(Gemini key 保存)已请用户在 1.5.5 上复现。 +> 以下为 2026-10-01 的状态:**1.5.0 已通过 [PR #250](https://github.com/zhouxiaoka/autoclip/pull/250) 合入 main,并正式发布为 latest**;固定 tag `v1.5.0` 指向 `e940f5ae`。桌面与 CLI/MCP 从同一 tag 构建,最终资产见 [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0),应用内更新清单已确认返回 1.5.0。Windows 缺人工界面验收及未完成观察期已在 Release 明确,官网由负责人更新。 +> **验收与同事 CLI / MCP 测试见 [RELEASE_1_5.md](docs/RELEASE_1_5.md)**:竖版选择、片尾开关、字幕修复、完整 headless 出片,以及人物模型漏包 / 长视频队列两个 P1 均已修复并复测。旧候选 wheel 不含最后的长视频修复,同事应以正式 tag 资产为准,同版本候选包须强制重装。 +> **接手 1.5.0 先读 [1.5.0 交接文档](docs/HANDOFF_1_5_FAST_OUTPUT.md)**:现状、负责人决定、迭代过程、代码地图、踩坑和待办都在那里,随进度维护。 +> 下方 2026-09-28 及更早的内容是历史快照。 -AutoClip 是一款 AI 视频切片工具:输入 B站/YouTube 链接或本地视频,自动识别精彩片段、 -生成切片与合集。本文是项目当前状态与近期计划的单一事实来源;长期规划见 `ROADMAP.md`。 +## 当前交付与验证范围 + +- **2026-09-30 仓库运维整理**:核查根目录旧文件的实际引用,保留两种 Docker 启动入口,合并重复管理脚本,移除无引用的 Tauri RC 依赖与旧 Whisper 全局杀进程工具;现行入口及历史文档分界见 [仓库目录说明](docs/REPOSITORY_LAYOUT.md)。 +- **2026-09-30 本地 SenseVoice 增补(PR #244,已随 1.5.0 发布)**:维护者要求接入 #67 后,设置页增加 SenseVoiceSmall 按需准备与选择;保存后由现有转写入口路由,独立 CPU 进程运行 FunASR,不上传音频、不改变 Whisper 默认值。三系统 Python 3.13 的真实 45 秒访谈离线验收通过,均生成 21 条字幕、157 个词级时间戳,最长约 3.36 秒;窗口安装包尚未做这项新增能力的真机验收。Windows 实装组件与模型约 5.8 GB,准备前建议预留 8 GB。详见 [配置与边界](docs/AI_MODEL_CONFIGURATION.md#本地-sensevoice67)。下方“#67 仍调研、先等通用协议”的文字是历史排期;通用插件框架仍是后续工作,本次具体本地转写能力已经实现。 + +- 1.4 已包含统一 Studio 导入→推荐/确认→制作→编辑→导出;默认字幕分析,视觉调用须遵守用户选择与确认边界。未确认不开始正式制作。 +- macOS 原生导入至保存、受控旧版本升级/回退已有证据,见 [RC 验收](docs/RC_ACCEPTANCE_1_4.md) 与 [发布记录](docs/RELEASE_1_4.md)。这些记录不等于第二台全新 Mac 或真实用户数据库迁移验收。 +- Windows 构建已有记录,真机安装/导入/保存仍待验收。多游戏完整观感、事件边界和推广差异化也仍待验收;不承诺广告投放效果。 +- 开发入口包括桌面、Docker、脚本和 CLI/MCP。模型配置/隐私开关、旧项目兼容和正式发布能力继续保留。 + +## 本轮反馈与审查修复(未发布) + +分支:`codex/recent-feedback-fixes`;前一轮反馈修复提交 `485ad01a`,审查记录提交 `511d7b68`。 + +- 时间线支持常见时间戳格式并拒绝倒序/越界区间;相邻短片段先尝试合并,再按原有时长限制过滤。 +- **审查 P1 已修复**:只汇总本次验证成功的时间线块,旧结果文件不再冒充本次成功;字幕校正只使用本次大纲涉及的字幕块。 +- **审查 P2 已修复**:原始缓存与新模型响应共用解析路径。合法缓存恢复为候选;无效缓存明确跳过,不自动触发付费请求。 +- **审查 P2 已修复**:智能导入的状态预留与任务提交共用锁;提交失败恢复已有方案/草稿/成片,首次失败写可重试状态。修改方案提交失败同时恢复数据库偏好,避免 JSON 与数据库不一致。 +- 新增回归覆盖失败后重试、旧块残留、缓存有效/无效、当前 Studio YouTube 分享链接;新增错误提示提供八语翻译。最终验证数量见 [项目审查记录](docs/PROJECT_REVIEW_2026-09-27.md) 的修复验收补充。 + +## YouTube 入口说明与调整方向 + +当前首页使用 `CreativeImport` → `/studio/import` → `jobs.inspect_project`。旧 `BilibiliDownload` 已没有其他组件引用,上轮 URL 正则修复只影响这份保留代码,对 1.4 当前页面没有直接效果。 + +Studio 入口已能接受 HTTPS 的 watch、youtu.be、Shorts、live、移动端及不同查询参数顺序,并显示接口返回的错误。本轮补充的是当前入口的 API 回归,不重复增加旧正则;测试使用本地素材替代下载,不能据此宣称 YouTube 网络下载全部成功。 + +后续应围绕 Studio 补“网站字幕→字幕分析→出片”的真实链路验收,并评估复用旧下载器的字幕处理。登录/Cookies、地区、网络及 yt-dlp 上游失败单独诊断。不可达旧 UI 可在核对依赖后集中清理,不因它无引用就删除仍可能被 API/外部调用的后端入口。 + +## 1.4 埋点与异常监控 + +本轮已实施 Studio 导入/推荐/重试/多目标制作/编辑改写/视觉设置/导出/原生保存与社交发布事件,新增本次部分成功与执行耗时;后台已捕获的异常补 Sentry 安全上报,固定阶段/错误分类标签能通过脱敏白名单。旧用户数据和隐私开关保留。 + +新版 [PostHog Studio 看板](https://us.posthog.com/project/450605/dashboard/2140564) 已建立,生产与 validation 分开;真实隔离应用已验证两平台收到新事件。Sentry 验收错误为 PYTHON-FASTAPI-17,缺模型配置经修复后以 PYTHON-FASTAPI-19 / warning 上报;工程异常与配置警告两个线上视图已保存。代码仍在修复分支,尚未发布;不等于所有正式安装包已验收。完整事件契约、查询、测试和剩余验收见 [Studio 监控实施记录](docs/analytics/STUDIO_MONITORING.md),原始缺口见 [审查记录](docs/TELEMETRY_AUDIT_1_4.md)。 + +## Windows 连接重置修复(待发布) + +针对 Sentry `PYTHON-FASTAPI-3`,已复现 CPython Proactor 的 socket.shutdown 遇到 reset 后跳过关闭与服务器解绑。新增仅用于 Windows 桌面 CPython 3.13 的清理兼容补丁;保留协议/其他异常上报以及异步子进程支持。本地后端 631 项通过,Windows CI 13 项通过(含真实 TCP RST/子进程);修复提交 `c6979acf`。原生安装包仍待冒烟,详细验收与发布前检查见 [修复记录](docs/WINDOWS_CONNECTION_RESET_FIX.md)。九千多次是跨版本累计,不能当成 1.4.0 的故障或用户数。 + +## 9 月 28 日新增反馈(待发布) + +针对 #224,已修复无效 JPEG 封面、本地 Studio 导入漏缩略图、ffprobe 无超时,以及 Windows 后端子进程残留;编辑器新增用户主动生成的兼容预览,保留原片。#225 为 1.3.3 未安装 Whisper 的配置前置条件,现有诊断回归通过。本地后端 639 项、前端 136 项通过;Windows 13 项 IOCP + 2 项进程树测试及桌面编译通过,原生安装包仍待冒烟。修复追加到 PR #221;验证证据、旧版本升级注意事项及尚未复现的用户环境见 [最新反馈排查](docs/FEEDBACK_TRIAGE_2026-09-28.md)。 + +## 下一步 + +1. 审阅并合入本轮修复,按正常发布流程验证安装包,不把分支测试通过当成已发布。 +2. 完成 Studio 在线字幕下载验收、Windows 真机回归与更多真实素材质量评估。 +3. 逐步收敛 Ruff 关键运行错误规则;CI 当前仍允许后端 lint 失败。 + +## 历史快照(截至 2026-09-23 / v1.3.3) + +以下发布版本、入口与待办仅记录当时状态;发生冲突时以上方当前状态为准。 --- @@ -16,7 +67,7 @@ AutoClip 是一款 AI 视频切片工具:输入 B站/YouTube 链接或本地 | 后端 | FastAPI + Celery(桌面模式用本地线程)+ SQLite | `backend/` | | 前端 | React + TypeScript + Ant Design + Vite | `frontend/` | | 桌面壳 | Tauri 2 + Rust | `src-tauri/` | -| LLM | OpenAI 及一切 OpenAI 兼容接口(自定义 base_url)/ Gemini(google-genai) / 通义千问(dashscope) / 硅基流动 / 本地预设 Ollama、LM Studio | `backend/core/llm_providers.py`、`llm_manager.py`、`local_presets.py` | +| LLM | OpenAI 及 OpenAI 兼容接口(自定义 base_url)/ Gemini / Qwen (dashscope) / DeepSeek / Doubao Seed / Kimi / GLM / Grok / 本地预设 Ollama、LM Studio | `backend/core/llm_providers.py`、`llm_manager.py`、`local_presets.py` | | CLI / MCP | `autoclip` 命令行 + MCP server(stdio),不起 FastAPI / Celery 直接跑流水线 | `backend/cli.py`、`mcp_server.py`、`services/local_runner.py` | 四种交付形态:**桌面客户端**(当前包是 v1.3.3 的 macOS arm64 DMG 与 Windows x64 安装包;Windows 包从 v1.2.1 起就有,干净机器上的完整出片仍没有记录)、**Docker 部署**(README 推荐路径)、 @@ -30,7 +81,7 @@ AutoClip 是一款 AI 视频切片工具:输入 B站/YouTube 链接或本地 - **v1.3.3(2026-09-23)**:热修稳定性。升级后旧项目状态不再让列表整页打不开;处理进度在终态和 4xx/5xx 后停止轮询;分类列表缺失时导入入口不崩溃;非 Mac 能装 Whisper;本地转写失败给出可读错误;桌面端下载模型不再被进度条写控制台打断。 - **v1.3.2(2026-09-22)**:同一页发布到 B 站和海外平台、自动封面(失败截帧、不挡投稿)、设置里 B 站 Cookie 提前、应用内更新提示、模型名单可拉取。真实 Upload-Post / B 站试发脚本已进仓库,这台机器上还没有密钥,没跑过真投稿。 - **v1.3.1(2026-09-21)**:八语界面与官网、八语 README、匿名统计 v2、崩溃上报、应用内检查更新。v1.3.0 及更早必须先手动安装这一版。生产构建验收见 `docs/UPDATES_AND_SENTRY.md`:一次前端异常能进 Sentry,且正文被去掉。该记录不代替 Windows 真机和真实视频出片。PostHog 新口径的线上接收也还没单独验收(`docs/ANALYTICS_V2.md`)。 -- **v1.3.0(2026-09-20)**:CLI / MCP、Ollama 与 LM Studio 预设、时长画像与评分兜底、竖屏发布导出、Docker 设置页可保存、失败要写明阶段、通义千问国际站、`min_score` 接到 step3、周更发版脚本。 +- **v1.3.0(2026-09-20)**:CLI / MCP、Ollama 与 LM Studio 预设、时长画像与评分兜底、竖屏发布导出、Docker 设置页可保存、失败要写明阶段、Qwen 国际站、`min_score` 接到 step3、周更发版脚本。 - **v1.2.0(2026-06-03)**:桌面端 DMG 端到端可用(内置便携 Python + 静态 ffmpeg + 按需安装 faster-whisper), `desktop-build.yml` 在 tag 上跑通并自动挂 Release;v1.2.0 DMG 已有 2000+ 下载。 - **PostHog 匿名埋点** + 隐私政策 + 设置页开关(`docs/ANALYTICS.md`、`docs/PRIVACY*.md`)。 @@ -191,7 +242,7 @@ label 体系:默认 9 个 + 新增 `docker` / `windows` / `feature`。**置顶 - [x] CLI / MCP、本地模型预设、时长画像与评分兜底、竖屏发布导出(v1.3.0) - [x] Docker 设置页可保存;浏览器翻译不再把整页打崩(#100,v1.3.0) - [x] 失败要写明阶段和原因;本地上传会自动开始;SQLite 不再因 `StaticPool` 互相回滚(v1.3.0) -- [x] 通义千问国际站(#45);`min_score` 接到 step3;周更发版脚本(v1.3.0) +- [x] Qwen 国际站(#45);`min_score` 接到 step3;周更发版脚本(v1.3.0) ### v1.3.1 之后仍未完成 - [ ] Windows 包稳定后:Intel mac(PBS `x86_64-apple-darwin` + osxexperts intel 静态包,脚本只需改两个变量) diff --git a/README-EN.md b/README-EN.md index 86208472f..fd92951f3 100644 --- a/README-EN.md +++ b/README-EN.md @@ -1,220 +1,364 @@
-AutoClip +AutoClip # AutoClip -**Turn long videos into moments worth sharing.** +### One link. One click. -[简体中文](README.md) · **English** · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md) +Open source, with cutting and rendering on your computer. Paste a link, pick a platform, and get video, cover, and post copy,
+for Douyin, Xiaohongshu, TikTok, Reels, YouTube Shorts, Bilibili, or YouTube.
+The app is free; cloud models charge by usage. Open the editor whenever you want to adjust. -[![GitHub release](https://img.shields.io/github/v/release/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/releases/latest) -[![GitHub stars](https://img.shields.io/github/stars/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/forks) -[![GitHub issues](https://img.shields.io/github/issues/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/issues) -[![License: MIT](https://img.shields.io/github/license/zhouxiaoka/autoclip?style=flat-square)](LICENSE) +

+ GitHub release + GitHub stars + Downloads + License: MIT +

-[Website](https://zhouxiaoka.github.io/autoclip_intro/) · [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Report an issue](https://github.com/zhouxiaoka/autoclip/issues) +AutoClip — GitHub Trending -**Desktop installers: [macOS · Apple Silicon](https://github.com/zhouxiaoka/autoclip/releases/latest) · [Windows · x64](https://github.com/zhouxiaoka/autoclip/releases/latest)** +**[Website](https://zhouxiaoka.github.io/autoclip_intro/)** · **[Download desktop](https://github.com/zhouxiaoka/autoclip/releases/latest)** · [Case library](https://zhouxiaoka.github.io/autoclip_intro/cases/) · [Quick start](#quick-start) · [Docs](#documentation) · [Report an issue](https://github.com/zhouxiaoka/autoclip/issues/new/choose) -[Installation and your first clips](docs/USER_INSTALLATION_GUIDE.en.md) · [Full troubleshooting guide](docs/FAQ.en.md) +[简体中文](README.md) · **English** · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md)
-Since v1.3.1, the app, website and README support Chinese, English, Japanese, Korean, Spanish, Portuguese, Russian and French. Choose a language in the header or follow your system. Your media and generated content keep their original language. +**[1.5.0 is officially released](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)**, with desktop, CLI, and MCP updated together. See the [changelog](CHANGELOG.md) for quick output, caption pagination, speaker framing, and long-video queue fixes. Please upgrade older installations. + +## Real clips + +Click a screenshot or “Play” to watch the full clip. Language labels refer to the output subtitles. Six picks are shown below; expand for ten more. + +### Portrait · interview and full-screen podcast + + + + + + + + +
+Bill Gates — AI测试时竟会装傻?
+Bill Gates
+Interview · Douyin · Chinese
+▶ Play 1:01 · Source +
+AI Experts Debate — We're Driving Toward a Cliff in the Fog
+AI Experts Debate
+Interview · Shorts · English
+▶ Play 1:25 · Source +
+Tony Robbins — 风险极小,回报极大?
+Tony Robbins
+Full-screen podcast · Douyin · Chinese
+▶ Play 1:45 · Source +
+Andrew Garfield × Amy Poehler — I Love Competition—but Hate Fake Casualness
+Andrew Garfield × Amy Poehler
+Full-screen podcast · Shorts · English
+▶ Play 1:01 · Source +
+ +### Landscape · original framing + + + + + + +
+佟丽娅 × 鲁豫 — 舞蹈是我骨子里的东西
+佟丽娅 × 鲁豫
+Original framing · Bilibili · Chinese
+▶ Play 1:41 · Source +
+Sam Altman — AI是文艺复兴,还是工业革命?
+Sam Altman
+Original framing · Bilibili · Chinese
+▶ Play 2:02 · Source +
-AutoClip uses AI to analyze video transcripts, find highlights, write titles, and create clips and collections. Built for interviews, podcasts, courses, and livestream recordings, it offers a desktop app, a Docker web interface, and CLI / MCP access. +
+See 10 more real clips + + + + + + + + + + + + + + + + + + + + +
+Adam Neumann — Success is how you feel one minute before death—full of love, no regret
+Adam Neumann
+Full-screen podcast · TikTok · English
+▶ Play 0:59 · Source +
+小奇 × 鲁豫 — 想证明自己,又怕被注视
+小奇 × 鲁豫
+Interview · Douyin · Chinese
+▶ Play 0:50 · Source +
+郭柯宇 × 鲁豫 — 演员的快感在创作过程 不在结果
+郭柯宇 × 鲁豫
+Interview · Douyin · Chinese
+▶ Play 1:11 · Source +
+Willem Dafoe — Fake teeth made him feel lascivious and instantly became the character
+Willem Dafoe
+Full-screen podcast · TikTok · English
+▶ Play 1:07 · Source +
+TIM × 罗永浩 — 红得快的网红 糊得更快
+TIM × 罗永浩
+Interview · Douyin · Chinese
+▶ Play 1:05 · Source +
+Jensen Huang — AI是五层蛋糕 能源才是底层
+Jensen Huang
+Interview · Xiaohongshu · Chinese
+▶ Play 1:17 · Source +
+Andrej Karpathy — AI还不能当实习生用 因认知能力严重不足
+Andrej Karpathy
+Interview · Douyin · Chinese
+▶ Play 0:43 · Source +
+A20 Pro — 苹果芯片不是拼乐高
+A20 Pro
+Interview · Xiaohongshu · Chinese
+▶ Play 2:00 · Source +
+Sylvester Stallone — 60岁写《洛奇》 是向衰老宣战
+Sylvester Stallone
+Interview · Douyin · Chinese
+▶ Play 1:39 · Source +
+MrBeast — YouTube's first 5 seconds matter more than thumbnails
+MrBeast
+Full-screen podcast · TikTok · English
+▶ Play 1:42 · Source +
-## See the interface +
-![AutoClip v1.3.0 — local video import](docs/images/import-local.jpg) +Find videos, covers and post text in the **[case library →](https://zhouxiaoka.github.io/autoclip_intro/cases/?lang=en)**, and [share your clips](https://github.com/zhouxiaoka/autoclip/discussions/new?category=show-and-tell). Source videos belong to their creators; these clips are shown for demonstration only. -Real v1.3.0 web interface: add a local video in the file import area, with optional SRT subtitles. +## What it does -## Community recognition +### Paste a link, get clips -

- AutoClip — GitHub Trending - AutoClip — Trendshift Python daily ranking - AutoClip — Trendshift daily ranking, all languages -

+Pick a platform to generate within its frame and duration rules. Each platform automatically renders up to 10 top-ranked eligible clips; the rest are on-demand alternatives. Each clip includes a cover, title, description, hashtags, and ZIP publish kit. -These badges are provided by Trendshift. Click to view AutoClip’s recorded achievements. GitHub Trending and Trendshift are separate rankings; badges show recorded achievements, not a live position. +### Packaging is built in -## What you can do +Douyin / Xiaohongshu default to interview style; TikTok / Reels / Shorts default to full-screen podcast style. You can choose either vertical layout without changing the platform’s caption/copy language. Bilibili / YouTube use landscape. Framing follows the speaker and preserves full frames when no person is found. The brand outro is on by default and can be disabled in Settings; copied post text has no AutoClip credit. -| Capability | Details | -| --- | --- | -| Import footage | Use local videos, YouTube or Bilibili links, with optional SRT subtitles. | -| Find highlights | Extract outlines, topic timelines, highlight scores, and clip titles from transcripts. | -| Create clips and collections | Generate clips and suggested collections, then adjust their order manually. | -| Publish (v1.3.2) | After clips are ready, open Publish on a clip. Available in **v1.3.2**. Overseas publishing uses platforms connected on your own Upload-Post account: TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads, Pinterest, Bluesky, Discord, Telegram, and Google Business, as available on that account. Bilibili is one account: paste a Cookie once in Settings. It must include SESSDATA, bili_jct, and DedeUserID. Publish now or on a schedule. Title and description are optional and default to the clip title. Burned-in captions default on, and the ~4s title card defaults on. Visibility defaults to private / self where the platform supports it. AutoClip promises that only for TikTok, YouTube, and Bilibili. You can download without publishing. The project page shows publish history and a calendar, and can cancel a schedule that has not gone out. “Plan this week” fills Monday, Wednesday, and Friday at 09:00 for overseas platforms only, not Bilibili. Vertical accounts render 9:16 without a 60-second cut. Bilibili alone renders landscape. LinkedIn or X alone keeps the original frame. Vertical and Bilibili in the same batch are rendered separately. | -| Auto cover (v1.3.2) | When publishing, a cover can be generated automatically so Bilibili does not reject an empty cover. Default cover and title-card details follow that release’s installer notes. Available in **v1.3.2**. | -| Export for publishing | Use presets for Douyin, Xiaohongshu, YouTube Shorts, and Bilibili, with burned-in subtitles and title cards. | -| Choose your models | Use Qwen, OpenAI-compatible APIs, Gemini, SiliconFlow, or local models through Ollama / LM Studio. | -| Automate your workflow | Orchestrate runs with the CLI or call the same processing pipeline from an MCP client. | +### It stays on your computer + +Cutting, framing, and rendering run locally. Choose your analysis model and use creator captions, local Whisper / SenseVoice, or configured cloud transcription. CLI / MCP share the desktop quick-output pipeline. + +## Time and cost on real sources + +These are measurements from three different sources during development, not a controlled comparison of the same input. Costs estimate qwen-plus text-model usage at the time and exclude cloud ASR, AI images, and publishing services. Your provider’s bill is authoritative. + +| Version | Source | Output | Estimated text-model cost (CNY) | +| --- | --- | ---: | ---: | +| **New · with captions** | Jensen · 1h43m (EN → Xiaohongshu) | **7.5 min / 10 clips** | **¥0.09** | +| New · no captions | TIM × Luo Yonghao · 2h52m (ZH → Douyin) | 29.5 min / 10 clips | ¥0.20 | +| Previous | MrBeast · 2h06m (EN → TikTok) | 65 min | ¥0.64 | + +
+Conditions and records + +1 October 2026, the same Apple Silicon Mac. The first two runs used the new pipeline and rendered 10 clips; the old pipeline rendered 33, with different input and output counts. Jensen used creator captions; TIM used local Whisper base. + +Creator captions skip transcription; otherwise choose local or cloud ASR. Additional platforms and on-demand clips add time and usage. See [measurements and costing](docs/COST_PER_VIDEO.md) (Chinese) for stage records and assumptions. + +
+ +## Choose your models and data flow -> Import video → Subtitles / transcription → AI analysis and scoring → Clips and collections → Export +Cutting and rendering run on your computer. Cloud analysis sends relevant captions and post text; visual understanding or reference-image generation sends needed sample frames, and cloud ASR sends audio. Local analysis and transcription need no corresponding cloud API. Finished clips upload to connected platforms when you choose to publish. Analytics and error reports can be disabled in Settings. See [privacy](docs/PRIVACY.en.md). + + ## Quick start -### 1. Desktop app +| You want to | Use | You need | +| --- | --- | --- | +| Make clips on this computer | **Desktop** | macOS Apple Silicon or Windows x64 | +| Self-host / Linux | **Docker** | Docker and Compose v2 | +| Batch / agents | **CLI / MCP** | Python 3.10+ (3.11 recommended) and FFmpeg | -Download the appropriate installer from [GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases/latest): +### Desktop -| Platform | Installation | -| --- | --- | -| macOS · Apple Silicon | `.dmg` | -| Windows 10 / 11 · x64 | `-setup.exe` | -| Intel Mac / Linux | Use Docker or the CLI below | +1. **Install.** Download from [Releases](https://github.com/zhouxiaoka/autoclip/releases/latest). macOS Apple Silicon: `.dmg`. Windows 10 / 11 x64: `-setup.exe`. Python and FFmpeg are bundled. +2. **Configure a model.** Choose a provider and enter its API key, select an available analysis model, test the connection, and save. For local models, start Ollama / LM Studio and load a model first. +3. **Paste a link, pick a platform.** Start with a captioned interview or podcast and choose a vertical layout. Without captions, prepare Whisper / SenseVoice in Settings or configure cloud transcription. +4. **Review and download.** Check captions, framing, and content completeness, then save the publish kit or connect an account to publish. Generate on-demand alternatives when you need more clips. -Desktop installers include Python and FFmpeg. Check the selected release for available platforms and first-launch instructions. After installation, select a model provider in Settings, test the connection, save, and import a video. +Intel Macs / Linux can use Docker or CLI. See the [installation guide](docs/USER_INSTALLATION_GUIDE.en.md) and [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0) for requirements, first-launch guidance, and acceptance scope. -### 2. Docker / Web +[Full installation guide](docs/USER_INSTALLATION_GUIDE.en.md) · [Troubleshooting](docs/FAQ.en.md) -Requires Docker and Docker Compose v2. Run these commands from the repository root: +**Docker / Web** ```bash git clone https://github.com/zhouxiaoka/autoclip.git cd autoclip -``` - -```bash cp env.example .env -``` - -Before starting, edit `.env`: select `LLM_PROVIDER` and set the matching API key and model name. You can also configure the provider in Settings after startup. - -```bash mkdir -p data logs uploads docker compose up -d --build ``` -Open the [web interface](http://localhost:3000). [API documentation](http://localhost:8000/docs) is available once the backend starts. See the [Docker guide](docs/DOCKER.en.md) for deployment details. +Open the [web UI](http://localhost:3000). [API docs](http://localhost:8000/docs) are available after the backend starts. See the [Docker guide](docs/DOCKER.en.md). -On Linux, if bind-mounted directories cause permission errors, fix ownership of the project data directories with this command, then start the services again: +On Linux, if bind mounts fail on permissions, fix ownership first: ```bash docker compose run --rm --no-deps --user root --entrypoint sh autoclip -c 'chown -R autoclip:autoclip /app/data /app/logs /app/uploads' docker compose up -d ``` -### 3. CLI / MCP +For a LAN IP or custom domain, add the frontend address to `AUTOCLIP_ALLOWED_ORIGINS` in `.env` (comma-separated). -Requires Python 3.10+ (3.11 recommended) and FFmpeg on PATH. The installation example uses a macOS / Linux shell; on Windows PowerShell, activate with `venv\Scripts\Activate.ps1`. Local CLI processing does not require Redis. +**CLI / MCP** + +Requires Python 3.10+ (3.11 recommended), with FFmpeg and FFprobe on PATH; local CLI needs no Redis. Download the [official CLI / MCP ZIP](https://github.com/zhouxiaoka/autoclip/releases/download/v1.5.0/autoclip-1.5.0-cli-mcp.zip), extract it, and run in that directory: ```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt -python -m pip install -e . +python -m pip install --force-reinstall --no-deps autoclip-1.5.0-py3-none-any.whl ``` -Local model example: install and start Ollama, then download a model. Videos without subtitles require `faster-whisper`; the speech model is downloaded on first use. To supply existing subtitles, add `--srt talk.srt`. +Commands above are for macOS / Linux. On Windows, create with `py -m venv venv` and activate with `.\venv\Scripts\Activate.ps1`, then use the same `python -m pip` installation commands. -```bash -ollama pull qwen2.5:7b -python -m pip install faster-whisper -autoclip doctor --provider ollama -autoclip run talk.mp4 --provider ollama --json -``` - -Replace `PROJECT_ID` with the project ID returned by processing to export for Shorts. Start the stdio MCP server with `autoclip mcp`: +Save model settings first: reuse desktop settings, or configure your own data directory from the ZIP’s key-free example. See the [CLI / MCP guide](docs/CLI_AND_MCP.md) (Chinese). `produce` does not use the old `run --provider` override. Supply `--srt` to skip transcription. ```bash -autoclip export PROJECT_ID --preset shorts -autoclip mcp +autoclip --version +autoclip produce talk.mp4 --srt talk.srt --platform douyin --portrait-style podcast --json +autoclip outputs PROJECT_ID --export-kits ``` -In your MCP client, set `command` to the absolute path of `autoclip` in your virtual environment and `args` to `["mcp"]`. See the [CLI / MCP guide](docs/CLI_AND_MCP.md) and [Agent skill](skills/autoclip/SKILL.md) (both in Chinese). +The MCP client starts the server. For standalone debugging, run `autoclip mcp` in a separate terminal; OpenCode users can write client configuration with `autoclip mcp install opencode`. -## Model configuration +Replace `PROJECT_ID` with the project ID returned by production. MCP uses `start_quick_output` / `get_quick_output_status`; set the client’s `command` to the virtualenv’s absolute `autoclip` path and `args` to `["mcp"]`. Legacy `run` / `export` and clipping tools remain available. See [CLI / MCP](docs/CLI_AND_MCP.md) (Chinese), [OpenCode](docs/OPENCODE.en.md), and [Agent skill](skills/autoclip/SKILL.md) (Chinese). -| Option | Configuration | -| --- | --- | -| Cloud models | Select Qwen, an OpenAI-compatible API, Gemini, or SiliconFlow in Settings and enter an API key. Compatible endpoints support a custom Base URL. | -| Ollama | Default endpoint: `http://localhost:11434/v1`; default model: `qwen2.5:7b`. No API key required. | -| LM Studio | Load a model and start Local Server at `http://localhost:1234/v1` by default. Select a model actually served by your instance. | - -Inside Docker, `localhost` refers to the container. To use a model on the host, configure an address reachable from the container; see the CLI / MCP guide. Video cutting runs locally; cloud model analysis sends transcript text to your selected provider. Video and model downloads still need internet access. +## Model setup -## Frequently asked questions +| Option | Setup | +| --- | --- | +| Cloud API | Pick a provider in Settings and enter your API key. OpenAI-compatible services also accept a Base URL. | +| Ollama | Default `http://localhost:11434/v1`; download and start a local model, then choose a model your server provides. No API key. | +| LM Studio | Load a model and start Local Server, default `http://localhost:1234/v1`. | + +Inside Docker, `localhost` is the container. Point at a host address the container can reach. + +[Model setup](docs/MULTI_LLM_PROVIDER_GUIDE.md) (Chinese) · [Local models and containers](docs/CLI_AND_MCP.md) (Chinese) + +## Special thanks ❤️ + + + + + + + + + + +
+ 88API
+ 88API +
+ Thank you to 88API Token Platform for sponsoring AutoClip! It brings together GPT, Claude, Gemini, Grok, DeepSeek, Kimi and GLM for transcript analysis, highlight selection and title generation.
+ 🎨 Media capabilities: The platform offers image, video and audio models, including GPT-Image, Seedance, Veo, MiniMax Hailuo H3, Kling, Whisper and TTS. AutoClip uses compatible analysis, cover-image and transcription APIs.
+ 🏷️ Service and billing: The partner reports overseas corporate operation, live support, invoices and a 1:1 top-up ratio; platform terms apply.
+ 🎁 New-user offer: Receive trial credit to test models through our referral registration link, subject to promotion terms. Setup guide +
+ Infistar
+ Infistar.cc +
+ Thank you to Infistar.cc for sponsoring AutoClip! Its multi-model API service can support long-video transcript analysis, highlight selection, and title generation.
+ ⚙️ Compatible setup: Choose the OpenAI-compatible provider in AutoClip and enter the Base URL, your API key, and an available model.
+ 🧩 Model choice: The partner offers Claude, GPT, Gemini, DeepSeek, and other model families. Choose models that support the compatible endpoint to compare transcript analysis and highlight selection.
+ 🏷️ Pricing and services: According to the partner, selected models cost as little as 1% of official list prices, with RMB billing, invoices, and model authenticity verification. Check the platform for eligible models, current prices, and service terms.
+ 🎁 AutoClip offer: New users can receive $5 in trial credit through our referral registration link, subject to the promotion terms. Setup guide +
+ +## FAQ
Is it free? Do I need an API key? -AutoClip itself stays free and open source under MIT. Cloud providers bill their own model usage and require your API key. Ollama / LM Studio presets need no cloud key, but require model files and suitable hardware. As of **v1.3.2**, overseas publishing needs your own [Upload-Post](https://www.upload-post.com) account. Free and paid tiers, and daily caps for TikTok, YouTube, Instagram, and other platforms, follow Upload-Post’s own pages. They are not AutoClip promises. +The app is free and MIT-licensed. Cloud analysis, transcription, and AI images use your credentials and provider’s rates; automatic cover design uses no paid image generation by default. Ollama / LM Studio need no cloud key but require suitable hardware. Direct publishing needs your own Bilibili or [Upload-Post](https://www.upload-post.com) account.
Are my videos uploaded? -Editing stays on your device. Cloud model analysis sends transcript text to your selected provider. The finished clip leaves the machine only after you click Publish, and only to the platforms you connected. You can also download it without publishing. That Publish page is available in **v1.3.2**. Analytics and error reporting depend on your version and settings; see the privacy notes. +Cutting and rendering run on your computer. Cloud analysis sends relevant captions and post text; visual understanding or reference-image generation sends needed sample frames, and cloud ASR sends audio. Local analysis and transcription need no corresponding cloud API. Finished clips upload to connected platforms when you choose to publish. Analytics and error reports can be disabled in Settings. See [privacy](docs/PRIVACY.en.md).
-Can I use videos without subtitles? +What videos work best? -Yes, after preparing local Whisper components and a speech model. You can also import existing SRT subtitles. Accurate subtitles can reduce transcription time and recognition errors. +Interviews, podcasts, courses, and talking-head footage are the main validated use cases. Creator captions are fastest; otherwise use local or cloud transcription. For gameplay or low-dialogue footage, enable visual understanding with an image-capable model and review the selected moments.
Why were no clips generated? -Check the failed stage: empty subtitles, model connection failures, an overly high score threshold, or FFmpeg/disk problems. You can try reducing the threshold from 0.7 to 0.5, but this does not guarantee clips. +Check the failed stage: captions/transcription, model connection, FFmpeg, disk space, and platform eligibility. YouTube long-form requires complete clips of at least 180 seconds; use Shorts or Bilibili for shorter footage. If it still fails, include your 1.5.0 version, OS, source duration, model, and sanitized logs in [known issues](https://github.com/zhouxiaoka/autoclip/issues/96).
-
-What videos work best? How long does it take? - -Analysis primarily uses transcripts, making interviews, podcasts, lectures, and spoken commentary suitable. Purely visual action or music may work less well. Time depends on duration, hardware, models, and export settings; start with a 3–5 minute clip you provide. - -For a first clip, try [Jackie Dowling | Stanford Energy Fellow](https://www.youtube.com/watch?v=dtmjLzOtx8I) (Stanford ENERGY). 示例·非托管·自担使用权 (example link, not hosted by AutoClip; you are responsible for usage rights). +[Full troubleshooting](docs/FAQ.en.md) · [Known issues](https://github.com/zhouxiaoka/autoclip/issues/96) -Other examples are optional. Dialogue is mostly English; official captions or your own SRT/Whisper are optional. - -- [The State of Startups in 2026](https://www.youtube.com/watch?v=yslXlV2BP_Y) (Y Combinator). 示例·非托管·自担使用权. -- [Sam Altman on Astra, AGI, and the future of OpenAI](https://www.youtube.com/watch?v=VeizK1M7V7E). Sources Podcast, not an OpenAI channel. 示例·非托管·自担使用权. - -
- -[Full troubleshooting guide](docs/FAQ.en.md) · [Known issues](https://github.com/zhouxiaoka/autoclip/issues/96) + ## Documentation -The README is available in eight languages; installation, Docker, and troubleshooting guides are available in English and Chinese; other references below are mainly in Chinese. README translations do not indicate which languages the app interface or transcription models support. - -- [Installation and your first clips](docs/USER_INSTALLATION_GUIDE.en.md) -- [Docker deployment (English)](docs/DOCKER.en.md) -- [CLI, MCP, and local models (Chinese)](docs/CLI_AND_MCP.md) -- [Model providers (Chinese)](docs/MULTI_LLM_PROVIDER_GUIDE.md) -- [FAQ (English)](docs/FAQ.en.md) -- [Contribution guide (Chinese)](CONTRIBUTING.md) -- [Changelog](CHANGELOG.md) -- [Privacy notes (Chinese / English)](docs/PRIVACY.en.md) -- [README translation and badge maintenance (Chinese)](docs/i18n.md) - -## Contribute and connect - -Contributions, feedback, and translation improvements are welcome. For bug reports, include your OS, version, model, reproduction steps, and error logs with sensitive information removed. +| You want | Docs | +| --- | --- | +| Install and first clips | [Installation](docs/USER_INSTALLATION_GUIDE.en.md) | +| Self-host and automation | [Docker](docs/DOCKER.en.md) · [CLI / MCP](docs/CLI_AND_MCP.md) (Chinese) · [Agent skill](skills/autoclip/SKILL.md) (Chinese) · [OpenCode](docs/OPENCODE.en.md) | +| Models and troubleshooting | [Model setup](docs/MULTI_LLM_PROVIDER_GUIDE.md) (Chinese) · [FAQ](docs/FAQ.en.md) | +| Versions, roadmap, privacy | [Changelog](CHANGELOG.md) · [Roadmap](ROADMAP.md) (Chinese) · [Community board](docs/COMMUNITY_BOARD.md) (Chinese) · [Privacy](docs/PRIVACY.en.md) | +| Contribute and translate | [Contributing](CONTRIBUTING.md) (Chinese) · [Translation maintenance](docs/i18n.md) (Chinese) | -Maintained by an individual in their spare time. Response times vary; live support and one-to-one deployment assistance are not provided. Please check the FAQ and known issues before contacting the maintainer. +## Contribute -Ideas, use cases, and model requests belong in [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions). Reproducible bugs use the [issue form](https://github.com/zhouxiaoka/autoclip/issues/new/choose). Board rules: [community board](docs/COMMUNITY_BOARD.md) (Chinese). +Fixes, clip samples, feedback, and translation improvements are welcome. If AutoClip helps you, a star is appreciated. -- [Welcome and categories](https://github.com/zhouxiaoka/autoclip/discussions/127) -- [First-clip Q&A](https://github.com/zhouxiaoka/autoclip/discussions/128) -- [Ideas](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Talk:** [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [First-clip Q&A](https://github.com/zhouxiaoka/autoclip/discussions/128) · [Ideas](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Bugs:** use the [issue form](https://github.com/zhouxiaoka/autoclip/issues/new/choose) with OS, version, model, steps, and redacted logs +- **Partnerships:** [christine_zhouye@163.com](mailto:christine_zhouye@163.com) -- Email: [christine_zhouye@163.com](mailto:christine_zhouye@163.com) +Maintained by one person. Replies are not instant; there is no live support or one-to-one deploy help. -Thanks to FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper, and all contributors. Licensed under the [MIT License](LICENSE). If AutoClip helps you, consider giving the project a star. +![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date) -[![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date)](https://star-history.com/#zhouxiaoka/autoclip&Date) +Thanks to FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper, FunASR, and every contributor. [MIT License](LICENSE). diff --git a/README-ES.md b/README-ES.md index 8b24227c1..012ae03e3 100644 --- a/README-ES.md +++ b/README-ES.md @@ -1,213 +1,360 @@
-AutoClip +AutoClip # AutoClip -**Convierte vídeos largos en momentos que merece la pena compartir.** +### Un enlace. Un clic. -[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · **Español** · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md) +Código abierto, con corte y render en tu ordenador. Pega un enlace, elige plataforma y genera vídeo, portada y texto,
+para Douyin, Xiaohongshu, TikTok, Reels, YouTube Shorts, Bilibili o YouTube.
+La app es gratis; los modelos cloud cobran por uso. Puedes ajustar el resultado en el editor. -[![GitHub release](https://img.shields.io/github/v/release/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/releases/latest) -[![GitHub stars](https://img.shields.io/github/stars/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/forks) -[![GitHub issues](https://img.shields.io/github/issues/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/issues) -[![License: MIT](https://img.shields.io/github/license/zhouxiaoka/autoclip?style=flat-square)](LICENSE) +

+ GitHub release + GitHub stars + Downloads + License: MIT +

-[Sitio web](https://zhouxiaoka.github.io/autoclip_intro/) · [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Informar de un problema](https://github.com/zhouxiaoka/autoclip/issues) +AutoClip — GitHub Trending -**Instaladores de escritorio: [macOS · Apple Silicon](https://github.com/zhouxiaoka/autoclip/releases/latest) · [Windows · x64](https://github.com/zhouxiaoka/autoclip/releases/latest)** +**[Sitio](https://zhouxiaoka.github.io/autoclip_intro/)** · **[Descargar escritorio](https://github.com/zhouxiaoka/autoclip/releases/latest)** · [Casos](https://zhouxiaoka.github.io/autoclip_intro/cases/) · [Inicio rápido](#inicio-rápido) · [Documentación](#documentación) · [Incidencia](https://github.com/zhouxiaoka/autoclip/issues/new/choose) -[Instalación y primeros clips (English)](docs/USER_INSTALLATION_GUIDE.en.md) · [Guía completa de solución de problemas (inglés)](docs/FAQ.en.md) +[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · **Español** · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md)
-Desde v1.3.1, la aplicación, el sitio web y el README admiten chino, inglés, japonés, coreano, español, portugués, ruso y francés. Elige el idioma en la cabecera o sigue el del sistema. Tus archivos y el contenido generado conservan su idioma original. +**[1.5.0 ya está publicado](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)**, con escritorio, CLI y MCP actualizados. El [registro de cambios](CHANGELOG.md) detalla la producción automática, paginación de subtítulos, encuadre y cola de vídeos largos. Actualiza versiones anteriores. + +## Clips reales + +Haz clic en una imagen o en «Reproducir» para ver el clip completo. El idioma indicado es el de los subtítulos del resultado. Mostramos seis ejemplos; despliega la sección para ver otros diez. + +### Vertical · entrevista y pódcast a pantalla completa + + + + + + + + +
+Bill Gates — AI测试时竟会装傻?
+Bill Gates
+Entrevista · Douyin · Chino
+▶ Reproducir 1:01 · Original +
+AI Experts Debate — We're Driving Toward a Cliff in the Fog
+AI Experts Debate
+Entrevista · Shorts · Inglés
+▶ Reproducir 1:25 · Original +
+Tony Robbins — 风险极小,回报极大?
+Tony Robbins
+Pódcast a pantalla completa · Douyin · Chino
+▶ Reproducir 1:45 · Original +
+Andrew Garfield × Amy Poehler — I Love Competition—but Hate Fake Casualness
+Andrew Garfield × Amy Poehler
+Pódcast a pantalla completa · Shorts · Inglés
+▶ Reproducir 1:01 · Original +
+ +### Horizontal · encuadre original + + + + + + +
+佟丽娅 × 鲁豫 — 舞蹈是我骨子里的东西
+佟丽娅 × 鲁豫
+Encuadre original · Bilibili · Chino
+▶ Reproducir 1:41 · Original +
+Sam Altman — AI是文艺复兴,还是工业革命?
+Sam Altman
+Encuadre original · Bilibili · Chino
+▶ Reproducir 2:02 · Original +
-AutoClip utiliza IA para analizar los subtítulos de un vídeo, encontrar momentos destacados, crear títulos y generar clips y recopilaciones. Está pensado para entrevistas, pódcasts, cursos y grabaciones de directos, con una aplicación de escritorio, una interfaz web mediante Docker y acceso por CLI / MCP. +
+Ver otros 10 clips reales + + + + + + + + + + + + + + + + + + + + +
+Adam Neumann — Success is how you feel one minute before death—full of love, no regret
+Adam Neumann
+Pódcast a pantalla completa · TikTok · Inglés
+▶ Reproducir 0:59 · Original +
+小奇 × 鲁豫 — 想证明自己,又怕被注视
+小奇 × 鲁豫
+Entrevista · Douyin · Chino
+▶ Reproducir 0:50 · Original +
+郭柯宇 × 鲁豫 — 演员的快感在创作过程 不在结果
+郭柯宇 × 鲁豫
+Entrevista · Douyin · Chino
+▶ Reproducir 1:11 · Original +
+Willem Dafoe — Fake teeth made him feel lascivious and instantly became the character
+Willem Dafoe
+Pódcast a pantalla completa · TikTok · Inglés
+▶ Reproducir 1:07 · Original +
+TIM × 罗永浩 — 红得快的网红 糊得更快
+TIM × 罗永浩
+Entrevista · Douyin · Chino
+▶ Reproducir 1:05 · Original +
+Jensen Huang — AI是五层蛋糕 能源才是底层
+Jensen Huang
+Entrevista · Xiaohongshu · Chino
+▶ Reproducir 1:17 · Original +
+Andrej Karpathy — AI还不能当实习生用 因认知能力严重不足
+Andrej Karpathy
+Entrevista · Douyin · Chino
+▶ Reproducir 0:43 · Original +
+A20 Pro — 苹果芯片不是拼乐高
+A20 Pro
+Entrevista · Xiaohongshu · Chino
+▶ Reproducir 2:00 · Original +
+Sylvester Stallone — 60岁写《洛奇》 是向衰老宣战
+Sylvester Stallone
+Entrevista · Douyin · Chino
+▶ Reproducir 1:39 · Original +
+MrBeast — YouTube's first 5 seconds matter more than thumbnails
+MrBeast
+Pódcast a pantalla completa · TikTok · Inglés
+▶ Reproducir 1:42 · Original +
-## Vista de la aplicación +
-![AutoClip v1.3.0 — local video import](docs/images/import-local.jpg) +Vídeos, portadas y textos de publicación en la **[biblioteca de ejemplos →](https://zhouxiaoka.github.io/autoclip_intro/cases/?lang=es)**. [Comparte tus clips](https://github.com/zhouxiaoka/autoclip/discussions/new?category=show-and-tell). Los vídeos originales pertenecen a sus autores; estos clips se muestran solo como demostración. -Interfaz web real de v1.3.0: añade un vídeo local en el área de importación, con subtítulos SRT opcionales. +## Qué hace -## Reconocimiento de la comunidad +### Pega un enlace y listo -

- AutoClip — GitHub Trending - AutoClip — Trendshift Python daily ranking - AutoClip — Trendshift daily ranking, all languages -

+Genera según formato y duración de la plataforma. Cada plataforma produce automáticamente hasta 10 clips aptos mejor puntuados; el resto queda bajo demanda. Incluye portada, título, descripción, hashtags y paquete ZIP. -Estas insignias las proporciona Trendshift. Haz clic para consultar los logros registrados de AutoClip. GitHub Trending y Trendshift son clasificaciones distintas; las insignias muestran logros registrados, no una posición en tiempo real. +### El empaquetado va incluido -## Qué puedes hacer +Douyin / Xiaohongshu usan entrevista por defecto; TikTok / Reels / Shorts, pódcast a pantalla completa. Puedes elegir el diseño vertical sin cambiar el idioma de subtítulos y texto de la plataforma. Bilibili / YouTube son horizontales. El encuadre sigue al hablante y conserva escenas sin personas. El cierre de marca está activo por defecto y se desactiva en Ajustes; el texto copiado no lleva firma AutoClip. -| Función | Descripción | -| --- | --- | -| Importar vídeos | Usa archivos locales o enlaces de YouTube y Bilibili, con subtítulos SRT opcionales. | -| Encontrar momentos destacados | Extrae resúmenes, intervalos por tema, puntuaciones y títulos a partir de los subtítulos. | -| Crear clips y recopilaciones | Genera clips y recopilaciones sugeridas, y ajusta su orden manualmente. | -| Publicar (v1.3.2) | Cuando los clips estén listos, abre Publicar en un clip. Disponible en **v1.3.2**. En el extranjero se usan las plataformas conectadas en tu propia cuenta de Upload-Post: TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads, Pinterest, Bluesky, Discord, Telegram y Google Business, según lo que esa cuenta tenga conectado. Bilibili es una sola cuenta: pega una Cookie una vez en Ajustes. Debe incluir SESSDATA, bili_jct y DedeUserID. Puedes publicar ahora o programar. El título y la descripción son opcionales y, si se dejan vacíos, usan el título del clip. Los subtítulos incrustados vienen activados, igual que la tarjeta de título de unos 4 segundos. La visibilidad predeterminada es solo yo / private donde la plataforma lo admite. AutoClip promete eso solo para TikTok, YouTube y Bilibili. También puedes descargar sin publicar. La página del proyecto muestra el historial y el calendario, y permite cancelar una programación que aún no ha salido. «Planear la semana» solo cubre el extranjero: rellena lunes, miércoles y viernes a las 09:00, sin Bilibili. Las cuentas verticales se renderizan en 9:16 sin corte a 60 segundos. Solo Bilibili usa horizontal. Solo LinkedIn o X conserva el encuadre original. Vertical y Bilibili en el mismo envío se renderizan por separado. | -| Portada automática (v1.3.2) | Al publicar se puede generar una portada automáticamente, para que Bilibili no rechace una portada vacía. Los detalles de la portada y la tarjeta de título por defecto siguen las notas de ese instalador. Disponible en **v1.3.2**. | -| Exportar para publicar | Usa ajustes para Douyin, Xiaohongshu, YouTube Shorts y Bilibili, con subtítulos incrustados y tarjetas de título. | -| Elegir modelos | Utiliza Qwen, API compatibles con OpenAI, Gemini, SiliconFlow o modelos locales con Ollama / LM Studio. | -| Automatizar tareas | Organiza ejecuciones con la CLI o llama al mismo flujo de procesamiento desde un cliente MCP. | +### Se queda en tu ordenador + +Corte, encuadre y render son locales. Elige modelo de análisis y usa subtítulos del autor, Whisper / SenseVoice local o transcripción cloud configurada. CLI / MCP comparten el flujo de escritorio. + +## Tiempo y coste con vídeos reales + +Son tres fuentes distintas medidas durante el desarrollo, no una comparación controlada del mismo vídeo. Los costes estiman el uso de texto de qwen-plus de entonces y excluyen ASR cloud, imágenes AI y servicios de publicación. La factura depende del proveedor. + +| Versión | Original | Salida | Coste estimado del modelo de texto (CNY) | +| --- | --- | ---: | ---: | +| **Nueva · con subtítulos** | Jensen · 1h43m (EN → Xiaohongshu) | **7,5 min / 10 clips** | **¥0,09** | +| Nueva · sin subtítulos | TIM × Luo Yonghao · 2h52m (ZH → Douyin) | 29,5 min / 10 clips | ¥0,20 | +| Anterior | MrBeast · 2h06m (EN → TikTok) | 65 min | ¥0,64 | -> Importar vídeo → Subtítulos / transcripción → Análisis y puntuación con IA → Clips y recopilaciones → Exportación +
+Condiciones y registros + +1 de octubre de 2026, el mismo Mac Apple Silicon. Los dos casos nuevos generaron 10 clips; el anterior, 33. Cambian tanto la fuente como la cantidad. Jensen usó subtítulos del autor; TIM, Whisper base local. + +Los subtítulos del autor evitan transcribir. Sin ellos, elige ASR local o cloud. Plataformas y clips adicionales aumentan tiempo y consumo. [Mediciones y cálculo](docs/COST_PER_VIDEO.md) (chino). + +
+ +## Elige modelos y flujo de datos + +Corte y render se realizan en tu ordenador. El análisis cloud envía subtítulos y texto relevante; la comprensión visual o generación con referencias envía fotogramas necesarios, y la transcripción cloud envía audio. El análisis y la transcripción locales no necesitan la API cloud correspondiente. Los clips se suben a plataformas conectadas cuando eliges publicar. Analítica e informes de error se desactivan en Ajustes. [Privacidad](docs/PRIVACY.en.md). ## Inicio rápido -### 1. Aplicación de escritorio +| Quieres | Usa | Necesitas | +| --- | --- | --- | +| Hacer clips en este equipo | **Escritorio** | macOS Apple Silicon o Windows x64 | +| Autohospedar / Linux | **Docker** | Docker y Compose v2 | +| Lotes / agentes | **CLI / MCP** | Python 3.10+ (3.11 recomendado) y FFmpeg | -Descarga el instalador adecuado desde [GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases/latest): +### Escritorio -| Plataforma | Instalación | -| --- | --- | -| macOS · Apple Silicon | `.dmg` | -| Windows 10 / 11 · x64 | `-setup.exe` | -| Intel Mac / Linux | Usa Docker o la CLI, descritos abajo | +1. **Instala.** Desde [Releases](https://github.com/zhouxiaoka/autoclip/releases/latest). macOS Apple Silicon: `.dmg`. Windows 10 / 11 x64: `-setup.exe`. Python y FFmpeg van incluidos. +2. **Configura un modelo.** Elige proveedor e introduce la API Key; selecciona un modelo de análisis disponible, prueba la conexión y guarda. Para modelos locales, carga un modelo e inicia Ollama / LM Studio primero. +3. **Enlace y plataforma.** Empieza con una entrevista o pódcast con subtítulos y elige diseño vertical. Sin subtítulos, prepara Whisper / SenseVoice o configura transcripción cloud en Ajustes. +4. **Revisa y descarga.** Comprueba subtítulos, encuadre y contenido, y guarda el paquete o conecta una cuenta para publicar. Genera alternativas si necesitas más clips. -Los instaladores incluyen Python y FFmpeg. Consulta cada versión para conocer las plataformas disponibles y las instrucciones del primer inicio. Tras instalar, elige un proveedor de modelos en la configuración, prueba la conexión, guarda los cambios e importa un vídeo. +Intel Mac / Linux pueden usar Docker o CLI. Consulta [instalación](docs/USER_INSTALLATION_GUIDE.en.md) y [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0) para requisitos, primer inicio y alcance de validación. -### 2. Docker / Web +[Guía de instalación](docs/USER_INSTALLATION_GUIDE.en.md) · [Problemas](docs/FAQ.en.md) -Necesitas Docker y Docker Compose v2. Ejecuta estos comandos desde la raíz del repositorio: +**Docker / Web** ```bash git clone https://github.com/zhouxiaoka/autoclip.git cd autoclip -``` - -```bash cp env.example .env -``` - -Antes de iniciar, edita `.env`: selecciona `LLM_PROVIDER` e indica la clave de API y el modelo correspondientes. También puedes configurar el proveedor desde la aplicación después del inicio. - -```bash mkdir -p data logs uploads docker compose up -d --build ``` -Abre la [interfaz web](http://localhost:3000). La [documentación de la API](http://localhost:8000/docs) estará disponible cuando arranque el backend. Consulta la [guía de Docker](DOCKER.md) (en chino) para más detalles. +Abre la [UI web](http://localhost:3000). La [API](http://localhost:8000/docs) está al arrancar el backend. [Guía Docker](docs/DOCKER.en.md). -En Linux, si los directorios montados producen errores de permisos, corrige el propietario de los directorios de datos del proyecto con este comando y vuelve a iniciar los servicios: +En Linux, si el montaje falla por permisos, corrige el dueño primero: ```bash docker compose run --rm --no-deps --user root --entrypoint sh autoclip -c 'chown -R autoclip:autoclip /app/data /app/logs /app/uploads' docker compose up -d ``` -### 3. CLI / MCP +Para IP LAN o dominio propio, añade la dirección del frontend a `AUTOCLIP_ALLOWED_ORIGINS` en `.env` (separada por comas). + +**CLI / MCP** -Necesitas Python 3.10 o posterior (se recomienda 3.11) y FFmpeg en el PATH. El ejemplo usa una shell de macOS / Linux; en PowerShell de Windows, activa el entorno con `venv\Scripts\Activate.ps1`. El procesamiento local por CLI no necesita Redis. +Python 3.10+ (3.11 recomendado), FFmpeg y FFprobe en PATH; no hace falta Redis. Descarga el [ZIP oficial CLI / MCP](https://github.com/zhouxiaoka/autoclip/releases/download/v1.5.0/autoclip-1.5.0-cli-mcp.zip), descomprímelo y ejecuta desde ese directorio: ```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt -python -m pip install -e . +python -m pip install --force-reinstall --no-deps autoclip-1.5.0-py3-none-any.whl ``` -Ejemplo con un modelo local: instala e inicia Ollama y descarga un modelo. Los vídeos sin subtítulos requieren `faster-whisper`; el modelo de voz se descarga en el primer uso. Para usar subtítulos existentes, añade `--srt talk.srt`. +Los comandos anteriores son para macOS / Linux. En Windows, crea con `py -m venv venv` y activa con `.\venv\Scripts\Activate.ps1`; después usa los mismos comandos `python -m pip`. -```bash -ollama pull qwen2.5:7b -python -m pip install faster-whisper -autoclip doctor --provider ollama -autoclip run talk.mp4 --provider ollama --json -``` - -Sustituye `PROJECT_ID` por el ID del proyecto devuelto al procesar el vídeo para exportar en formato Shorts. Inicia el servidor MCP por stdio con `autoclip mcp`: +Guarda primero la configuración del modelo: reutiliza la del escritorio o configura tu directorio con el ejemplo sin claves del ZIP. [Guía CLI / MCP](docs/CLI_AND_MCP.md) (chino). `produce` no usa la modificación temporal de `run --provider`. `--srt` evita transcribir. ```bash -autoclip export PROJECT_ID --preset shorts -autoclip mcp +autoclip --version +autoclip produce talk.mp4 --srt talk.srt --platform douyin --portrait-style podcast --json +autoclip outputs PROJECT_ID --export-kits ``` -En el cliente MCP, configura `command` con la ruta absoluta a `autoclip` dentro del entorno virtual y `args` con `["mcp"]`. Consulta la [guía de CLI / MCP](docs/CLI_AND_MCP.md) y la [skill para agentes](skills/autoclip/SKILL.md) (ambas en chino). +El cliente MCP inicia el servidor. Para depurar por separado, ejecuta `autoclip mcp` en otro terminal; OpenCode puede configurarse con `autoclip mcp install opencode`. + +Sustituye `PROJECT_ID` por el ID devuelto. MCP usa `start_quick_output` / `get_quick_output_status`; `command` debe ser la ruta absoluta de `autoclip` en el venv y `args`, `["mcp"]`. Siguen disponibles `run` / `export` y herramientas anteriores. [CLI / MCP](docs/CLI_AND_MCP.md) (chino), [OpenCode](docs/OPENCODE.en.md), [Agent skill](skills/autoclip/SKILL.md) (chino). -## Configuración de modelos +## Modelos | Opción | Configuración | | --- | --- | -| Modelos en la nube | Selecciona Qwen, una API compatible con OpenAI, Gemini o SiliconFlow e introduce la clave de API. Los servicios compatibles permiten personalizar la Base URL. | -| Ollama | Dirección predeterminada: `http://localhost:11434/v1`; modelo: `qwen2.5:7b`. No requiere clave de API. | -| LM Studio | Carga un modelo e inicia Local Server, por defecto en `http://localhost:1234/v1`. Selecciona un modelo disponible en tu servidor. | - -Dentro de Docker, `localhost` apunta al contenedor. Para usar un modelo del equipo anfitrión, configura una dirección accesible desde el contenedor; consulta la guía de CLI / MCP. El corte del vídeo se realiza localmente; el análisis con modelos en la nube envía el texto de los subtítulos al proveedor elegido. La descarga de vídeos y modelos requiere conexión a internet. +| API en la nube | Elige proveedor y API Key. Los compatibles con OpenAI aceptan Base URL. | +| Ollama | Dirección predeterminada `http://localhost:11434/v1`. Descarga e inicia un modelo local y selecciona uno ofrecido por el servidor. Sin API Key. | +| LM Studio | Carga un modelo y arranca Local Server, `http://localhost:1234/v1` por defecto. | + +Dentro de Docker, `localhost` es el contenedor. Usa una dirección del host alcanzable. + +[Modelos](docs/MULTI_LLM_PROVIDER_GUIDE.md) (chino) · [Local y contenedores](docs/CLI_AND_MCP.md) (chino) + +## Agradecimientos ❤️ + + + + + + + + + + +
+ 88API
+ 88API +
+ ¡Gracias a 88API por patrocinar AutoClip! Reúne GPT, Claude, Gemini, Grok, DeepSeek, Kimi y GLM para analizar subtítulos, seleccionar momentos destacados y generar títulos.
+ 🎨 Multimedia: Ofrece modelos de imagen, vídeo y audio como GPT-Image, Seedance, Veo, MiniMax Hailuo H3, Kling, Whisper y TTS. AutoClip utiliza API compatibles de análisis, portadas y transcripción.
+ 🏷️ Servicio y facturación: Según el patrocinador, opera mediante una empresa extranjera y ofrece atención humana, facturas y recargas con proporción 1:1; se aplican las condiciones de la plataforma.
+ 🎁 Nuevos usuarios: Obtén crédito de prueba para evaluar modelos mediante el enlace de referido, según las condiciones de la promoción. Guía de configuración (inglés) +
+ Infistar
+ Infistar.cc +
+ ¡Gracias a Infistar.cc por patrocinar AutoClip! Ofrece una API multimodelo para analizar transcripciones de vídeos largos, seleccionar momentos destacados y generar títulos.
+ ⚙️ Configuración compatible: En AutoClip, elige el proveedor compatible con OpenAI e introduce la Base URL, tu clave API y un modelo disponible.
+ 🧩 Variedad de modelos: El proveedor ofrece Claude, GPT, Gemini, DeepSeek y otras familias. Elige modelos que admitan el endpoint compatible para comparar el análisis de transcripciones y la selección de momentos destacados.
+ 🏷️ Precios y servicios: Según el patrocinador, algunos modelos cuestan desde el 1% del precio oficial, con facturación en RMB, emisión de facturas y verificación de autenticidad del modelo. Consulta en la plataforma los modelos, precios y condiciones vigentes.
+ 🎁 Oferta para AutoClip: Los nuevos usuarios pueden recibir $5 de crédito de prueba al registrarse mediante el enlace de referido, según las condiciones de la promoción. Guía de configuración (inglés) +
## Preguntas frecuentes
-¿Es gratuito? ¿Necesito una clave de API? +¿Es gratis? ¿Necesito una API Key? -AutoClip sigue siendo gratuito y de código abierto bajo MIT. Los proveedores de modelos en la nube cobran por el uso y requieren tu propia clave de API. Ollama / LM Studio no necesitan clave de nube, pero sí modelos y hardware adecuado. Desde **v1.3.2**, publicar en el extranjero requiere tu propia cuenta de [Upload-Post](https://www.upload-post.com). Los planes gratuitos y de pago, y los cupos diarios de TikTok, YouTube, Instagram y otras plataformas, siguen las páginas de Upload-Post. No son promesas de AutoClip. +App gratuita y MIT. Análisis, transcripción e imágenes cloud usan tus credenciales y tarifas del proveedor; la portada automática no usa generación de pago por defecto. Ollama / LM Studio no necesitan clave cloud, pero sí hardware. Publicar requiere tu cuenta Bilibili o [Upload-Post](https://www.upload-post.com).
¿Se suben mis vídeos? -La edición permanece en tu dispositivo. El análisis con modelos en la nube envía el texto de los subtítulos al proveedor elegido. El clip terminado sale del equipo solo después de pulsar Publicar, y solo hacia las plataformas que conectaste. También puedes descargarlo sin publicar. Esa página Publicar está disponible en **v1.3.2**. Las estadísticas y los informes de errores dependen de la versión y los ajustes; consulta las notas de privacidad. +Corte y render se realizan en tu ordenador. El análisis cloud envía subtítulos y texto relevante; la comprensión visual o generación con referencias envía fotogramas necesarios, y la transcripción cloud envía audio. El análisis y la transcripción locales no necesitan la API cloud correspondiente. Los clips se suben a plataformas conectadas cuando eliges publicar. Analítica e informes de error se desactivan en Ajustes. [Privacidad](docs/PRIVACY.en.md).
-¿Puedo usar vídeos sin subtítulos? +¿Qué vídeos funcionan mejor? -Sí, tras preparar los componentes locales de Whisper y un modelo de voz. También puedes importar subtítulos SRT existentes. Unos subtítulos precisos pueden reducir la espera y los errores de transcripción. +Entrevistas, pódcast, cursos y vídeos hablados son los casos más validados. Los subtítulos del autor son más rápidos; si faltan, usa transcripción local/cloud. Para juegos o poco diálogo, activa comprensión visual con un modelo de imágenes y revisa los momentos elegidos.
¿Por qué no se generaron clips? -Revisa la fase que falló: subtítulos vacíos, conexión al modelo, umbral de puntuación demasiado alto o problemas de FFmpeg y disco. Puedes probar a reducir el umbral de 0.7 a 0.5, pero eso no garantiza clips. - -
- -
-¿Qué vídeos funcionan mejor y cuánto tarda? - -El análisis se basa principalmente en los subtítulos: entrevistas, pódcasts, cursos y comentarios hablados son adecuados. La acción visual o la música pueden ofrecer peores resultados. El tiempo depende de la duración, el hardware, el modelo y la exportación; prueba primero con una muestra corta. +Revisa transcripción, conexión del modelo, FFmpeg, disco y reglas de plataforma. YouTube largo exige fragmentos completos de al menos 180 segundos; usa Shorts/Bilibili para fuentes cortas. Si falla, adjunta versión 1.5.0, OS, duración, modelo y logs sin secretos en [problemas conocidos](https://github.com/zhouxiaoka/autoclip/issues/96).
-[Guía completa de solución de problemas (inglés)](docs/FAQ.en.md) · [Problemas conocidos](https://github.com/zhouxiaoka/autoclip/issues/96) +[Solución de problemas](docs/FAQ.en.md) · [Problemas conocidos](https://github.com/zhouxiaoka/autoclip/issues/96) ## Documentación -El README está disponible en ocho idiomas; la mayoría de las guías detalladas están en chino. Los idiomas del README no indican los idiomas que admiten la interfaz o los modelos de transcripción. - -- [Instalación y primeros clips (English)](docs/USER_INSTALLATION_GUIDE.en.md) -- [Despliegue con Docker (chino)](DOCKER.md) -- [CLI, MCP y modelos locales (chino)](docs/CLI_AND_MCP.md) -- [Proveedores de modelos (chino)](docs/MULTI_LLM_PROVIDER_GUIDE.md) -- [Preguntas frecuentes (chino)](docs/FAQ.md) -- [Guía de contribución (chino)](CONTRIBUTING.md) -- [Registro de cambios](CHANGELOG.md) -- [Privacidad (chino / inglés)](docs/PRIVACY.en.md) -- [Traducción del README y mantenimiento de insignias (chino)](docs/i18n.md) - -## Contribuir y contactar - -Agradecemos las correcciones, los comentarios y las mejoras de traducción. Al informar de un fallo, incluye el sistema operativo, la versión, el modelo, los pasos para reproducirlo y los registros de error sin información confidencial. +| Quieres | Docs | +| --- | --- | +| Instalar y primeros clips | [Instalación](docs/USER_INSTALLATION_GUIDE.en.md) | +| Autohospedar y automatizar | [Docker](docs/DOCKER.en.md) · [CLI / MCP](docs/CLI_AND_MCP.md) (chino) · [Agent skill](skills/autoclip/SKILL.md) (chino) · [OpenCode](docs/OPENCODE.en.md) | +| Modelos y fallos | [Modelos](docs/MULTI_LLM_PROVIDER_GUIDE.md) (chino) · [FAQ](docs/FAQ.en.md) | +| Versiones, hoja de ruta, privacidad | [Cambios](CHANGELOG.md) · [Hoja de ruta](ROADMAP.md) (chino) · [Tablero](docs/COMMUNITY_BOARD.md) (chino) · [Privacidad](docs/PRIVACY.en.md) | +| Contribuir y traducir | [Contribuir](CONTRIBUTING.md) (chino) · [Traducciones](docs/i18n.md) (chino) | -Proyecto mantenido por una persona en su tiempo libre. Los tiempos de respuesta varían; no se ofrece asistencia inmediata ni ayuda individual de despliegue. Consulta las preguntas frecuentes y los problemas conocidos antes de escribir. +## Contribuir -Las ideas, los usos y las peticiones de modelos van a [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions). Los fallos reproducibles usan la [plantilla de issue](https://github.com/zhouxiaoka/autoclip/issues/new/choose). Reglas del tablero: [community board](docs/COMMUNITY_BOARD.md) (chino). +Se aceptan arreglos, ejemplos, comentarios y traducciones. Si AutoClip te sirve, un star ayuda. -- [Bienvenida y categorías](https://github.com/zhouxiaoka/autoclip/discussions/127) -- [Preguntas sobre el primer clip](https://github.com/zhouxiaoka/autoclip/discussions/128) -- [Ideas](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Hablar:** [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Primer clip](https://github.com/zhouxiaoka/autoclip/discussions/128) · [Ideas](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Fallos:** [formulario](https://github.com/zhouxiaoka/autoclip/issues/new/choose) con SO, versión, modelo, pasos y registros sin secretos +- **Alianzas:** [christine_zhouye@163.com](mailto:christine_zhouye@163.com) -- Correo electrónico: [christine_zhouye@163.com](mailto:christine_zhouye@163.com) +Lo mantiene una persona. No hay soporte en vivo ni despliegue uno a uno. -Gracias a FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper y a todas las personas que contribuyen. Distribuido bajo la [licencia MIT](LICENSE). Si AutoClip te resulta útil, puedes apoyar el proyecto con una estrella. +![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date) -[![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date)](https://star-history.com/#zhouxiaoka/autoclip&Date) +Gracias a FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper, FunASR y a quien contribuye. [MIT License](LICENSE). diff --git a/README-FR.md b/README-FR.md index e0ccf7a56..8e845412e 100644 --- a/README-FR.md +++ b/README-FR.md @@ -1,213 +1,360 @@
-AutoClip +AutoClip # AutoClip -**Transformez vos longues vidéos en moments à partager.** +### Un lien. Un clic. -[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · **Français** +Open source, avec coupe et rendu sur votre ordinateur. Collez un lien, choisissez la plateforme et obtenez vidéo, couverture et texte,
+pour Douyin, Xiaohongshu, TikTok, Reels, YouTube Shorts, Bilibili ou YouTube.
+L’app est gratuite ; les modèles cloud sont facturés à l’usage. Ajustez dans l’éditeur si besoin. -[![GitHub release](https://img.shields.io/github/v/release/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/releases/latest) -[![GitHub stars](https://img.shields.io/github/stars/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/forks) -[![GitHub issues](https://img.shields.io/github/issues/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/issues) -[![License: MIT](https://img.shields.io/github/license/zhouxiaoka/autoclip?style=flat-square)](LICENSE) +

+ GitHub release + GitHub stars + Downloads + License: MIT +

-[Site du projet](https://zhouxiaoka.github.io/autoclip_intro/) · [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Signaler un problème](https://github.com/zhouxiaoka/autoclip/issues) +AutoClip — GitHub Trending -**Programmes d’installation: [macOS · Apple Silicon](https://github.com/zhouxiaoka/autoclip/releases/latest) · [Windows · x64](https://github.com/zhouxiaoka/autoclip/releases/latest)** +**[Site](https://zhouxiaoka.github.io/autoclip_intro/)** · **[Télécharger le bureau](https://github.com/zhouxiaoka/autoclip/releases/latest)** · [Cas](https://zhouxiaoka.github.io/autoclip_intro/cases/) · [Démarrage](#démarrage) · [Docs](#documentation) · [Signaler](https://github.com/zhouxiaoka/autoclip/issues/new/choose) -[Installation et premiers extraits (English)](docs/USER_INSTALLATION_GUIDE.en.md) · [Guide complet de dépannage (anglais)](docs/FAQ.en.md) +[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · **Français**
-Depuis la v1.3.1, l’application, le site et le README sont disponibles en chinois, anglais, japonais, coréen, espagnol, portugais, russe et français. Choisissez la langue dans l’en-tête ou suivez celle du système. Vos médias et le contenu généré conservent leur langue d’origine. +**[1.5.0 est officiellement disponible](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)**, pour bureau, CLI et MCP. Le [journal des changements](CHANGELOG.md) couvre production automatique, pagination des sous-titres, cadrage et file des vidéos longues. Mettez les anciennes versions à jour. + +## Vrais clips + +Cliquez sur une image ou sur « Lire » pour regarder le clip complet. La langue indiquée est celle des sous-titres du résultat. Six exemples sont affichés ; développez la section pour en voir dix autres. + +### Vertical · entretien et podcast plein écran + + + + + + + + +
+Bill Gates — AI测试时竟会装傻?
+Bill Gates
+Entretien · Douyin · Chinois
+▶ Lire 1:01 · Original +
+AI Experts Debate — We're Driving Toward a Cliff in the Fog
+AI Experts Debate
+Entretien · Shorts · Anglais
+▶ Lire 1:25 · Original +
+Tony Robbins — 风险极小,回报极大?
+Tony Robbins
+Podcast plein écran · Douyin · Chinois
+▶ Lire 1:45 · Original +
+Andrew Garfield × Amy Poehler — I Love Competition—but Hate Fake Casualness
+Andrew Garfield × Amy Poehler
+Podcast plein écran · Shorts · Anglais
+▶ Lire 1:01 · Original +
+ +### Horizontal · cadrage original + + + + + + +
+佟丽娅 × 鲁豫 — 舞蹈是我骨子里的东西
+佟丽娅 × 鲁豫
+Cadrage original · Bilibili · Chinois
+▶ Lire 1:41 · Original +
+Sam Altman — AI是文艺复兴,还是工业革命?
+Sam Altman
+Cadrage original · Bilibili · Chinois
+▶ Lire 2:02 · Original +
-AutoClip utilise l’IA pour analyser les sous-titres, repérer les temps forts, créer des titres et générer automatiquement des extraits et des compilations. Adapté aux entretiens, podcasts, cours et rediffusions de directs, il propose une application de bureau, une interface web via Docker et un accès CLI / MCP. +
+Voir 10 autres clips réels + + + + + + + + + + + + + + + + + + + + +
+Adam Neumann — Success is how you feel one minute before death—full of love, no regret
+Adam Neumann
+Podcast plein écran · TikTok · Anglais
+▶ Lire 0:59 · Original +
+小奇 × 鲁豫 — 想证明自己,又怕被注视
+小奇 × 鲁豫
+Entretien · Douyin · Chinois
+▶ Lire 0:50 · Original +
+郭柯宇 × 鲁豫 — 演员的快感在创作过程 不在结果
+郭柯宇 × 鲁豫
+Entretien · Douyin · Chinois
+▶ Lire 1:11 · Original +
+Willem Dafoe — Fake teeth made him feel lascivious and instantly became the character
+Willem Dafoe
+Podcast plein écran · TikTok · Anglais
+▶ Lire 1:07 · Original +
+TIM × 罗永浩 — 红得快的网红 糊得更快
+TIM × 罗永浩
+Entretien · Douyin · Chinois
+▶ Lire 1:05 · Original +
+Jensen Huang — AI是五层蛋糕 能源才是底层
+Jensen Huang
+Entretien · Xiaohongshu · Chinois
+▶ Lire 1:17 · Original +
+Andrej Karpathy — AI还不能当实习生用 因认知能力严重不足
+Andrej Karpathy
+Entretien · Douyin · Chinois
+▶ Lire 0:43 · Original +
+A20 Pro — 苹果芯片不是拼乐高
+A20 Pro
+Entretien · Xiaohongshu · Chinois
+▶ Lire 2:00 · Original +
+Sylvester Stallone — 60岁写《洛奇》 是向衰老宣战
+Sylvester Stallone
+Entretien · Douyin · Chinois
+▶ Lire 1:39 · Original +
+MrBeast — YouTube's first 5 seconds matter more than thumbnails
+MrBeast
+Podcast plein écran · TikTok · Anglais
+▶ Lire 1:42 · Original +
-## Aperçu de l’interface +
-![AutoClip v1.3.0 — local video import](docs/images/import-local.jpg) +Vidéos, couvertures et textes de publication dans la **[bibliothèque de cas →](https://zhouxiaoka.github.io/autoclip_intro/cases/?lang=fr)**. [Partagez vos clips](https://github.com/zhouxiaoka/autoclip/discussions/new?category=show-and-tell). Les vidéos originales appartiennent à leurs auteurs ; ces clips sont présentés uniquement à titre de démonstration. -Interface web réelle de v1.3.0 : ajoutez une vidéo locale dans la zone d’importation, avec des sous-titres SRT facultatifs. +## Ce que ça fait -## Reconnaissance de la communauté +### Collez un lien, c’est tout -

- AutoClip — GitHub Trending - AutoClip — Trendshift Python daily ranking - AutoClip — Trendshift daily ranking, all languages -

+Produisez au format et à la durée de la plateforme. Chaque plateforme rend automatiquement jusqu’à 10 clips admissibles les mieux classés ; les autres sont à la demande. Couverture, titre, description, hashtags et kit ZIP sont inclus. -Ces badges sont fournis par Trendshift. Cliquez pour consulter les résultats enregistrés d’AutoClip. GitHub Trending et Trendshift sont deux classements distincts ; les badges indiquent des résultats enregistrés, pas une position en temps réel. +### L’habillage est inclus -## Fonctionnalités +Douyin / Xiaohongshu : interview par défaut ; TikTok / Reels / Shorts : podcast plein écran. Choisissez le format vertical sans changer la langue de la plateforme. Bilibili / YouTube restent horizontaux. Le cadrage suit l’intervenant et préserve les scènes sans personne. La fin de marque est active par défaut et désactivable dans Réglages ; le texte copié ne porte pas de signature AutoClip. -| Fonction | Description | -| --- | --- | -| Importer des vidéos | Utilisez des fichiers locaux ou des liens YouTube et Bilibili, avec des sous-titres SRT facultatifs. | -| Repérer les temps forts | Extrayez des plans, des plages temporelles par sujet, des scores et des titres à partir des sous-titres. | -| Créer des extraits et des compilations | Générez des extraits et des compilations suggérées, puis ajustez leur ordre manuellement. | -| Publier (v1.3.2) | Quand les extraits sont prêts, ouvrez Publier sur un extrait. Disponible dans la **v1.3.2**. À l’étranger, ce sont les plateformes reliées à votre propre compte Upload-Post : TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads, Pinterest, Bluesky, Discord, Telegram et Google Business, selon ce que ce compte a relié. Bilibili, c’est un seul compte : collez un Cookie une fois dans les réglages. Il doit contenir SESSDATA, bili_jct et DedeUserID. Publiez maintenant ou planifiez. Le titre et la description sont facultatifs et reprennent le titre de l’extrait s’ils sont vides. Les sous-titres incrustés sont activés par défaut, comme le carton de titre d’environ 4 secondes. La visibilité par défaut est moi seul / private là où la plateforme le prend en charge. AutoClip ne le promet que pour TikTok, YouTube et Bilibili. Vous pouvez aussi télécharger sans publier. La page du projet montre l’historique et le calendrier, et permet d’annuler une planification qui n’est pas encore partie. « Planifier la semaine » ne concerne que l’étranger : lundi, mercredi et vendredi à 09:00, sans Bilibili. Les comptes verticaux sont rendus en 9:16, sans coupe à 60 secondes. Bilibili seul utilise le paysage. LinkedIn ou X seul garde le cadrage d’origine. Vertical et Bilibili dans le même envoi sont rendus séparément. | -| Couverture automatique (v1.3.2) | À la publication, une couverture peut être générée automatiquement, pour que Bilibili ne refuse pas une couverture vide. Le détail de la couverture et du carton de titre par défaut suit la notice de cet installeur. Disponible dans la **v1.3.2**. | -| Exporter pour publier | Profils pour Douyin, Xiaohongshu, YouTube Shorts et Bilibili, avec sous-titres incrustés et cartons de titre. | -| Choisir les modèles | Utilisez Qwen, des API compatibles OpenAI, Gemini, SiliconFlow ou des modèles locaux via Ollama / LM Studio. | -| Automatiser les tâches | Orchestrez les traitements avec la CLI ou appelez le même pipeline depuis un client MCP. | +### Ça reste sur votre machine -> Importer une vidéo → Sous-titres / transcription → Analyse et évaluation par IA → Extraits et compilations → Export +Coupe, cadrage et rendu sont locaux. Choisissez votre modèle et utilisez les sous-titres auteur, Whisper / SenseVoice local ou une transcription cloud configurée. CLI / MCP partagent le flux de production du bureau. -## Démarrage rapide +## Temps et coûts sur de vraies sources -### 1. Application de bureau +Trois sources différentes mesurées pendant le développement, pas un test contrôlé sur la même entrée. Les coûts estiment l’usage texte de qwen-plus à l’époque, hors ASR cloud, images AI et publication. La facture dépend du fournisseur. -Téléchargez le programme d’installation adapté depuis [GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases/latest) : +| Version | Source | Sortie | Coût estimé du modèle texte (CNY) | +| --- | --- | ---: | ---: | +| **Nouvelle · avec sous-titres** | Jensen · 1h43 (EN → Xiaohongshu) | **7,5 min / 10 clips** | **¥0,09** | +| Nouvelle · sans sous-titres | TIM × Luo Yonghao · 2h52 (ZH → Douyin) | 29,5 min / 10 clips | ¥0,20 | +| Ancienne | MrBeast · 2h06 (EN → TikTok) | 65 min | ¥0,64 | -| Plateforme | Installation | -| --- | --- | -| macOS · Apple Silicon | `.dmg` | -| Windows 10 / 11 · x64 | `-setup.exe` | -| Intel Mac / Linux | Utilisez Docker ou la CLI ci-dessous | +
+Conditions et mesures -Les programmes d’installation incluent Python et FFmpeg. Consultez chaque version pour les plateformes disponibles et les consignes de premier lancement. Après l’installation, choisissez un fournisseur de modèles dans les paramètres, testez la connexion, enregistrez et importez une vidéo. +1er octobre 2026, même Mac Apple Silicon. Les deux nouveaux traitements rendent 10 clips ; l’ancien, 33. Sources et quantités diffèrent. Jensen utilise les sous-titres auteur ; TIM, Whisper base local. -### 2. Docker / Web +Les sous-titres auteur évitent la transcription. Sinon, choisissez ASR local ou cloud. Plateformes et clips supplémentaires ajoutent temps et consommation. [Mesures et méthode](docs/COST_PER_VIDEO.md) (chinois). -Docker et Docker Compose v2 sont nécessaires. Exécutez ces commandes à la racine du dépôt : +
-```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip -``` +## Choisissez modèles et flux de données -```bash -cp env.example .env -``` +Coupe et rendu restent sur votre ordinateur. L’analyse cloud envoie les sous-titres et textes utiles ; la compréhension visuelle ou les images avec référence envoie les images échantillonnées nécessaires ; la transcription cloud envoie l’audio. Analyse et transcription locales n’exigent pas l’API cloud correspondante. Les clips sont envoyés aux plateformes liées quand vous choisissez Publier. Statistiques et rapports d’erreur sont désactivables. [Confidentialité](docs/PRIVACY.en.md). + +## Démarrage + +| Vous voulez | Utilisez | Il faut | +| --- | --- | --- | +| Faire des clips sur cet ordi | **Bureau** | macOS Apple Silicon ou Windows x64 | +| Auto-héberger / Linux | **Docker** | Docker et Compose v2 | +| Lots / agents | **CLI / MCP** | Python 3.10+ (3.11 conseillé) et FFmpeg | + +### Bureau + +1. **Installer.** Depuis [Releases](https://github.com/zhouxiaoka/autoclip/releases/latest). macOS Apple Silicon : `.dmg`. Windows 10 / 11 x64 : `-setup.exe`. Python et FFmpeg sont inclus. +2. **Configurer un modèle.** Choisissez le fournisseur et sa clé API, sélectionnez un modèle d’analyse disponible, testez la connexion et enregistrez. En local, chargez un modèle et démarrez Ollama / LM Studio. +3. **Lien et plateforme.** Essayez une interview ou un podcast sous-titré et choisissez le format vertical. Sinon, préparez Whisper / SenseVoice ou configurez la transcription cloud dans Réglages. +4. **Vérifiez et enregistrez.** Contrôlez sous-titres, cadrage et contenu, puis téléchargez le kit ou liez un compte pour publier. Générez les alternatives au besoin. + +Intel Mac / Linux peuvent utiliser Docker ou CLI. Voir le [guide d’installation](docs/USER_INSTALLATION_GUIDE.en.md) et la [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0) pour les prérequis, le premier lancement et le périmètre validé. -Avant de démarrer, modifiez `.env` : choisissez `LLM_PROVIDER` et renseignez la clé API et le nom du modèle correspondants. Vous pouvez aussi configurer le fournisseur dans l’interface après le démarrage. +[Guide d’installation](docs/USER_INSTALLATION_GUIDE.en.md) · [Dépannage](docs/FAQ.en.md) + +**Docker / Web** ```bash +git clone https://github.com/zhouxiaoka/autoclip.git +cd autoclip +cp env.example .env mkdir -p data logs uploads docker compose up -d --build ``` -Ouvrez l’[interface web](http://localhost:3000). La [documentation de l’API](http://localhost:8000/docs) est accessible après le démarrage du backend. Consultez le [guide Docker](DOCKER.md) (en chinois) pour les détails. +Ouvrez l’[UI web](http://localhost:3000). Les [docs API](http://localhost:8000/docs) arrivent après le backend. [Guide Docker](docs/DOCKER.en.md). -Sous Linux, si les répertoires montés provoquent des erreurs de permissions, corrigez le propriétaire des répertoires de données du projet avec cette commande, puis redémarrez les services : +Sous Linux, si le bind échoue pour les droits, corrigez le propriétaire d’abord : ```bash docker compose run --rm --no-deps --user root --entrypoint sh autoclip -c 'chown -R autoclip:autoclip /app/data /app/logs /app/uploads' docker compose up -d ``` -### 3. CLI / MCP +Pour une IP LAN ou un domaine personnalisé, ajoutez l’adresse du frontend à `AUTOCLIP_ALLOWED_ORIGINS` dans `.env` (séparées par des virgules). + +**CLI / MCP** -Python 3.10 ou supérieur (3.11 recommandé) et FFmpeg dans le PATH sont nécessaires. L’exemple utilise un shell macOS / Linux ; sous Windows PowerShell, activez l’environnement avec `venv\Scripts\Activate.ps1`. Le traitement local par CLI ne nécessite pas Redis. +Python 3.10+ (3.11 conseillé), FFmpeg et FFprobe dans PATH ; Redis inutile. Téléchargez le [ZIP officiel CLI / MCP](https://github.com/zhouxiaoka/autoclip/releases/download/v1.5.0/autoclip-1.5.0-cli-mcp.zip), extrayez-le et exécutez dans ce dossier : ```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt -python -m pip install -e . +python -m pip install --force-reinstall --no-deps autoclip-1.5.0-py3-none-any.whl ``` -Exemple avec un modèle local : installez et démarrez Ollama, puis téléchargez un modèle. Les vidéos sans sous-titres nécessitent `faster-whisper` ; le modèle vocal est téléchargé à la première utilisation. Pour fournir des sous-titres existants, ajoutez `--srt talk.srt`. +Ces commandes sont pour macOS / Linux. Sous Windows, créez avec `py -m venv venv` et activez avec `.\venv\Scripts\Activate.ps1`, puis utilisez les mêmes commandes `python -m pip`. -```bash -ollama pull qwen2.5:7b -python -m pip install faster-whisper -autoclip doctor --provider ollama -autoclip run talk.mp4 --provider ollama --json -``` - -Remplacez `PROJECT_ID` par l’identifiant du projet renvoyé après le traitement pour exporter au format Shorts. Lancez le serveur MCP via stdio avec `autoclip mcp` : +Enregistrez les modèles d’abord : partagez les réglages du bureau, ou configurez votre dossier depuis l’exemple sans clé du ZIP. [CLI / MCP](docs/CLI_AND_MCP.md) (chinois). `produce` n’utilise pas la surcharge temporaire de `run --provider`. `--srt` évite la transcription. ```bash -autoclip export PROJECT_ID --preset shorts -autoclip mcp +autoclip --version +autoclip produce talk.mp4 --srt talk.srt --platform douyin --portrait-style podcast --json +autoclip outputs PROJECT_ID --export-kits ``` -Dans votre client MCP, définissez `command` avec le chemin absolu de `autoclip` dans l’environnement virtuel et `args` avec `["mcp"]`. Consultez le [guide CLI / MCP](docs/CLI_AND_MCP.md) et la [skill pour agents](skills/autoclip/SKILL.md) (en chinois). - -## Configuration des modèles +Le client MCP démarre le serveur. Pour un débogage séparé, lancez `autoclip mcp` dans un autre terminal ; OpenCode se configure avec `autoclip mcp install opencode`. -| Option | Configuration | -| --- | --- | -| Modèles cloud | Choisissez Qwen, une API compatible OpenAI, Gemini ou SiliconFlow et saisissez la clé API. Les services compatibles acceptent une Base URL personnalisée. | -| Ollama | Adresse par défaut : `http://localhost:11434/v1` ; modèle : `qwen2.5:7b`. Aucune clé API nécessaire. | -| LM Studio | Chargez un modèle et démarrez Local Server, par défaut sur `http://localhost:1234/v1`. Sélectionnez un modèle disponible sur votre serveur. | +Remplacez `PROJECT_ID` par l’ID obtenu. MCP utilise `start_quick_output` / `get_quick_output_status` ; `command` est le chemin absolu de `autoclip` dans le venv et `args`, `["mcp"]`. Les anciens `run` / `export` et outils restent disponibles. [CLI / MCP](docs/CLI_AND_MCP.md) (chinois), [OpenCode](docs/OPENCODE.en.md), [Agent skill](skills/autoclip/SKILL.md) (chinois). -Dans Docker, `localhost` désigne le conteneur lui-même. Pour utiliser un modèle sur l’hôte, configurez une adresse accessible depuis le conteneur ; voir le guide CLI / MCP. Le découpage vidéo est local, mais l’analyse par un modèle cloud envoie le texte des sous-titres au fournisseur choisi. Le téléchargement des vidéos et modèles nécessite une connexion internet. +## Modèles -## Questions fréquentes +| Option | Réglage | +| --- | --- | +| API cloud | Fournisseur et clé dans Réglages. Les services compatibles OpenAI acceptent une Base URL. | +| Ollama | Adresse par défaut `http://localhost:11434/v1`. Téléchargez et lancez un modèle local, puis choisissez un modèle proposé par le serveur. Sans clé API. | +| LM Studio | Chargez un modèle et lancez Local Server, `http://localhost:1234/v1` par défaut. | + +Dans Docker, `localhost` est le conteneur. Pointez vers une adresse hôte joignable depuis le conteneur. + +[Modèles](docs/MULTI_LLM_PROVIDER_GUIDE.md) (chinois) · [Local et conteneurs](docs/CLI_AND_MCP.md) (chinois) + +## Remerciements ❤️ + + + + + + + + + + +
+ 88API
+ 88API +
+ Merci à 88API de sponsoriser AutoClip ! La plateforme réunit GPT, Claude, Gemini, Grok, DeepSeek, Kimi et GLM pour analyser les transcriptions, sélectionner les temps forts et générer des titres.
+ 🎨 Multimédia : Modèles d’image, de vidéo et d’audio, dont GPT-Image, Seedance, Veo, MiniMax Hailuo H3, Kling, Whisper et TTS. AutoClip utilise les API compatibles d’analyse, de couverture et de transcription.
+ 🏷️ Service et facturation : Le partenaire indique être exploité par une société à l’étranger et proposer une assistance humaine, des factures et un ratio de recharge de 1:1 ; les conditions de la plateforme s’appliquent.
+ 🎁 Nouveaux utilisateurs : Recevez un crédit d’essai pour tester les modèles via le lien de parrainage, selon les conditions de la promotion. Guide de configuration (anglais) +
+ Infistar
+ Infistar.cc +
+ Merci à Infistar.cc de sponsoriser AutoClip ! Son API multimodèle peut servir à analyser les transcriptions de longues vidéos, sélectionner les temps forts et générer des titres.
+ ⚙️ Configuration compatible : Dans AutoClip, choisissez le fournisseur compatible avec OpenAI et renseignez la Base URL, votre clé API et un modèle disponible.
+ 🧩 Choix des modèles : Le partenaire propose Claude, GPT, Gemini, DeepSeek et d’autres familles. Choisissez des modèles prenant en charge le point d’accès compatible pour comparer l’analyse des transcriptions et la sélection des temps forts.
+ 🏷️ Tarifs et services : Selon le partenaire, certains modèles sont proposés dès 1 % du tarif officiel, avec facturation en RMB, émission de factures et vérification de l’authenticité des modèles. Consultez la plateforme pour les modèles, tarifs et conditions en vigueur.
+ 🎁 Offre AutoClip : Les nouveaux utilisateurs peuvent recevoir $5 de crédit d’essai via le lien de parrainage, selon les conditions de la promotion. Guide de configuration (anglais) +
+ +## FAQ
Est-ce gratuit ? Faut-il une clé API ? -AutoClip lui-même reste gratuit et open source sous MIT. Les fournisseurs cloud facturent l’utilisation de leurs modèles et nécessitent votre clé API. Ollama / LM Studio n’exigent pas de clé cloud, mais nécessitent des modèles et un matériel adapté. Depuis la **v1.3.2**, la publication à l’étranger demande votre propre compte [Upload-Post](https://www.upload-post.com). Les offres gratuites et payantes, ainsi que les plafonds quotidiens de TikTok, YouTube, Instagram et des autres plateformes, suivent les pages d’Upload-Post. Ce ne sont pas des promesses d’AutoClip. +App gratuite sous MIT. Analyse, transcription et images cloud utilisent vos identifiants et les tarifs du fournisseur. La couverture automatique n’appelle pas de génération payante par défaut. Ollama / LM Studio demandent du matériel, pas de clé cloud. Publier exige votre compte Bilibili ou [Upload-Post](https://www.upload-post.com).
-Mes vidéos sont-elles envoyées sur un serveur ? +Mes vidéos sont-elles envoyées ? -Le montage reste sur votre appareil. Les modèles cloud reçoivent le texte des sous-titres. L’extrait terminé ne quitte la machine qu’après un clic sur Publier, et seulement vers les plateformes que vous avez reliées. Vous pouvez aussi le télécharger sans publier. Cette page Publier est disponible dans la **v1.3.2**. Les statistiques et rapports d’erreurs dépendent de la version et des paramètres ; consultez les notes de confidentialité. +Coupe et rendu restent sur votre ordinateur. L’analyse cloud envoie les sous-titres et textes utiles ; la compréhension visuelle ou les images avec référence envoie les images échantillonnées nécessaires ; la transcription cloud envoie l’audio. Analyse et transcription locales n’exigent pas l’API cloud correspondante. Les clips sont envoyés aux plateformes liées quand vous choisissez Publier. Statistiques et rapports d’erreur sont désactivables. [Confidentialité](docs/PRIVACY.en.md).
-Puis-je utiliser une vidéo sans sous-titres ? +Quelles vidéos conviennent ? -Oui, après avoir préparé les composants locaux de Whisper et un modèle vocal. Vous pouvez aussi importer un SRT existant. Des sous-titres précis peuvent réduire l’attente et les erreurs de transcription. +Interviews, podcasts, cours et vidéos parlées sont les cas principaux validés. Les sous-titres auteur sont les plus rapides ; sinon, transcription locale/cloud. Pour jeux ou peu de dialogue, activez la compréhension visuelle avec un modèle image et contrôlez les moments sélectionnés.
-Pourquoi aucun extrait n’a-t-il été généré ? +Pourquoi aucun clip ? -Vérifiez l’étape en échec : sous-titres vides, connexion au modèle, seuil trop élevé, FFmpeg ou espace disque. Vous pouvez essayer de réduire le seuil de 0.7 à 0.5, sans garantie de génération. +Vérifiez transcription, modèle, FFmpeg, disque et règles de plateforme. YouTube long exige des clips complets d’au moins 180 secondes ; utilisez Shorts/Bilibili pour les sources courtes. Joignez version 1.5.0, OS, durée, modèle et logs expurgés aux [problèmes connus](https://github.com/zhouxiaoka/autoclip/issues/96).
-
-Quelles vidéos conviennent et combien de temps faut-il ? - -L’analyse repose principalement sur les sous-titres : entretiens, podcasts, cours et commentaires parlés conviennent bien. L’action visuelle ou la musique peuvent donner des résultats limités. Le temps dépend de la durée, du matériel, du modèle et de l’export ; commencez par un court exemple. - -
- -[Guide complet de dépannage (anglais)](docs/FAQ.en.md) · [Problèmes connus](https://github.com/zhouxiaoka/autoclip/issues/96) +[Dépannage](docs/FAQ.en.md) · [Problèmes connus](https://github.com/zhouxiaoka/autoclip/issues/96) ## Documentation -Le README est disponible en huit langues ; les guides détaillés ci-dessous sont principalement en chinois. Les langues du README ne correspondent pas nécessairement aux langues prises en charge par l’interface ou les modèles de transcription. - -- [Installation et premiers extraits (English)](docs/USER_INSTALLATION_GUIDE.en.md) -- [Déploiement Docker (chinois)](DOCKER.md) -- [CLI, MCP et modèles locaux (chinois)](docs/CLI_AND_MCP.md) -- [Fournisseurs de modèles (chinois)](docs/MULTI_LLM_PROVIDER_GUIDE.md) -- [Questions fréquentes (chinois)](docs/FAQ.md) -- [Guide de contribution (chinois)](CONTRIBUTING.md) -- [Historique des modifications](CHANGELOG.md) -- [Confidentialité (chinois / anglais)](docs/PRIVACY.en.md) -- [Traduction du README et entretien des badges (chinois)](docs/i18n.md) - -## Contribuer et nous contacter - -Les corrections, retours et améliorations des traductions sont les bienvenus. Pour signaler un bug, indiquez le système, la version, le modèle, les étapes de reproduction et les journaux d’erreurs sans données sensibles. +| Vous voulez | Docs | +| --- | --- | +| Installer et premiers clips | [Installation](docs/USER_INSTALLATION_GUIDE.en.md) | +| Héberger et automatiser | [Docker](docs/DOCKER.en.md) · [CLI / MCP](docs/CLI_AND_MCP.md) (chinois) · [Agent skill](skills/autoclip/SKILL.md) (chinois) · [OpenCode](docs/OPENCODE.en.md) | +| Modèles et pannes | [Modèles](docs/MULTI_LLM_PROVIDER_GUIDE.md) (chinois) · [FAQ](docs/FAQ.en.md) | +| Versions, feuille de route, confidentialité | [Journal](CHANGELOG.md) · [Feuille de route](ROADMAP.md) (chinois) · [Tableau](docs/COMMUNITY_BOARD.md) (chinois) · [Confidentialité](docs/PRIVACY.en.md) | +| Contribuer et traduire | [Contribuer](CONTRIBUTING.md) (chinois) · [Traductions](docs/i18n.md) (chinois) | -Projet maintenu par une personne sur son temps libre. Les délais de réponse varient ; aucune assistance immédiate ou individuelle au déploiement n’est proposée. Consultez la FAQ et les problèmes connus avant de nous contacter. +## Contribuer -Les idées, les usages et les demandes de modèles vont dans les [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions). Les bugs reproductibles passent par le [formulaire d’issue](https://github.com/zhouxiaoka/autoclip/issues/new/choose). Règles du tableau : [community board](docs/COMMUNITY_BOARD.md) (en chinois). +Correctifs, exemples, retours et traductions sont les bienvenus. Si AutoClip vous aide, une étoile compte. -- [Accueil et catégories](https://github.com/zhouxiaoka/autoclip/discussions/127) -- [Questions sur le premier extrait](https://github.com/zhouxiaoka/autoclip/discussions/128) -- [Idées](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Parler :** [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Premier clip](https://github.com/zhouxiaoka/autoclip/discussions/128) · [Idées](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Bugs :** [formulaire](https://github.com/zhouxiaoka/autoclip/issues/new/choose) avec OS, version, modèle, étapes et journaux sans secrets +- **Partenariats :** [christine_zhouye@163.com](mailto:christine_zhouye@163.com) -- E-mail: [christine_zhouye@163.com](mailto:christine_zhouye@163.com) +Maintenu par une personne. Pas de support live ni de déploiement individuel. -Merci à FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper et à toutes les personnes qui contribuent. Distribué sous [licence MIT](LICENSE). Si AutoClip vous est utile, vous pouvez soutenir le projet avec une étoile. +![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date) -[![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date)](https://star-history.com/#zhouxiaoka/autoclip&Date) +Merci à FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper, FunASR et à tous les contributeurs. [MIT License](LICENSE). diff --git a/README-JA.md b/README-JA.md index ecbf78ee4..f563badfc 100644 --- a/README-JA.md +++ b/README-JA.md @@ -1,213 +1,360 @@
-AutoClip +AutoClip # AutoClip -**長い動画から、シェアしたくなる見どころを。** +### リンク一つ、ワンクリックで完成。 -[简体中文](README.md) · [English](README-EN.md) · **日本語** · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md) +オープンソース。カットと書き出しは手元のパソコンで。リンクと投稿先を選び、動画・表紙・投稿文を生成します。
+抖音・小紅書・TikTok・Reels・YouTube Shorts・Bilibili・YouTube に対応。
+アプリは無料、クラウドモデルは従量課金。調整したいときはエディターを使えます。 -[![GitHub release](https://img.shields.io/github/v/release/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/releases/latest) -[![GitHub stars](https://img.shields.io/github/stars/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/forks) -[![GitHub issues](https://img.shields.io/github/issues/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/issues) -[![License: MIT](https://img.shields.io/github/license/zhouxiaoka/autoclip?style=flat-square)](LICENSE) +

+ GitHub release + GitHub stars + Downloads + License: MIT +

-[公式サイト](https://zhouxiaoka.github.io/autoclip_intro/) · [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [問題を報告](https://github.com/zhouxiaoka/autoclip/issues) +AutoClip — GitHub Trending -**デスクトップ版: [macOS · Apple Silicon](https://github.com/zhouxiaoka/autoclip/releases/latest) · [Windows · x64](https://github.com/zhouxiaoka/autoclip/releases/latest)** +**[公式サイト](https://zhouxiaoka.github.io/autoclip_intro/)** · **[デスクトップ版を入手](https://github.com/zhouxiaoka/autoclip/releases/latest)** · [事例](https://zhouxiaoka.github.io/autoclip_intro/cases/) · [クイックスタート](#クイックスタート) · [ドキュメント](#ドキュメント) · [不具合報告](https://github.com/zhouxiaoka/autoclip/issues/new/choose) -[インストールと最初のクリップ作成 (English)](docs/USER_INSTALLATION_GUIDE.en.md) · [詳しいトラブル対処(英語)](docs/FAQ.en.md) +[简体中文](README.md) · [English](README-EN.md) · **日本語** · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md)
-v1.3.1 から、アプリ、公式サイト、README は中国語・英語・日本語・韓国語・スペイン語・ポルトガル語・ロシア語・フランス語に対応しています。ヘッダーで言語を選択するか、システム設定に従えます。素材と生成内容の言語は変わりません。 +**[1.5.0 正式リリース](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)**。デスクトップ・CLI・MCP を同時更新。自動制作、字幕のページ分割、人物構図、長尺キューの修正は [変更履歴](CHANGELOG.md) を参照し、旧版から更新してください。 + +## 実際の完成クリップ + +画像または「再生」をクリックすると、完成動画を視聴できます。言語表記は動画の字幕言語です。厳選した6本を掲載し、展開するとさらに10本を表示します。 + +### 縦型 · インタビュー形式と全画面ポッドキャスト形式 + + + + + + + + +
+Bill Gates — AI测试时竟会装傻?
+Bill Gates
+インタビュー形式 · Douyin · 中国語
+▶ 再生 1:01 · 元動画 +
+AI Experts Debate — We're Driving Toward a Cliff in the Fog
+AI Experts Debate
+インタビュー形式 · Shorts · 英語
+▶ 再生 1:25 · 元動画 +
+Tony Robbins — 风险极小,回报极大?
+Tony Robbins
+全画面ポッドキャスト形式 · Douyin · 中国語
+▶ 再生 1:45 · 元動画 +
+Andrew Garfield × Amy Poehler — I Love Competition—but Hate Fake Casualness
+Andrew Garfield × Amy Poehler
+全画面ポッドキャスト形式 · Shorts · 英語
+▶ 再生 1:01 · 元動画 +
+ +### 横型 · 元の画角を保持 + + + + + + +
+佟丽娅 × 鲁豫 — 舞蹈是我骨子里的东西
+佟丽娅 × 鲁豫
+元の画角 · Bilibili · 中国語
+▶ 再生 1:41 · 元動画 +
+Sam Altman — AI是文艺复兴,还是工业革命?
+Sam Altman
+元の画角 · Bilibili · 中国語
+▶ 再生 2:02 · 元動画 +
-AutoClip は AI で動画の字幕を分析し、見どころを抽出してタイトルを作成し、クリップやまとめ動画を自動生成します。インタビュー、ポッドキャスト、講義、ライブ配信のアーカイブに適しており、デスクトップアプリ、Docker の Web UI、CLI / MCP から利用できます。 +
+さらに10本の完成動画を見る + + + + + + + + + + + + + + + + + + + + +
+Adam Neumann — Success is how you feel one minute before death—full of love, no regret
+Adam Neumann
+全画面ポッドキャスト形式 · TikTok · 英語
+▶ 再生 0:59 · 元動画 +
+小奇 × 鲁豫 — 想证明自己,又怕被注视
+小奇 × 鲁豫
+インタビュー形式 · Douyin · 中国語
+▶ 再生 0:50 · 元動画 +
+郭柯宇 × 鲁豫 — 演员的快感在创作过程 不在结果
+郭柯宇 × 鲁豫
+インタビュー形式 · Douyin · 中国語
+▶ 再生 1:11 · 元動画 +
+Willem Dafoe — Fake teeth made him feel lascivious and instantly became the character
+Willem Dafoe
+全画面ポッドキャスト形式 · TikTok · 英語
+▶ 再生 1:07 · 元動画 +
+TIM × 罗永浩 — 红得快的网红 糊得更快
+TIM × 罗永浩
+インタビュー形式 · Douyin · 中国語
+▶ 再生 1:05 · 元動画 +
+Jensen Huang — AI是五层蛋糕 能源才是底层
+Jensen Huang
+インタビュー形式 · 小紅書 · 中国語
+▶ 再生 1:17 · 元動画 +
+Andrej Karpathy — AI还不能当实习生用 因认知能力严重不足
+Andrej Karpathy
+インタビュー形式 · Douyin · 中国語
+▶ 再生 0:43 · 元動画 +
+A20 Pro — 苹果芯片不是拼乐高
+A20 Pro
+インタビュー形式 · 小紅書 · 中国語
+▶ 再生 2:00 · 元動画 +
+Sylvester Stallone — 60岁写《洛奇》 是向衰老宣战
+Sylvester Stallone
+インタビュー形式 · Douyin · 中国語
+▶ 再生 1:39 · 元動画 +
+MrBeast — YouTube's first 5 seconds matter more than thumbnails
+MrBeast
+全画面ポッドキャスト形式 · TikTok · 英語
+▶ 再生 1:42 · 元動画 +
-## 画面プレビュー +
-![AutoClip v1.3.0 — local video import](docs/images/import-local.jpg) +動画・カバー・投稿文は **[事例ライブラリ →](https://zhouxiaoka.github.io/autoclip_intro/cases/?lang=ja)** で確認できます。[あなたの動画も投稿してください](https://github.com/zhouxiaoka/autoclip/discussions/new?category=show-and-tell)。元動画の著作権は原作者に帰属し、ここでは効果の紹介のみを目的としています。 -v1.3.0 の実際の Web 画面です。ファイル読み込み欄からローカル動画と任意の SRT 字幕を追加できます。 +## できること -## コミュニティでの実績 +### リンクを貼れば完成 -

- AutoClip — GitHub Trending - AutoClip — Trendshift Python daily ranking - AutoClip — Trendshift daily ranking, all languages -

+投稿先の画角と長さ条件に合わせて生成。各プラットフォームで条件を満たす上位最大 10 本を自動制作し、残りは必要時に生成します。表紙・タイトル・説明・ハッシュタグ・ZIP 投稿パックを同梱。 -以下は Trendshift が提供するバッジです。クリックすると AutoClip の掲載履歴を確認できます。GitHub Trending と Trendshift は別のランキングであり、バッジは記録された実績を示すもので、現在の順位ではありません。 +### 包装は自動 -## 主な機能 +抖音 / 小紅書は対談式、TikTok / Reels / Shorts は全画面ポッドキャスト式が既定。縦型レイアウトは選択でき、字幕と投稿文の言語は投稿先に従います。Bilibili / YouTube は横型。人物を追従し、人物のいない場面は全体を保持。ブランドのアウトロは既定でオン、設定でオフにできます。コピーした投稿文に AutoClip の署名は付きません。 -| 機能 | 説明 | -| --- | --- | -| 動画の読み込み | ローカル動画、YouTube、Bilibili のリンクに対応。SRT 字幕も指定できます。 | -| 見どころの抽出 | 字幕から概要、トピックの時間範囲、評価スコア、クリップのタイトルを生成します。 | -| クリップとまとめ動画 | クリップとおすすめのまとめ動画を生成し、順序を手動で変更できます。 | -| 投稿(v1.3.2) | クリップができたら、そのクリップで投稿を開きます。**v1.3.2** から使えます。海外は、自分の Upload-Post アカウントで接続したプラットフォームです。TikTok、Instagram、YouTube、Facebook、LinkedIn、X、Threads、Pinterest、Bluesky、Discord、Telegram、Google Business のうち、そのアカウントで使えるもの。Bilibili はアカウント 1 つです。設定で Cookie を一度貼り付けます。SESSDATA、bili_jct、DedeUserID が必要です。今すぐ出すか、予約できます。タイトルと説明は任意で、空ならクリップのタイトルです。字幕の焼き込みは既定でオン、約 4 秒のタイトルカードも既定でオン。公開範囲は対応しているプラットフォームでは既定で自分だけです。private / 自分だけを約束するのは TikTok、YouTube、Bilibili だけです。投稿せずに書き出すこともできます。プロジェクトページで投稿履歴とカレンダーを見て、まだ出ていない予約を取り消せます。「今週を組む」は海外だけです。未投稿のクリップを月曜・水曜・金曜の 09:00 に入れ、Bilibili は含みません。縦型アカウントは 9:16 で、60 秒では切りません。Bilibili だけなら横画面。LinkedIn または X だけなら元の画角。縦型と Bilibili を同じ回で出すときは、それぞれ別に書き出します。 | -| 自動カバー(v1.3.2) | 投稿時にカバーを自動生成でき、Bilibili の空カバー却下を避けます。既定のカバーとタイトルカードの詳細は、その版のインストーラー説明に従います。**v1.3.2** から使えます。 | -| 公開用の書き出し | Douyin、小紅書、YouTube Shorts、Bilibili 向けのプリセット、字幕の焼き込み、タイトルカードに対応します。 | -| モデルの選択 | Qwen、OpenAI 互換 API、Gemini、SiliconFlow、Ollama / LM Studio のローカルモデルを利用できます。 | -| 自動化 | CLI で処理を組み合わせたり、MCP クライアントから同じ処理パイプラインを呼び出したりできます。 | +### 手元のパソコンで + +カット・構図・書き出しはローカル。分析モデルを選び、作者字幕、ローカル Whisper / SenseVoice、設定済みクラウド文字起こしを利用できます。CLI / MCP も同じ自動制作パイプラインです。 + +## 実素材での時間と費用 + +開発中の異なる 3 素材の記録であり、同一入力の比較試験ではありません。当時の qwen-plus テキストモデル使用量による推計で、クラウド ASR・AI 画像生成・投稿サービスの費用は含みません。実際の請求は事業者によります。 + +| 版 | 元動画 | 出力 | テキストモデル費用の推計(人民元) | +| --- | --- | ---: | ---: | +| **新版 · 字幕あり** | Jensen · 1h43m(英 → 小紅書) | **7.5 分 / 10 本** | **¥0.09** | +| 新版 · 字幕なし | TIM × 羅永浩 · 2h52m(中 → 抖音) | 29.5 分 / 10 本 | ¥0.20 | +| 旧版 | MrBeast · 2h06m(英 → TikTok) | 65 分 | ¥0.64 | -> 動画を読み込み → 字幕の準備 / 文字起こし → AI 分析・評価 → クリップとまとめ動画を生成 → 書き出し +
+測定条件と記録 + +2026-10-01、同じ Apple Silicon Mac。新パイプラインの 2 件は 10 本、旧版は 33 本を生成し、素材と本数が異なります。Jensen は作者字幕、TIM はローカル Whisper base を使用。 + +作者字幕があれば文字起こしを省略。なければローカルまたはクラウド ASR を選択。投稿先や追加クリップが増えると時間・使用量も増えます。[詳細記録](docs/COST_PER_VIDEO.md)(中国語)。 + +
+ +## モデルとデータの送り先を選ぶ + +カットと書き出しは端末内。クラウド分析には関連字幕と投稿文、映像理解や参照画像生成には必要な抽出フレーム、クラウド文字起こしには音声を送ります。ローカル分析・文字起こしは対応するクラウド API 不要です。投稿を選ぶと完成動画を接続済みの投稿先へ送信。統計・エラー報告は設定で無効にできます。[プライバシー](docs/PRIVACY.en.md)。 ## クイックスタート -### 1. デスクトップ版 +| やりたいこと | おすすめ | 用意するもの | +| --- | --- | --- | +| このパソコンで作る | **デスクトップ** | macOS Apple Silicon または Windows x64 | +| 自前 Web / Linux | **Docker** | Docker と Compose v2 | +| 一括 / Agent | **CLI / MCP** | Python 3.10+(3.11 推奨)と FFmpeg | -[GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases/latest) から、お使いの環境に合うインストーラーをダウンロードしてください。 +### デスクトップ -| プラットフォーム | インストール方法 | -| --- | --- | -| macOS · Apple Silicon | `.dmg` | -| Windows 10 / 11 · x64 | `-setup.exe` | -| Intel Mac / Linux | 以下の Docker または CLI を使用 | +1. **インストール。** [Releases](https://github.com/zhouxiaoka/autoclip/releases/latest) から。macOS Apple Silicon は `.dmg`、Windows 10 / 11 x64 は `-setup.exe`。Python と FFmpeg 同梱。 +2. **モデル設定。** 事業者と API Key を設定し、利用可能な分析モデルを選択、接続テスト後に保存。ローカルは先に Ollama / LM Studio でモデルを読み込み、サービスを起動します。 +3. **リンクと投稿先を選ぶ。** 字幕付きの対談やポッドキャストで試し、縦型レイアウトを選択。字幕がなければ設定で Whisper / SenseVoice を準備、またはクラウド文字起こしを設定。 +4. **確認して保存。** 字幕・構図・内容の完全性を確認し、投稿パックを保存または接続済みアカウントへ投稿。必要に応じて追加候補を生成。 -デスクトップ版には Python と FFmpeg が含まれます。対応環境と初回起動の手順は各リリースをご確認ください。インストール後、設定でモデルプロバイダーを選び、接続をテストして保存してから動画を読み込みます。 +Intel Mac / Linux は Docker または CLI を利用できます。必要環境・初回起動・検証範囲は [インストールガイド](docs/USER_INSTALLATION_GUIDE.en.md) と [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0) を参照。 -### 2. Docker / Web +[インストールガイド](docs/USER_INSTALLATION_GUIDE.en.md) · [トラブルシュート](docs/FAQ.en.md) -Docker と Docker Compose v2 が必要です。リポジトリのルートで実行します。 +**Docker / Web** ```bash git clone https://github.com/zhouxiaoka/autoclip.git cd autoclip -``` - -```bash cp env.example .env -``` - -起動前に `.env` を編集し、`LLM_PROVIDER`、対応する API キー、モデル名を設定してください。起動後に設定画面から変更することもできます。 - -```bash mkdir -p data logs uploads docker compose up -d --build ``` -[Web UI](http://localhost:3000) を開きます。バックエンド起動後は [API ドキュメント](http://localhost:8000/docs) も利用できます。詳細は [Docker ガイド](DOCKER.md)(中国語)を参照してください。 +[Web UI](http://localhost:3000) を開く。[API ドキュメント](http://localhost:8000/docs) はバックエンド起動後。[Docker ガイド](docs/DOCKER.en.md)。 -Linux でバインドマウントしたディレクトリの権限エラーが出る場合は、次のコマンドでプロジェクトのデータディレクトリの所有者を修正し、サービスを再起動してください。 +Linux でバインドマウントの権限エラーが出たら、先に所有者を直します。 ```bash docker compose run --rm --no-deps --user root --entrypoint sh autoclip -c 'chown -R autoclip:autoclip /app/data /app/logs /app/uploads' docker compose up -d ``` -### 3. CLI / MCP +LAN IP や独自ドメインから開く場合、`.env` の `AUTOCLIP_ALLOWED_ORIGINS` にフロントエンドの URL をカンマ区切りで追加。 + +**CLI / MCP** -Python 3.10 以上(3.11 推奨)と PATH 上の FFmpeg が必要です。以下は macOS / Linux 用です。Windows PowerShell では `venv\Scripts\Activate.ps1` で仮想環境を有効化します。CLI のローカル処理に Redis は不要です。 +Python 3.10+(3.11 推奨)、PATH 上の FFmpeg と FFprobe が必要。Redis は不要です。[正式 CLI / MCP ZIP](https://github.com/zhouxiaoka/autoclip/releases/download/v1.5.0/autoclip-1.5.0-cli-mcp.zip) を解凍し、そのディレクトリで実行: ```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt -python -m pip install -e . +python -m pip install --force-reinstall --no-deps autoclip-1.5.0-py3-none-any.whl ``` -ローカルモデルの例:Ollama をインストールして起動し、モデルをダウンロードします。字幕のない動画には `faster-whisper` が必要で、初回の文字起こし時に音声モデルをダウンロードします。既存の字幕を使う場合は `--srt talk.srt` を追加します。 +上記は macOS / Linux 用。Windows は `py -m venv venv` で作成し、`.\venv\Scripts\Activate.ps1` で有効化。その後は同じ `python -m pip` コマンドでインストールします。 -```bash -ollama pull qwen2.5:7b -python -m pip install faster-whisper -autoclip doctor --provider ollama -autoclip run talk.mp4 --provider ollama --json -``` - -`PROJECT_ID` を処理結果のプロジェクト ID に置き換えると Shorts 形式で書き出せます。`autoclip mcp` は stdio MCP サーバーを起動します。 +先にモデル設定を保存。デスクトップ設定を共有、または ZIP の Key 無しサンプルで専用データディレクトリを設定。[CLI / MCP](docs/CLI_AND_MCP.md)(中国語)。`produce` は旧 `run --provider` の一時指定を使いません。`--srt` で文字起こしを省略。 ```bash -autoclip export PROJECT_ID --preset shorts -autoclip mcp +autoclip --version +autoclip produce talk.mp4 --srt talk.srt --platform douyin --portrait-style podcast --json +autoclip outputs PROJECT_ID --export-kits ``` -MCP クライアントの `command` に仮想環境内の `autoclip` の絶対パス、`args` に `["mcp"]` を設定します。[CLI / MCP ガイド](docs/CLI_AND_MCP.md)と [Agent skill](skills/autoclip/SKILL.md)(中国語)を参照してください。 +MCP サーバーはクライアントが起動します。単独の確認は別の端末で `autoclip mcp`。OpenCode の設定は `autoclip mcp install opencode` で作成できます。 + +`PROJECT_ID` は制作結果の ID に置換。MCP は `start_quick_output` / `get_quick_output_status` を使用。クライアントの `command` は仮想環境の `autoclip` 絶対パス、`args` は `["mcp"]`。旧 `run` / `export` と切片ツールも利用可能。[CLI / MCP](docs/CLI_AND_MCP.md)(中国語)・[OpenCode](docs/OPENCODE.en.md)・[Agent skill](skills/autoclip/SKILL.md)(中国語)。 ## モデル設定 -| 方式 | 設定 | +| 方法 | 設定 | | --- | --- | -| クラウドモデル | 設定で Qwen、OpenAI 互換 API、Gemini、SiliconFlow を選び、API キーを入力します。互換 API は Base URL を変更できます。 | -| Ollama | 既定のアドレスは `http://localhost:11434/v1`、モデルは `qwen2.5:7b`。API キーは不要です。 | -| LM Studio | モデルを読み込み、Local Server を起動します。既定のアドレスは `http://localhost:1234/v1`。サーバーで提供中のモデルを選びます。 | - -Docker 内の `localhost` はコンテナ自身を指します。ホストのモデルを使う場合は、コンテナから接続できるアドレスを設定してください。詳細は CLI / MCP ガイドにあります。動画の切り出しはローカルで行いますが、クラウドモデルによる分析では字幕テキストを選択したプロバイダーに送信します。動画やモデルのダウンロードにはネット接続が必要です。 +| クラウド API | 設定で事業者を選び API Key。OpenAI 互換は Base URL も可。 | +| Ollama | 既定 `http://localhost:11434/v1`。ローカルモデルを取得・起動し、サービスが提供するモデルを選択。Key 不要。 | +| LM Studio | モデルを読み Local Server を起動。既定 `http://localhost:1234/v1`。 | + +Docker 内の `localhost` はコンテナ自身です。ホストのモデルにはコンテナから届く住所を指定。 + +[モデル設定](docs/MULTI_LLM_PROVIDER_GUIDE.md)(中国語) · [ローカルとコンテナ](docs/CLI_AND_MCP.md)(中国語) + +## スポンサーへの感謝 ❤️ + + + + + + + + + + +
+ 88API
+ 88API +
+ 88API Tokenプラットフォーム のご支援に感謝します!GPT、Claude、Gemini、Grok、DeepSeek、Kimi、GLM を集約し、字幕分析・見どころ選定・タイトル生成に活用できます。
+ 🎨 マルチメディア:GPT-Image、Seedance、Veo、MiniMax Hailuo H3、Kling、Whisper、TTS などの画像・動画・音声モデルを提供。AutoClip は対応する分析・カバー画像生成・文字起こし API を利用できます。
+ 🏷️ サービスと決済:提携先によると海外法人が運営し、有人サポート・請求書・1:1 のチャージ比率を提供。条件はプラットフォームをご確認ください。
+ 🎁 新規登録特典:専用紹介リンクから登録するとモデル検証用の体験クレジットを受け取れます。適用条件はキャンペーンページをご確認ください。 設定ガイド(英語) +
+ Infistar
+ Infistar.cc +
+ AutoClip を支援する Infistar.cc に感謝します!長い動画の字幕分析、見どころの選定、タイトル生成に利用できる複数モデルの API サービスです。
+ ⚙️ 互換 API で設定:AutoClip で OpenAI 互換の提供元を選び、Base URL、API キー、利用可能なモデルを入力します。
+ 🧩 モデルを選択:提供元は Claude、GPT、Gemini、DeepSeek などを取り扱っています。互換エンドポイントに対応するモデルで、字幕分析や見どころ選定の結果を比較できます。
+ 🏷️ 料金とサービス:提供元の案内では、一部モデルは公式定価の 1% から利用でき、人民元決済、請求書発行、モデルの真正性確認に対応しています。対象モデル、料金、条件は提供元のページをご確認ください。
+ 🎁 AutoClip 限定特典:新規ユーザーは専用紹介リンクから登録すると $5 のお試しクレジットを受け取れます。適用条件はキャンペーンページをご確認ください。 設定ガイド(英語) +
## よくある質問
-有料ですか?API キーは必要ですか? - -AutoClip 本体は引き続き無料で、MIT ライセンスのオープンソースです。クラウドモデルは各社の利用料金がかかり、自分の API キーが必要です。Ollama / LM Studio はクラウドのキー不要ですが、モデルと対応するハードウェアが必要です。**v1.3.2** から、海外への投稿に自分の [Upload-Post](https://www.upload-post.com) アカウントが必要です。無料枠、有料枠、TikTok、YouTube、Instagram などの日次上限は Upload-Post 自身のページに従います。AutoClip の約束ではありません。 - -
- -
-動画はアップロードされますか? +有料ですか。API Key は必要ですか。 -編集はお使いの端末に残ります。クラウドモデルには字幕テキストを送信します。完成したクリップが端末を離れるのは、「投稿」を押したあとだけで、接続済みのプラットフォームに送られます。投稿せずに書き出すこともできます。この投稿ページは **v1.3.2** から使えます。利用統計やエラー報告はバージョンと設定によるため、プライバシー説明をご確認ください。 +アプリは無料・MIT。クラウド分析・文字起こし・AI 画像生成は自分の認証情報と事業者の料金を使用。既定の自動表紙は有料の画像生成を使いません。Ollama / LM Studio はクラウド Key 不要ですが適切な機材が必要。直接投稿には自分の Bilibili または [Upload-Post](https://www.upload-post.com) アカウントが必要。
-字幕がなくても使えますか? +動画はアップロードされますか。 -はい。先にローカルの Whisper コンポーネントと音声モデルを準備してください。既存の SRT も読み込めます。正確な字幕があれば文字起こしの待ち時間や認識ミスを減らせます。 +カットと書き出しは端末内。クラウド分析には関連字幕と投稿文、映像理解や参照画像生成には必要な抽出フレーム、クラウド文字起こしには音声を送ります。ローカル分析・文字起こしは対応するクラウド API 不要です。投稿を選ぶと完成動画を接続済みの投稿先へ送信。統計・エラー報告は設定で無効にできます。[プライバシー](docs/PRIVACY.en.md)。
-クリップが生成されないのはなぜですか? +向いている動画は。 -失敗した段階を確認し、空の字幕、モデル接続、評価のしきい値、FFmpeg、空き容量を調べてください。しきい値を 0.7 から 0.5 に下げて試せますが、生成は保証されません。 +主に検証しているのは対談・ポッドキャスト・講義・トーク。作者字幕があれば最速、なければローカルまたはクラウド文字起こし。ゲームや会話の少ない素材は画像対応モデルで映像理解を有効にし、選ばれた場面を確認してください。
-どんな動画に向いていますか?処理時間は? +クリップができません。 -主に字幕を分析するため、インタビュー、ポッドキャスト、講義、解説に向いています。映像中心の動作や音楽は十分に評価できない場合があります。時間は動画の長さ、機器、モデル、書き出し設定により異なるので、短い素材から試してください。 +字幕・文字起こし、モデル接続、FFmpeg、ディスク、投稿先条件を確認。YouTube 長尺は完結した 180 秒以上のクリップが必要。短い素材は Shorts / Bilibili を選択。続く場合は版・OS・尺・モデル・匿名化ログを [既知の問題](https://github.com/zhouxiaoka/autoclip/issues/96) へ。
-[詳しいトラブル対処(英語)](docs/FAQ.en.md) · [既知の問題](https://github.com/zhouxiaoka/autoclip/issues/96) +[トラブルシュート](docs/FAQ.en.md) · [既知の問題](https://github.com/zhouxiaoka/autoclip/issues/96) ## ドキュメント -README は 8 言語で提供しています。以下の詳細ガイドは主に中国語です。README の翻訳言語と、アプリの UI や文字起こしモデルの対応言語は異なります。 - -- [インストールと最初のクリップ作成 (English)](docs/USER_INSTALLATION_GUIDE.en.md) -- [Docker デプロイ(中国語)](DOCKER.md) -- [CLI・MCP・ローカルモデル(中国語)](docs/CLI_AND_MCP.md) -- [モデルプロバイダー(中国語)](docs/MULTI_LLM_PROVIDER_GUIDE.md) -- [よくある質問(中国語)](docs/FAQ.md) -- [貢献ガイド(中国語)](CONTRIBUTING.md) -- [変更履歴](CHANGELOG.md) -- [プライバシーについて(中国語 / 英語)](docs/PRIVACY.en.md) -- [README 翻訳・バッジ管理(中国語)](docs/i18n.md) - -## 貢献とお問い合わせ - -コードの修正、フィードバック、翻訳の改善を歓迎します。不具合の報告には、OS、バージョン、モデル、再現手順、機密情報を取り除いたエラーログを添えてください。 +| 知りたいこと | 文書 | +| --- | --- | +| インストールと初回 | [インストール](docs/USER_INSTALLATION_GUIDE.en.md) | +| 自前運用と自動化 | [Docker](docs/DOCKER.en.md) · [CLI / MCP](docs/CLI_AND_MCP.md)(中国語) · [Agent skill](skills/autoclip/SKILL.md)(中国語) · [OpenCode](docs/OPENCODE.en.md) | +| モデルと障害 | [モデル設定](docs/MULTI_LLM_PROVIDER_GUIDE.md)(中国語) · [FAQ](docs/FAQ.en.md) | +| 版・ロードマップ・プライバシー | [更新履歴](CHANGELOG.md) · [ロードマップ](ROADMAP.md)(中国語) · [コミュニティ掲示板](docs/COMMUNITY_BOARD.md)(中国語) · [プライバシー](docs/PRIVACY.en.md) | +| 開発と翻訳 | [貢献](CONTRIBUTING.md)(中国語) · [翻訳の管理](docs/i18n.md)(中国語) | -個人が余暇に保守しています。返信時期は一定ではなく、即時サポートや個別の導入支援は提供していません。お問い合わせの前によくある質問と既知の問題をご確認ください。 +## 参加する -機能のアイデア、使い方、モデルの要望は [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions) へ。再現できる不具合は [Issue テンプレート](https://github.com/zhouxiaoka/autoclip/issues/new/choose) を使ってください。ルールは [コミュニティボード](docs/COMMUNITY_BOARD.md)(中国語)にあります。 +修正、完成例、感想、翻訳の改善を歓迎します。役に立ったら Star を。 -- [案内とカテゴリ](https://github.com/zhouxiaoka/autoclip/discussions/127) -- [最初のクリップ Q&A](https://github.com/zhouxiaoka/autoclip/discussions/128) -- [アイデア](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **話す:** [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [初回 Q&A](https://github.com/zhouxiaoka/autoclip/discussions/128) · [アイデア](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **不具合:** [Issue フォーム](https://github.com/zhouxiaoka/autoclip/issues/new/choose) に OS、版、モデル、手順、伏せたログ +- **提携:** [christine_zhouye@163.com](mailto:christine_zhouye@163.com) -- メール: [christine_zhouye@163.com](mailto:christine_zhouye@163.com) +個人メンテです。即時サポートや個別デプロイはありません。 -FastAPI、React、Tauri、FFmpeg、yt-dlp、Whisper、およびすべての貢献者に感謝します。[MIT License](LICENSE) で公開しています。AutoClip が役に立ったら、Star で応援してください。 +![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date) -[![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date)](https://star-history.com/#zhouxiaoka/autoclip&Date) +FastAPI、React、Tauri、FFmpeg、yt-dlp、Whisper、FunASR とすべての貢献者に感謝。[MIT License](LICENSE)。 diff --git a/README-KO.md b/README-KO.md index 3522582ea..eabe82a6f 100644 --- a/README-KO.md +++ b/README-KO.md @@ -1,213 +1,360 @@
-AutoClip +AutoClip # AutoClip -**긴 영상에서 공유하고 싶은 순간을 찾아보세요.** +### 링크 하나, 클릭 한 번. -[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · **한국어** · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md) +오픈 소스. 자르기와 렌더는 내 컴퓨터에서. 링크와 플랫폼을 고르면 영상·표지·게시 문구를 만듭니다.
+抖音·小红书·TikTok·Reels·YouTube Shorts·Bilibili·YouTube에 맞춰 줍니다.
+앱은 무료, 클라우드 모델은 사용량 과금. 필요할 때 편집기로 조정하세요. -[![GitHub release](https://img.shields.io/github/v/release/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/releases/latest) -[![GitHub stars](https://img.shields.io/github/stars/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/forks) -[![GitHub issues](https://img.shields.io/github/issues/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/issues) -[![License: MIT](https://img.shields.io/github/license/zhouxiaoka/autoclip?style=flat-square)](LICENSE) +

+ GitHub release + GitHub stars + Downloads + License: MIT +

-[웹사이트](https://zhouxiaoka.github.io/autoclip_intro/) · [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [문제 신고](https://github.com/zhouxiaoka/autoclip/issues) +AutoClip — GitHub Trending -**데스크톱 설치 파일: [macOS · Apple Silicon](https://github.com/zhouxiaoka/autoclip/releases/latest) · [Windows · x64](https://github.com/zhouxiaoka/autoclip/releases/latest)** +**[웹사이트](https://zhouxiaoka.github.io/autoclip_intro/)** · **[데스크톱 받기](https://github.com/zhouxiaoka/autoclip/releases/latest)** · [사례](https://zhouxiaoka.github.io/autoclip_intro/cases/) · [빠른 시작](#빠른-시작) · [문서](#문서) · [이슈](https://github.com/zhouxiaoka/autoclip/issues/new/choose) -[설치와 첫 클립 만들기 (English)](docs/USER_INSTALLATION_GUIDE.en.md) · [전체 문제 해결 가이드(영어)](docs/FAQ.en.md) +[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · **한국어** · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md)
-v1.3.1부터 앱, 웹사이트, README는 중국어, 영어, 일본어, 한국어, 스페인어, 포르투갈어, 러시아어, 프랑스어를 지원합니다. 상단에서 언어를 선택하거나 시스템 설정을 따를 수 있습니다. 원본 미디어와 생성 콘텐츠의 언어는 변경되지 않습니다. +**[1.5.0 정식 출시](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)**. 데스크톱·CLI·MCP를 함께 업데이트했습니다. 자동 제작, 자막 페이지 분할, 인물 구도, 긴 영상 대기열 수정은 [변경 기록](CHANGELOG.md)을 확인하고 이전 버전에서 업그레이드하세요. + +## 실제 완성 클립 + +이미지나 “재생”을 클릭하면 완성된 영상을 볼 수 있습니다. 언어 표시는 영상의 자막 언어입니다. 추천 영상 6개를 먼저 보여주며, 펼치면 10개를 더 볼 수 있습니다. + +### 세로 · 인터뷰형 및 전체 화면 팟캐스트형 + + + + + + + + +
+Bill Gates — AI测试时竟会装傻?
+Bill Gates
+인터뷰형 · Douyin · 중국어
+▶ 재생 1:01 · 원본 +
+AI Experts Debate — We're Driving Toward a Cliff in the Fog
+AI Experts Debate
+인터뷰형 · Shorts · 영어
+▶ 재생 1:25 · 원본 +
+Tony Robbins — 风险极小,回报极大?
+Tony Robbins
+전체 화면 팟캐스트형 · Douyin · 중국어
+▶ 재생 1:45 · 원본 +
+Andrew Garfield × Amy Poehler — I Love Competition—but Hate Fake Casualness
+Andrew Garfield × Amy Poehler
+전체 화면 팟캐스트형 · Shorts · 영어
+▶ 재생 1:01 · 원본 +
+ +### 가로 · 원본 화면 비율 유지 + + + + + + +
+佟丽娅 × 鲁豫 — 舞蹈是我骨子里的东西
+佟丽娅 × 鲁豫
+원본 화면 비율 · Bilibili · 중국어
+▶ 재생 1:41 · 원본 +
+Sam Altman — AI是文艺复兴,还是工业革命?
+Sam Altman
+원본 화면 비율 · Bilibili · 중국어
+▶ 재생 2:02 · 원본 +
-AutoClip은 AI로 영상 자막을 분석하고 하이라이트를 찾아 제목, 클립, 모음 영상을 자동으로 만듭니다. 인터뷰, 팟캐스트, 강의, 라이브 방송 녹화에 적합하며 데스크톱 앱, Docker 웹 UI, CLI / MCP로 사용할 수 있습니다. +
+실제 완성 영상 10개 더 보기 + + + + + + + + + + + + + + + + + + + + +
+Adam Neumann — Success is how you feel one minute before death—full of love, no regret
+Adam Neumann
+전체 화면 팟캐스트형 · TikTok · 영어
+▶ 재생 0:59 · 원본 +
+小奇 × 鲁豫 — 想证明自己,又怕被注视
+小奇 × 鲁豫
+인터뷰형 · Douyin · 중국어
+▶ 재생 0:50 · 원본 +
+郭柯宇 × 鲁豫 — 演员的快感在创作过程 不在结果
+郭柯宇 × 鲁豫
+인터뷰형 · Douyin · 중국어
+▶ 재생 1:11 · 원본 +
+Willem Dafoe — Fake teeth made him feel lascivious and instantly became the character
+Willem Dafoe
+전체 화면 팟캐스트형 · TikTok · 영어
+▶ 재생 1:07 · 원본 +
+TIM × 罗永浩 — 红得快的网红 糊得更快
+TIM × 罗永浩
+인터뷰형 · Douyin · 중국어
+▶ 재생 1:05 · 원본 +
+Jensen Huang — AI是五层蛋糕 能源才是底层
+Jensen Huang
+인터뷰형 · 샤오훙슈 · 중국어
+▶ 재생 1:17 · 원본 +
+Andrej Karpathy — AI还不能当实习生用 因认知能力严重不足
+Andrej Karpathy
+인터뷰형 · Douyin · 중국어
+▶ 재생 0:43 · 원본 +
+A20 Pro — 苹果芯片不是拼乐高
+A20 Pro
+인터뷰형 · 샤오훙슈 · 중국어
+▶ 재생 2:00 · 원본 +
+Sylvester Stallone — 60岁写《洛奇》 是向衰老宣战
+Sylvester Stallone
+인터뷰형 · Douyin · 중국어
+▶ 재생 1:39 · 원본 +
+MrBeast — YouTube's first 5 seconds matter more than thumbnails
+MrBeast
+전체 화면 팟캐스트형 · TikTok · 영어
+▶ 재생 1:42 · 원본 +
-## 화면 미리보기 +
-![AutoClip v1.3.0 — local video import](docs/images/import-local.jpg) +영상, 커버와 게시 문구는 **[사례 라이브러리 →](https://zhouxiaoka.github.io/autoclip_intro/cases/?lang=ko)** 에서 확인하고, [직접 만든 영상도 공유해 주세요](https://github.com/zhouxiaoka/autoclip/discussions/new?category=show-and-tell). 원본 영상의 저작권은 원작자에게 있으며, 이 영상은 효과를 보여주기 위한 예시입니다. -v1.3.0의 실제 웹 화면입니다. 파일 가져오기 영역에서 로컬 영상과 선택 사항인 SRT 자막을 추가할 수 있습니다. +## 무엇을 하나요 -## 커뮤니티 성과 +### 링크만 붙이면 됩니다 -

- AutoClip — GitHub Trending - AutoClip — Trendshift Python daily ranking - AutoClip — Trendshift daily ranking, all languages -

+플랫폼의 화면 비율과 길이 조건에 맞춰 제작합니다. 각 플랫폼에서 조건을 만족하는 상위 최대 10개를 자동 생성하고 나머지는 요청 시 제작합니다. 표지·제목·설명·해시태그·ZIP 게시 패키지를 포함합니다. -아래 배지는 Trendshift에서 제공합니다. 클릭하면 AutoClip의 순위 기록을 확인할 수 있습니다. GitHub Trending과 Trendshift는 서로 다른 순위이며, 배지는 현재 실시간 순위가 아닌 기록된 성과를 보여 줍니다. +### 포장은 자동 -## 주요 기능 +抖音 / 小红书 기본은 인터뷰형, TikTok / Reels / Shorts는 전체 화면 팟캐스트형. 세로 레이아웃은 선택할 수 있으며 자막과 문구 언어는 플랫폼을 따릅니다. Bilibili / YouTube는 가로형. 인물을 따라가고 인물이 없는 장면은 전체를 보존합니다. 브랜드 엔딩은 기본 켜짐, 설정에서 끌 수 있습니다. 복사한 게시 문구에 AutoClip 서명은 없습니다. -| 기능 | 설명 | -| --- | --- | -| 영상 가져오기 | 로컬 영상, YouTube 및 Bilibili 링크를 지원하며 SRT 자막을 추가할 수 있습니다. | -| 하이라이트 찾기 | 자막에서 개요, 주제별 시간 구간, 하이라이트 점수, 클립 제목을 추출합니다. | -| 클립과 모음 영상 | 클립과 추천 모음 영상을 생성하고 순서를 직접 조정할 수 있습니다. | -| 게시(v1.3.2) | 클립이 준비되면 그 클립에서 게시를 엽니다. **v1.3.2**부터 사용할 수 있습니다. 해외 플랫폼은 본인의 Upload-Post 계정에 연결한 곳입니다. TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads, Pinterest, Bluesky, Discord, Telegram, Google Business 중 그 계정에서 쓸 수 있는 곳입니다. Bilibili는 계정 하나입니다. 설정에서 Cookie를 한 번 붙여 넣습니다. SESSDATA, bili_jct, DedeUserID가 있어야 합니다. 지금 올리거나 예약할 수 있습니다. 제목과 설명은 비워 두면 클립 제목을 씁니다. 자막 삽입은 기본으로 켜져 있고, 약 4초 타이틀 카드도 기본으로 켜져 있습니다. 공개 범위는 지원하는 플랫폼에서 기본이 나만 보기입니다. private / 나만 보기를 약속하는 곳은 TikTok, YouTube, Bilibili뿐입니다. 게시하지 않고 받을 수도 있습니다. 프로젝트 페이지에서 게시 기록과 달력을 보고, 아직 나가지 않은 예약을 취소할 수 있습니다. 「이번 주 배치」는 해외만 해당합니다. 아직 올리지 않은 클립을 월·수·금 09:00에 넣고, Bilibili는 넣지 않습니다. 세로 계정은 9:16으로 만들며 60초로 자르지 않습니다. Bilibili만이면 가로 화면입니다. LinkedIn 또는 X만이면 원본 화면입니다. 세로 계정과 Bilibili를 같은 번에 보내면 각각 따로 만듭니다. | -| 자동 커버(v1.3.2) | 게시할 때 커버를 자동으로 만들 수 있어, Bilibili 빈 커버 거절을 피합니다. 기본 커버와 타이틀 카드의 세부 내용은 그 버전 설치 파일 설명을 따릅니다. **v1.3.2**부터 사용할 수 있습니다. | -| 게시용 내보내기 | Douyin, Xiaohongshu, YouTube Shorts, Bilibili 프리셋과 자막 삽입, 타이틀 카드를 지원합니다. | -| 모델 선택 | Qwen, OpenAI 호환 API, Gemini, SiliconFlow, Ollama / LM Studio의 로컬 모델을 사용할 수 있습니다. | -| 자동화 | CLI로 작업을 구성하거나 MCP 클라이언트에서 동일한 처리 파이프라인을 호출할 수 있습니다. | +### 내 컴퓨터에서 + +자르기·구도·렌더는 로컬에서. 분석 모델을 선택하고 제작자 자막, 로컬 Whisper / SenseVoice, 설정한 클라우드 전사를 사용하세요. CLI / MCP도 데스크톱과 같은 자동 제작 흐름입니다. + +## 실제 영상의 시간과 비용 + +개발 중 서로 다른 세 영상으로 측정했으며 동일 입력의 통제 비교가 아닙니다. 당시 qwen-plus 텍스트 모델 사용량 추정치로, 클라우드 ASR·AI 이미지·게시 서비스 비용은 제외합니다. 실제 청구는 제공자 기준입니다. + +| 버전 | 원본 | 결과 | 텍스트 모델 추정 비용 (CNY) | +| --- | --- | ---: | ---: | +| **신판 · 자막 있음** | Jensen · 1h43m (영 → 小红书) | **7.5분 / 10개** | **¥0.09** | +| 신판 · 자막 없음 | TIM × 뤄융하오 · 2h52m (중 → 抖音) | 29.5분 / 10개 | ¥0.20 | +| 구판 | MrBeast · 2h06m (영 → TikTok) | 65분 | ¥0.64 | -> 영상 가져오기 → 자막 준비 / 음성 전사 → AI 분석 및 평가 → 클립과 모음 영상 생성 → 내보내기 +
+측정 조건과 기록 + +2026-10-01, 같은 Apple Silicon Mac. 신규 흐름 두 건은 10개, 이전 흐름은 33개로 소재와 개수가 다릅니다. Jensen은 제작자 자막, TIM은 로컬 Whisper base를 사용했습니다. + +제작자 자막이 있으면 전사를 생략합니다. 없으면 로컬 또는 클라우드 ASR을 선택하세요. 플랫폼과 추가 클립이 늘면 시간·사용량도 늘어납니다. [측정 기록](docs/COST_PER_VIDEO.md)(중국어). + +
+ +## 모델과 데이터 흐름을 선택하세요 + +자르기와 렌더는 기기에서 실행합니다. 클라우드 분석에는 관련 자막·문구, 화면 이해나 참조 이미지 생성에는 필요한 샘플 프레임, 클라우드 전사에는 오디오를 보냅니다. 로컬 분석·전사에는 해당 클라우드 API가 필요 없습니다. 게시를 선택하면 완성 영상을 연결한 플랫폼으로 업로드합니다. 통계·오류 보고는 설정에서 끌 수 있습니다. [개인정보](docs/PRIVACY.en.md). ## 빠른 시작 -### 1. 데스크톱 앱 +| 하고 싶은 일 | 추천 | 준비물 | +| --- | --- | --- | +| 이 컴퓨터에서 만들기 | **데스크톱** | macOS Apple Silicon 또는 Windows x64 | +| 자체 웹 / Linux | **Docker** | Docker와 Compose v2 | +| 대량 / Agent | **CLI / MCP** | Python 3.10+ (3.11 권장)와 FFmpeg | -[GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases/latest)에서 운영체제에 맞는 설치 파일을 다운로드하세요. +### 데스크톱 -| 플랫폼 | 설치 방법 | -| --- | --- | -| macOS · Apple Silicon | `.dmg` | -| Windows 10 / 11 · x64 | `-setup.exe` | -| Intel Mac / Linux | 아래의 Docker 또는 CLI 사용 | +1. **설치.** [Releases](https://github.com/zhouxiaoka/autoclip/releases/latest)에서. macOS Apple Silicon은 `.dmg`, Windows 10 / 11 x64는 `-setup.exe`. Python과 FFmpeg 포함. +2. **모델 설정.** 제공자와 API Key를 입력하고 이용 가능한 분석 모델을 선택한 뒤 연결을 테스트하고 저장하세요. 로컬은 먼저 Ollama / LM Studio에서 모델을 로드하고 서비스를 시작하세요. +3. **링크와 플랫폼 선택.** 자막이 있는 인터뷰나 팟캐스트로 시작하고 세로 레이아웃을 고르세요. 자막이 없으면 설정에서 Whisper / SenseVoice를 준비하거나 클라우드 전사를 설정하세요. +4. **확인 후 저장.** 자막·구도·내용의 완결성을 확인하고 게시 패키지를 저장하거나 계정을 연결해 게시하세요. 더 필요하면 대체 후보를 제작하세요. -데스크톱 설치 파일에는 Python과 FFmpeg가 포함됩니다. 지원 플랫폼과 첫 실행 방법은 해당 릴리스를 확인하세요. 설치 후 설정에서 모델 제공업체를 선택하고 연결 테스트와 저장을 마친 뒤 영상을 가져오세요. +Intel Mac / Linux는 Docker 또는 CLI를 이용할 수 있습니다. 요구 사항, 첫 실행 안내, 검증 범위는 [설치 가이드](docs/USER_INSTALLATION_GUIDE.en.md)와 [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)를 참고하세요. -### 2. Docker / Web +[설치 가이드](docs/USER_INSTALLATION_GUIDE.en.md) · [문제 해결](docs/FAQ.en.md) -Docker와 Docker Compose v2가 필요합니다. 저장소 루트에서 실행하세요. +**Docker / Web** ```bash git clone https://github.com/zhouxiaoka/autoclip.git cd autoclip -``` - -```bash cp env.example .env -``` - -시작 전에 `.env`에서 `LLM_PROVIDER`, 해당 API 키와 모델 이름을 설정하세요. 실행 후 설정 화면에서도 구성할 수 있습니다. - -```bash mkdir -p data logs uploads docker compose up -d --build ``` -[웹 UI](http://localhost:3000)를 여세요. 백엔드가 시작되면 [API 문서](http://localhost:8000/docs)를 볼 수 있습니다. 자세한 내용은 [Docker 가이드](DOCKER.md)(중국어)를 참고하세요. +[웹 UI](http://localhost:3000)를 엽니다. [API 문서](http://localhost:8000/docs)는 백엔드 기동 후. [Docker 가이드](docs/DOCKER.en.md). -Linux에서 바인드 마운트 디렉터리의 권한 오류가 발생하면 아래 명령으로 프로젝트 데이터 디렉터리의 소유권을 수정한 뒤 서비스를 다시 시작하세요. +Linux에서 바인드 권한 오류가 나면 소유권을 먼저 고칩니다. ```bash docker compose run --rm --no-deps --user root --entrypoint sh autoclip -c 'chown -R autoclip:autoclip /app/data /app/logs /app/uploads' docker compose up -d ``` -### 3. CLI / MCP +LAN IP나 자체 도메인으로 접속하면 `.env`의 `AUTOCLIP_ALLOWED_ORIGINS`에 프런트엔드 주소를 쉼표로 구분해 추가하세요. + +**CLI / MCP** -Python 3.10 이상(3.11 권장)과 PATH에 등록된 FFmpeg가 필요합니다. 아래 예시는 macOS / Linux 셸 기준입니다. Windows PowerShell에서는 `venv\Scripts\Activate.ps1`로 가상 환경을 활성화하세요. CLI 로컬 처리에는 Redis가 필요하지 않습니다. +Python 3.10+(3.11 권장), PATH의 FFmpeg와 FFprobe가 필요합니다. Redis는 필요 없습니다. [정식 CLI / MCP ZIP](https://github.com/zhouxiaoka/autoclip/releases/download/v1.5.0/autoclip-1.5.0-cli-mcp.zip)을 풀고 해당 디렉터리에서 실행하세요: ```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt -python -m pip install -e . +python -m pip install --force-reinstall --no-deps autoclip-1.5.0-py3-none-any.whl ``` -로컬 모델 예시: Ollama를 설치하고 실행한 뒤 모델을 다운로드하세요. 자막이 없는 영상에는 `faster-whisper`가 필요하며 첫 전사 시 음성 모델을 다운로드합니다. 기존 자막을 사용하려면 `--srt talk.srt`를 추가하세요. +위 명령은 macOS / Linux용입니다. Windows는 `py -m venv venv`로 만들고 `.\venv\Scripts\Activate.ps1`로 활성화한 뒤 같은 `python -m pip` 설치 명령을 실행하세요. -```bash -ollama pull qwen2.5:7b -python -m pip install faster-whisper -autoclip doctor --provider ollama -autoclip run talk.mp4 --provider ollama --json -``` - -`PROJECT_ID`를 처리 결과의 프로젝트 ID로 바꾸면 Shorts 형식으로 내보낼 수 있습니다. `autoclip mcp`는 stdio MCP 서버를 시작합니다. +먼저 모델 설정을 저장하세요. 데스크톱 설정을 공유하거나 ZIP의 키 없는 예제로 전용 데이터 디렉터리를 설정합니다. [CLI / MCP](docs/CLI_AND_MCP.md)(중국어). `produce`는 이전 `run --provider` 임시 설정을 쓰지 않습니다. `--srt`로 전사를 생략할 수 있습니다. ```bash -autoclip export PROJECT_ID --preset shorts -autoclip mcp +autoclip --version +autoclip produce talk.mp4 --srt talk.srt --platform douyin --portrait-style podcast --json +autoclip outputs PROJECT_ID --export-kits ``` -MCP 클라이언트의 `command`에는 가상 환경 내 `autoclip`의 절대 경로를, `args`에는 `["mcp"]`를 설정하세요. [CLI / MCP 가이드](docs/CLI_AND_MCP.md)와 [Agent skill](skills/autoclip/SKILL.md)(중국어)을 참고하세요. +MCP 클라이언트가 서버를 시작합니다. 별도 디버깅은 다른 터미널에서 `autoclip mcp`; OpenCode 설정은 `autoclip mcp install opencode`로 작성할 수 있습니다. + +`PROJECT_ID`는 제작 결과의 ID로 바꾸세요. MCP는 `start_quick_output` / `get_quick_output_status`. 클라이언트 `command`는 가상환경 `autoclip` 절대 경로, `args`는 `["mcp"]`. 이전 `run` / `export`와 클립 도구도 유지됩니다. [CLI / MCP](docs/CLI_AND_MCP.md)(중국어)·[OpenCode](docs/OPENCODE.en.md)·[Agent skill](skills/autoclip/SKILL.md)(중국어). ## 모델 설정 | 방식 | 설정 | | --- | --- | -| 클라우드 모델 | 설정에서 Qwen, OpenAI 호환 API, Gemini 또는 SiliconFlow를 선택하고 API 키를 입력하세요. 호환 API는 Base URL을 변경할 수 있습니다. | -| Ollama | 기본 주소는 `http://localhost:11434/v1`, 모델은 `qwen2.5:7b`입니다. API 키가 필요하지 않습니다. | -| LM Studio | 모델을 로드하고 Local Server를 시작하세요. 기본 주소는 `http://localhost:1234/v1`이며 서버가 제공하는 모델을 선택해야 합니다. | - -Docker 내부의 `localhost`는 컨테이너 자체를 가리킵니다. 호스트의 모델을 사용하려면 컨테이너에서 접근 가능한 주소를 설정하세요. 자세한 내용은 CLI / MCP 가이드에 있습니다. 영상 자르기는 로컬에서 수행하지만 클라우드 모델 분석은 선택한 제공업체에 자막 텍스트를 전송합니다. 영상과 모델 다운로드에는 인터넷이 필요합니다. +| 클라우드 API | 설정에서 제공자와 API Key. OpenAI 호환은 Base URL도 가능. | +| Ollama | 기본 주소 `http://localhost:11434/v1`. 로컬 모델을 내려받아 실행하고 서비스가 제공하는 모델을 선택하세요. API Key는 필요 없습니다. | +| LM Studio | 모델을 열고 Local Server. 기본 `http://localhost:1234/v1`. | + +Docker 안 `localhost`는 컨테이너입니다. 호스트 모델은 컨테이너가 닿는 주소를 쓰세요. + +[모델 설정](docs/MULTI_LLM_PROVIDER_GUIDE.md)(중국어) · [로컬과 컨테이너](docs/CLI_AND_MCP.md)(중국어) + +## 후원에 감사드립니다 ❤️ + + + + + + + + + + +
+ 88API
+ 88API +
+ 88API Token 플랫폼의 AutoClip 후원에 감사드립니다! GPT, Claude, Gemini, Grok, DeepSeek, Kimi, GLM을 통합하여 자막 분석, 하이라이트 선택, 제목 생성에 활용할 수 있습니다.
+ 🎨 멀티미디어: GPT-Image, Seedance, Veo, MiniMax Hailuo H3, Kling, Whisper, TTS 등 이미지·영상·음성 모델을 제공합니다. AutoClip에서는 호환되는 분석·표지 생성·자막 전사 API를 사용합니다.
+ 🏷️ 서비스 및 결제: 파트너 안내에 따르면 해외 법인이 운영하며 상담원 지원, 정식 청구서, 1:1 충전 비율을 제공합니다. 세부 조건은 플랫폼을 확인하세요.
+ 🎁 신규 가입 혜택: 전용 추천 링크로 가입하면 모델 테스트용 체험 크레딧을 받을 수 있습니다. 이벤트 조건이 적용됩니다. 설정 가이드 (영어) +
+ Infistar
+ Infistar.cc +
+ AutoClip을 후원하는 Infistar.cc에 감사드립니다! 긴 영상의 자막 분석, 하이라이트 선택, 제목 생성에 활용할 수 있는 여러 모델의 API를 제공합니다.
+ ⚙️ 호환 API 설정: AutoClip에서 OpenAI 호환 제공업체를 선택하고 Base URL, API 키, 사용 가능한 모델을 입력하세요.
+ 🧩 다양한 모델: 후원사는 Claude, GPT, Gemini, DeepSeek 등을 제공합니다. 호환 엔드포인트를 지원하는 모델을 선택하여 자막 분석과 하이라이트 선택 결과를 비교할 수 있습니다.
+ 🏷️ 가격 및 서비스: 후원사 안내에 따르면 일부 모델은 공식 정가의 1%부터 이용할 수 있으며, 위안화 결제, 청구서 발행, 모델 진위 확인을 지원합니다. 적용 모델, 현재 가격과 조건은 플랫폼에서 확인하세요.
+ 🎁 AutoClip 전용 혜택: 신규 사용자는 전용 추천 링크로 가입하면 $5 체험 크레딧을 받을 수 있습니다. 적용 조건은 이벤트 안내를 확인하세요. 설정 가이드 (영어) +
## 자주 묻는 질문
-무료인가요? API 키가 필요한가요? +무료인가요? API Key가 필요한가요? -AutoClip 자체는 계속 MIT 라이선스의 무료 오픈 소스입니다. 클라우드 모델은 제공업체의 요금이 적용되며 본인의 API 키가 필요합니다. Ollama / LM Studio는 클라우드 키가 필요 없지만 모델 파일과 적절한 하드웨어가 필요합니다. **v1.3.2**부터 해외 게시에는 본인의 [Upload-Post](https://www.upload-post.com) 계정이 필요합니다. 무료·유료 등급과 TikTok, YouTube, Instagram 등의 일일 한도는 Upload-Post 자신의 페이지를 따릅니다. AutoClip의 약속이 아닙니다. +앱은 무료 MIT. 클라우드 분석·전사·AI 이미지는 본인 인증 정보와 제공자 요금으로 이용합니다. 기본 자동 표지는 유료 이미지 생성 없이 제작합니다. Ollama / LM Studio는 클라우드 키가 필요 없지만 적합한 하드웨어가 필요합니다. 직접 게시에는 본인 Bilibili 또는 [Upload-Post](https://www.upload-post.com) 계정이 필요합니다.
영상이 업로드되나요? -편집은 사용자 기기에 남습니다. 클라우드 모델 분석에는 자막 텍스트를 전송합니다. 완성된 클립이 기기를 떠나는 때는 「게시」를 누른 뒤뿐이며, 연결해 둔 플랫폼으로만 갑니다. 게시하지 않고 받을 수도 있습니다. 이 게시 페이지는 **v1.3.2**부터 사용할 수 있습니다. 통계와 오류 보고는 버전 및 설정에 따라 달라지므로 개인정보 안내를 확인하세요. - -
- -
-자막이 없어도 사용할 수 있나요? - -네. 먼저 로컬 Whisper 구성 요소와 음성 모델을 준비하세요. 기존 SRT 자막을 함께 가져올 수도 있습니다. 정확한 자막이 있으면 전사 시간과 인식 오류를 줄일 수 있습니다. +자르기와 렌더는 기기에서 실행합니다. 클라우드 분석에는 관련 자막·문구, 화면 이해나 참조 이미지 생성에는 필요한 샘플 프레임, 클라우드 전사에는 오디오를 보냅니다. 로컬 분석·전사에는 해당 클라우드 API가 필요 없습니다. 게시를 선택하면 완성 영상을 연결한 플랫폼으로 업로드합니다. 통계·오류 보고는 설정에서 끌 수 있습니다. [개인정보](docs/PRIVACY.en.md).
-클립이 생성되지 않는 이유는 무엇인가요? +어떤 영상에 적합한가요? -실패한 단계에서 빈 자막, 모델 연결, 너무 높은 점수 기준, FFmpeg 및 디스크 상태를 확인하세요. 기준을 0.7에서 0.5로 낮춰 볼 수 있지만 클립 생성을 보장하지는 않습니다. +주로 검증한 소재는 인터뷰·팟캐스트·강의·토크입니다. 제작자 자막이 가장 빠르며 없으면 로컬/클라우드 전사를 사용합니다. 게임이나 대화가 적은 소재는 이미지 지원 모델로 화면 이해를 켜고 선택한 장면을 확인하세요.
-어떤 영상에 적합하며 얼마나 걸리나요? +클립이 생성되지 않아요. -주로 자막을 분석하므로 인터뷰, 팟캐스트, 강의, 해설 영상에 적합합니다. 시각적 동작이나 음악 중심 영상은 한계가 있을 수 있습니다. 영상 길이, 하드웨어, 모델, 내보내기 설정에 따라 시간이 달라지므로 짧은 영상부터 확인하세요. +자막/전사, 모델 연결, FFmpeg, 디스크, 플랫폼 조건을 확인하세요. YouTube 긴 영상은 완결된 180초 이상 클립이 필요합니다. 짧은 소재는 Shorts/Bilibili를 선택하세요. 계속 실패하면 버전·OS·길이·모델·민감 정보 없는 로그를 [알려진 문제](https://github.com/zhouxiaoka/autoclip/issues/96)에 남겨주세요.
-[전체 문제 해결 가이드(영어)](docs/FAQ.en.md) · [알려진 문제](https://github.com/zhouxiaoka/autoclip/issues/96) +[문제 해결](docs/FAQ.en.md) · [알려진 문제](https://github.com/zhouxiaoka/autoclip/issues/96) ## 문서 -README는 8개 언어로 제공되며 아래 상세 문서는 대부분 중국어입니다. README 번역 언어와 앱 UI 또는 전사 모델의 지원 언어는 별개입니다. - -- [설치와 첫 클립 만들기 (English)](docs/USER_INSTALLATION_GUIDE.en.md) -- [Docker 배포(중국어)](DOCKER.md) -- [CLI, MCP 및 로컬 모델(중국어)](docs/CLI_AND_MCP.md) -- [모델 제공업체 설정(중국어)](docs/MULTI_LLM_PROVIDER_GUIDE.md) -- [자주 묻는 질문(중국어)](docs/FAQ.md) -- [기여 가이드(중국어)](CONTRIBUTING.md) -- [변경 기록](CHANGELOG.md) -- [개인정보 안내(중국어 / 영어)](docs/PRIVACY.en.md) -- [README 번역 및 배지 관리(중국어)](docs/i18n.md) - -## 기여 및 연락처 - -코드 수정, 피드백, 번역 개선을 환영합니다. 버그를 신고할 때 OS, 버전, 모델, 재현 단계, 민감한 정보를 제거한 오류 로그를 함께 보내 주세요. +| 알고 싶은 것 | 문서 | +| --- | --- | +| 설치와 첫 클립 | [설치](docs/USER_INSTALLATION_GUIDE.en.md) | +| 자체 운영과 자동화 | [Docker](docs/DOCKER.en.md) · [CLI / MCP](docs/CLI_AND_MCP.md)(중국어) · [Agent skill](skills/autoclip/SKILL.md)(중국어) · [OpenCode](docs/OPENCODE.en.md) | +| 모델과 장애 | [모델 설정](docs/MULTI_LLM_PROVIDER_GUIDE.md)(중국어) · [FAQ](docs/FAQ.en.md) | +| 버전·로드맵·개인정보 | [변경 기록](CHANGELOG.md) · [로드맵](ROADMAP.md)(중국어) · [커뮤니티 보드](docs/COMMUNITY_BOARD.md)(중국어) · [개인정보](docs/PRIVACY.en.md) | +| 개발과 번역 | [기여](CONTRIBUTING.md)(중국어) · [번역 관리](docs/i18n.md)(중국어) | -개인이 여가 시간에 유지 관리합니다. 답변 시점은 일정하지 않으며 실시간 지원이나 일대일 설치 지원은 제공하지 않습니다. 연락 전에 FAQ와 알려진 문제를 확인해 주세요. +## 참여 -기능 아이디어, 사용 사례, 모델 요청은 [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions)에 올려 주세요. 재현 가능한 버그는 [Issue 템플릿](https://github.com/zhouxiaoka/autoclip/issues/new/choose)을 사용합니다. 규칙은 [커뮤니티 보드](docs/COMMUNITY_BOARD.md)(중국어)에 있습니다. +수정, 완성 예, 의견, 번역 개선을 환영합니다. 도움이 됐다면 Star를. -- [안내와 분류](https://github.com/zhouxiaoka/autoclip/discussions/127) -- [첫 클립 Q&A](https://github.com/zhouxiaoka/autoclip/discussions/128) -- [아이디어](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **이야기:** [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [첫 클립 Q&A](https://github.com/zhouxiaoka/autoclip/discussions/128) · [아이디어](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **버그:** [이슈 양식](https://github.com/zhouxiaoka/autoclip/issues/new/choose)에 OS, 버전, 모델, 재현, 가린 로그 +- **제휴:** [christine_zhouye@163.com](mailto:christine_zhouye@163.com) -- 이메일: [christine_zhouye@163.com](mailto:christine_zhouye@163.com) +개인 유지입니다. 즉시 지원이나 1:1 배포는 없습니다. -FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper와 모든 기여자에게 감사드립니다. [MIT License](LICENSE)로 배포됩니다. AutoClip이 도움이 되었다면 Star로 응원해 주세요. +![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date) -[![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date)](https://star-history.com/#zhouxiaoka/autoclip&Date) +FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper, FunASR와 모든 기여자에게 감사합니다. [MIT License](LICENSE). diff --git a/README-PT.md b/README-PT.md index 64ea96304..16fa6ef6e 100644 --- a/README-PT.md +++ b/README-PT.md @@ -1,213 +1,360 @@
-AutoClip +AutoClip # AutoClip -**Transforme vídeos longos em momentos que merecem ser compartilhados.** +### Um link. Um clique. -[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · **Português** · [Русский](README-RU.md) · [Français](README-FR.md) +Código aberto, com corte e render no seu computador. Cole um link, escolha a plataforma e gere vídeo, capa e texto,
+para Douyin, Xiaohongshu, TikTok, Reels, YouTube Shorts, Bilibili ou YouTube.
+O app é grátis; modelos cloud cobram por uso. Ajuste no editor quando precisar. -[![GitHub release](https://img.shields.io/github/v/release/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/releases/latest) -[![GitHub stars](https://img.shields.io/github/stars/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/forks) -[![GitHub issues](https://img.shields.io/github/issues/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/issues) -[![License: MIT](https://img.shields.io/github/license/zhouxiaoka/autoclip?style=flat-square)](LICENSE) +

+ GitHub release + GitHub stars + Downloads + License: MIT +

-[Site](https://zhouxiaoka.github.io/autoclip_intro/) · [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Relatar um problema](https://github.com/zhouxiaoka/autoclip/issues) +AutoClip — GitHub Trending -**Instaladores desktop: [macOS · Apple Silicon](https://github.com/zhouxiaoka/autoclip/releases/latest) · [Windows · x64](https://github.com/zhouxiaoka/autoclip/releases/latest)** +**[Site](https://zhouxiaoka.github.io/autoclip_intro/)** · **[Baixar desktop](https://github.com/zhouxiaoka/autoclip/releases/latest)** · [Casos](https://zhouxiaoka.github.io/autoclip_intro/cases/) · [Início rápido](#início-rápido) · [Documentação](#documentação) · [Problema](https://github.com/zhouxiaoka/autoclip/issues/new/choose) -[Instalação e primeiros clipes (English)](docs/USER_INSTALLATION_GUIDE.en.md) · [Guia completo de solução de problemas (inglês)](docs/FAQ.en.md) +[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · **Português** · [Русский](README-RU.md) · [Français](README-FR.md)
-A partir da v1.3.1, o aplicativo, o site e o README oferecem chinês, inglês, japonês, coreano, espanhol, português, russo e francês. Escolha o idioma no cabeçalho ou siga o sistema. Seus arquivos e o conteúdo gerado mantêm o idioma original. +**[1.5.0 foi lançado oficialmente](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)**, com desktop, CLI e MCP atualizados. Veja o [changelog](CHANGELOG.md) para produção automática, paginação de legendas, enquadramento e fila de vídeos longos. Atualize instalações antigas. + +## Cortes reais + +Clique em uma imagem ou em “Reproduzir” para assistir ao clipe completo. O idioma indicado é o das legendas do resultado. Mostramos seis exemplos; expanda para ver mais dez. + +### Vertical · entrevista e podcast em tela cheia + + + + + + + + +
+Bill Gates — AI测试时竟会装傻?
+Bill Gates
+Entrevista · Douyin · Chinês
+▶ Reproduzir 1:01 · Original +
+AI Experts Debate — We're Driving Toward a Cliff in the Fog
+AI Experts Debate
+Entrevista · Shorts · Inglês
+▶ Reproduzir 1:25 · Original +
+Tony Robbins — 风险极小,回报极大?
+Tony Robbins
+Podcast em tela cheia · Douyin · Chinês
+▶ Reproduzir 1:45 · Original +
+Andrew Garfield × Amy Poehler — I Love Competition—but Hate Fake Casualness
+Andrew Garfield × Amy Poehler
+Podcast em tela cheia · Shorts · Inglês
+▶ Reproduzir 1:01 · Original +
+ +### Horizontal · enquadramento original + + + + + + +
+佟丽娅 × 鲁豫 — 舞蹈是我骨子里的东西
+佟丽娅 × 鲁豫
+Enquadramento original · Bilibili · Chinês
+▶ Reproduzir 1:41 · Original +
+Sam Altman — AI是文艺复兴,还是工业革命?
+Sam Altman
+Enquadramento original · Bilibili · Chinês
+▶ Reproduzir 2:02 · Original +
-O AutoClip usa IA para analisar legendas, encontrar destaques, criar títulos e gerar clipes e coletâneas automaticamente. Ideal para entrevistas, podcasts, cursos e gravações de transmissões ao vivo, oferece um aplicativo desktop, uma interface web via Docker e acesso por CLI / MCP. +
+Ver mais 10 clipes reais + + + + + + + + + + + + + + + + + + + + +
+Adam Neumann — Success is how you feel one minute before death—full of love, no regret
+Adam Neumann
+Podcast em tela cheia · TikTok · Inglês
+▶ Reproduzir 0:59 · Original +
+小奇 × 鲁豫 — 想证明自己,又怕被注视
+小奇 × 鲁豫
+Entrevista · Douyin · Chinês
+▶ Reproduzir 0:50 · Original +
+郭柯宇 × 鲁豫 — 演员的快感在创作过程 不在结果
+郭柯宇 × 鲁豫
+Entrevista · Douyin · Chinês
+▶ Reproduzir 1:11 · Original +
+Willem Dafoe — Fake teeth made him feel lascivious and instantly became the character
+Willem Dafoe
+Podcast em tela cheia · TikTok · Inglês
+▶ Reproduzir 1:07 · Original +
+TIM × 罗永浩 — 红得快的网红 糊得更快
+TIM × 罗永浩
+Entrevista · Douyin · Chinês
+▶ Reproduzir 1:05 · Original +
+Jensen Huang — AI是五层蛋糕 能源才是底层
+Jensen Huang
+Entrevista · Xiaohongshu · Chinês
+▶ Reproduzir 1:17 · Original +
+Andrej Karpathy — AI还不能当实习生用 因认知能力严重不足
+Andrej Karpathy
+Entrevista · Douyin · Chinês
+▶ Reproduzir 0:43 · Original +
+A20 Pro — 苹果芯片不是拼乐高
+A20 Pro
+Entrevista · Xiaohongshu · Chinês
+▶ Reproduzir 2:00 · Original +
+Sylvester Stallone — 60岁写《洛奇》 是向衰老宣战
+Sylvester Stallone
+Entrevista · Douyin · Chinês
+▶ Reproduzir 1:39 · Original +
+MrBeast — YouTube's first 5 seconds matter more than thumbnails
+MrBeast
+Podcast em tela cheia · TikTok · Inglês
+▶ Reproduzir 1:42 · Original +
-## Veja a interface +
-![AutoClip v1.3.0 — local video import](docs/images/import-local.jpg) +Vídeos, capas e textos para publicação na **[biblioteca de exemplos →](https://zhouxiaoka.github.io/autoclip_intro/cases/?lang=pt)**. [Compartilhe seus clipes](https://github.com/zhouxiaoka/autoclip/discussions/new?category=show-and-tell). Os vídeos originais pertencem aos seus criadores; estes clipes servem apenas como demonstração. -Interface web real da v1.3.0: adicione um vídeo local na área de importação, com legendas SRT opcionais. +## O que faz -## Reconhecimento da comunidade +### Cole o link e pronto -

- AutoClip — GitHub Trending - AutoClip — Trendshift Python daily ranking - AutoClip — Trendshift daily ranking, all languages -

+Gere no formato e duração da plataforma. Cada plataforma renderiza até 10 clipes elegíveis mais bem pontuados; os demais ficam sob demanda. Capa, título, descrição, hashtags e kit ZIP estão incluídos. -Estes selos são fornecidos pelo Trendshift. Clique para consultar as conquistas registradas do AutoClip. GitHub Trending e Trendshift são rankings diferentes; os selos mostram conquistas registradas, não uma posição em tempo real. +### O empacotamento já vem -## O que você pode fazer +Douyin / Xiaohongshu usam entrevista por padrão; TikTok / Reels / Shorts, podcast em tela cheia. O layout vertical pode mudar sem alterar o idioma da plataforma. Bilibili / YouTube são horizontais. O quadro segue o falante e preserva cenas sem pessoas. O encerramento de marca vem ligado e pode ser desligado nas configurações; o texto copiado não leva assinatura AutoClip. -| Recurso | Descrição | -| --- | --- | -| Importar vídeos | Use arquivos locais ou links do YouTube e Bilibili, com legendas SRT opcionais. | -| Encontrar destaques | Extraia resumos, intervalos por assunto, pontuações e títulos a partir das legendas. | -| Criar clipes e coletâneas | Gere clipes e coletâneas sugeridas e ajuste a ordem manualmente. | -| Publicar (v1.3.2) | Quando os clipes estiverem prontos, abra Publicar em um clipe. Disponível na **v1.3.2**. No exterior, usam-se as plataformas ligadas na sua própria conta Upload-Post: TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads, Pinterest, Bluesky, Discord, Telegram e Google Business, conforme o que essa conta tiver ligado. O Bilibili é uma conta: cole um Cookie uma vez em Configurações. Ele precisa incluir SESSDATA, bili_jct e DedeUserID. Publique agora ou agende. Título e descrição são opcionais e, se ficarem vazios, usam o título do clipe. Legendas embutidas vêm ligadas, assim como o cartão de título de cerca de 4 segundos. A visibilidade padrão é só eu / private onde a plataforma aceita. O AutoClip promete isso apenas para TikTok, YouTube e Bilibili. Também dá para baixar sem publicar. A página do projeto mostra o histórico e o calendário, e cancela um agendamento que ainda não saiu. «Planejar a semana» vale só para o exterior: preenche segunda, quarta e sexta às 09:00, sem Bilibili. Contas verticais saem em 9:16, sem corte de 60 segundos. Só Bilibili usa paisagem. Só LinkedIn ou X mantém o enquadramento original. Vertical e Bilibili no mesmo envio são renderizados separados. | -| Capa automática (v1.3.2) | Na publicação, uma capa pode ser gerada automaticamente, para o Bilibili não recusar uma capa vazia. Os detalhes da capa e do cartão de título padrão seguem as notas desse instalador. Disponível na **v1.3.2**. | -| Exportar para publicar | Use predefinições para Douyin, Xiaohongshu, YouTube Shorts e Bilibili, com legendas embutidas e cartões de título. | -| Escolher modelos | Use Qwen, APIs compatíveis com OpenAI, Gemini, SiliconFlow ou modelos locais com Ollama / LM Studio. | -| Automatizar tarefas | Organize execuções pela CLI ou acesse o mesmo fluxo de processamento por um cliente MCP. | +### Fica no seu computador + +Corte, enquadramento e render são locais. Escolha o modelo de análise e use legendas do autor, Whisper / SenseVoice local ou transcrição cloud configurada. CLI / MCP compartilham o fluxo do desktop. + +## Tempo e custo com fontes reais + +São três fontes diferentes medidas durante o desenvolvimento, não um comparativo controlado com a mesma entrada. Os valores estimam o uso de texto do qwen-plus na época, sem ASR cloud, imagens AI ou publicação. A cobrança real é do fornecedor. + +| Versão | Original | Saída | Custo estimado do modelo de texto (CNY) | +| --- | --- | ---: | ---: | +| **Nova · com legendas** | Jensen · 1h43m (EN → Xiaohongshu) | **7,5 min / 10 cortes** | **¥0,09** | +| Nova · sem legendas | TIM × Luo Yonghao · 2h52m (ZH → Douyin) | 29,5 min / 10 cortes | ¥0,20 | +| Anterior | MrBeast · 2h06m (EN → TikTok) | 65 min | ¥0,64 | -> Importar vídeo → Legendas / transcrição → Análise e pontuação por IA → Clipes e coletâneas → Exportação +
+Condições e registros + +1º de outubro de 2026, mesmo Mac Apple Silicon. Os dois casos novos geraram 10 clipes; o anterior, 33, com fonte e quantidade diferentes. Jensen usou legendas do autor; TIM, Whisper base local. + +Legendas do autor dispensam transcrição. Sem elas, escolha ASR local ou cloud. Plataformas e clipes extras aumentam tempo e uso. [Medições e cálculo](docs/COST_PER_VIDEO.md) (chinês). + +
+ +## Escolha modelos e fluxo de dados + +Corte e render ficam no computador. Análise cloud envia legendas e texto relevante; entendimento visual ou geração com referência envia quadros necessários; transcrição cloud envia áudio. Análise e transcrição locais dispensam a API cloud correspondente. Clipes são enviados às plataformas conectadas quando você escolhe publicar. Estatísticas e relatórios de erro podem ser desligados. [Privacidade](docs/PRIVACY.en.md). ## Início rápido -### 1. Aplicativo desktop +| Você quer | Use | Precisa de | +| --- | --- | --- | +| Fazer cortes neste computador | **Desktop** | macOS Apple Silicon ou Windows x64 | +| Hospedar / Linux | **Docker** | Docker e Compose v2 | +| Lote / agentes | **CLI / MCP** | Python 3.10+ (3.11 recomendado) e FFmpeg | -Baixe o instalador adequado em [GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases/latest): +### Desktop -| Plataforma | Instalação | -| --- | --- | -| macOS · Apple Silicon | `.dmg` | -| Windows 10 / 11 · x64 | `-setup.exe` | -| Intel Mac / Linux | Use Docker ou a CLI abaixo | +1. **Instale.** Em [Releases](https://github.com/zhouxiaoka/autoclip/releases/latest). macOS Apple Silicon: `.dmg`. Windows 10 / 11 x64: `-setup.exe`. Python e FFmpeg vêm junto. +2. **Configure um modelo.** Escolha o provedor e a API Key, selecione um modelo de análise disponível, teste a conexão e salve. Para modelos locais, carregue um modelo e inicie Ollama / LM Studio primeiro. +3. **Link e plataforma.** Comece com entrevista ou podcast legendado e escolha layout vertical. Sem legendas, prepare Whisper / SenseVoice ou configure transcrição cloud nas configurações. +4. **Revise e salve.** Confira legendas, quadro e conteúdo, depois baixe o kit ou conecte uma conta para postar. Gere alternativas quando precisar de mais clipes. -Os instaladores incluem Python e FFmpeg. Consulte cada versão para verificar as plataformas disponíveis e as instruções da primeira execução. Após instalar, escolha o provedor de modelos nas configurações, teste a conexão, salve e importe um vídeo. +Intel Mac / Linux podem usar Docker ou CLI. Veja o [guia de instalação](docs/USER_INSTALLATION_GUIDE.en.md) e a [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0) para requisitos, primeira abertura e escopo de validação. -### 2. Docker / Web +[Guia de instalação](docs/USER_INSTALLATION_GUIDE.en.md) · [Problemas](docs/FAQ.en.md) -Requer Docker e Docker Compose v2. Execute os comandos na raiz do repositório: +**Docker / Web** ```bash git clone https://github.com/zhouxiaoka/autoclip.git cd autoclip -``` - -```bash cp env.example .env -``` - -Antes de iniciar, edite `.env`: selecione `LLM_PROVIDER` e informe a chave de API e o modelo correspondentes. Você também pode configurar o provedor pela interface após iniciar. - -```bash mkdir -p data logs uploads docker compose up -d --build ``` -Abra a [interface web](http://localhost:3000). A [documentação da API](http://localhost:8000/docs) estará disponível após a inicialização do backend. Veja o [guia do Docker](DOCKER.md) (em chinês) para mais detalhes. +Abra a [UI web](http://localhost:3000). A [API](http://localhost:8000/docs) fica disponível depois do backend. [Guia Docker](docs/DOCKER.en.md). -No Linux, se os diretórios montados causarem erros de permissão, corrija a propriedade dos diretórios de dados do projeto com este comando e inicie os serviços novamente: +No Linux, se o bind falhar por permissão, ajuste o dono primeiro: ```bash docker compose run --rm --no-deps --user root --entrypoint sh autoclip -c 'chown -R autoclip:autoclip /app/data /app/logs /app/uploads' docker compose up -d ``` -### 3. CLI / MCP +Para IP de rede ou domínio próprio, adicione o frontend a `AUTOCLIP_ALLOWED_ORIGINS` no `.env` (separado por vírgulas). + +**CLI / MCP** -Requer Python 3.10 ou superior (3.11 recomendado) e FFmpeg no PATH. O exemplo usa um shell de macOS / Linux; no PowerShell do Windows, ative o ambiente com `venv\Scripts\Activate.ps1`. O processamento local pela CLI não precisa de Redis. +Python 3.10+ (3.11 recomendado), FFmpeg e FFprobe no PATH; Redis não é necessário. Baixe o [ZIP oficial CLI / MCP](https://github.com/zhouxiaoka/autoclip/releases/download/v1.5.0/autoclip-1.5.0-cli-mcp.zip), extraia e execute naquele diretório: ```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt -python -m pip install -e . +python -m pip install --force-reinstall --no-deps autoclip-1.5.0-py3-none-any.whl ``` -Exemplo com modelo local: instale e inicie o Ollama, depois baixe um modelo. Vídeos sem legendas exigem `faster-whisper`; o modelo de voz é baixado no primeiro uso. Para usar legendas existentes, adicione `--srt talk.srt`. +Os comandos acima são para macOS / Linux. No Windows, crie com `py -m venv venv` e ative com `.\venv\Scripts\Activate.ps1`; depois use os mesmos comandos `python -m pip`. -```bash -ollama pull qwen2.5:7b -python -m pip install faster-whisper -autoclip doctor --provider ollama -autoclip run talk.mp4 --provider ollama --json -``` - -Substitua `PROJECT_ID` pelo ID do projeto retornado após o processamento para exportar no formato Shorts. Inicie o servidor MCP via stdio com `autoclip mcp`: +Salve os modelos antes: use configurações do desktop ou configure seu diretório pelo exemplo sem chaves do ZIP. [CLI / MCP](docs/CLI_AND_MCP.md) (chinês). `produce` não usa a substituição temporária de `run --provider`. `--srt` evita transcrever. ```bash -autoclip export PROJECT_ID --preset shorts -autoclip mcp +autoclip --version +autoclip produce talk.mp4 --srt talk.srt --platform douyin --portrait-style podcast --json +autoclip outputs PROJECT_ID --export-kits ``` -No cliente MCP, defina `command` como o caminho absoluto de `autoclip` no ambiente virtual e `args` como `["mcp"]`. Veja o [guia de CLI / MCP](docs/CLI_AND_MCP.md) e a [skill para agentes](skills/autoclip/SKILL.md) (ambos em chinês). +O cliente MCP inicia o servidor. Para depuração separada, execute `autoclip mcp` em outro terminal; o OpenCode pode ser configurado com `autoclip mcp install opencode`. + +Troque `PROJECT_ID` pelo ID retornado. MCP usa `start_quick_output` / `get_quick_output_status`; `command` aponta ao caminho absoluto de `autoclip` no venv e `args` é `["mcp"]`. `run` / `export` e ferramentas antigas continuam. [CLI / MCP](docs/CLI_AND_MCP.md) (chinês), [OpenCode](docs/OPENCODE.en.md), [Agent skill](skills/autoclip/SKILL.md) (chinês). -## Configuração de modelos +## Modelos | Opção | Configuração | | --- | --- | -| Modelos na nuvem | Selecione Qwen, uma API compatível com OpenAI, Gemini ou SiliconFlow e informe a chave de API. Serviços compatíveis permitem personalizar a Base URL. | -| Ollama | Endereço padrão: `http://localhost:11434/v1`; modelo: `qwen2.5:7b`. Não exige chave de API. | -| LM Studio | Carregue um modelo e inicie o Local Server, por padrão em `http://localhost:1234/v1`. Selecione um modelo disponível no seu servidor. | - -Dentro do Docker, `localhost` aponta para o próprio contêiner. Para usar um modelo no host, configure um endereço acessível pelo contêiner; consulte o guia de CLI / MCP. O corte dos vídeos é local; a análise com modelos na nuvem envia o texto das legendas ao provedor escolhido. Downloads de vídeos e modelos ainda precisam de internet. +| API na nuvem | Escolha o provedor e a API Key. Compatível com OpenAI aceita Base URL. | +| Ollama | Endereço padrão `http://localhost:11434/v1`. Baixe e inicie um modelo local, depois escolha um modelo oferecido pelo servidor. Sem API Key. | +| LM Studio | Carregue um modelo e inicie o Local Server, `http://localhost:1234/v1` por padrão. | + +Dentro do Docker, `localhost` é o contêiner. Use um endereço do host que o contêiner alcance. + +[Modelos](docs/MULTI_LLM_PROVIDER_GUIDE.md) (chinês) · [Local e contêineres](docs/CLI_AND_MCP.md) (chinês) + +## Agradecimentos ❤️ + + + + + + + + + + +
+ 88API
+ 88API +
+ Agradecemos à 88API por patrocinar o AutoClip! Reúne GPT, Claude, Gemini, Grok, DeepSeek, Kimi e GLM para analisar legendas, selecionar destaques e gerar títulos.
+ 🎨 Multimídia: Modelos de imagem, vídeo e áudio, incluindo GPT-Image, Seedance, Veo, MiniMax Hailuo H3, Kling, Whisper e TTS. O AutoClip utiliza APIs compatíveis de análise, capas e transcrição.
+ 🏷️ Serviço e faturamento: Segundo o parceiro, a operação é de uma empresa no exterior, com atendimento humano, faturas e proporção de recarga de 1:1; aplicam-se as condições da plataforma.
+ 🎁 Novos usuários: Receba créditos de teste para avaliar modelos pelo link de indicação, conforme as condições da promoção. Guia de configuração (inglês) +
+ Infistar
+ Infistar.cc +
+ Agradecemos à Infistar.cc por patrocinar o AutoClip! Sua API com vários modelos pode ser usada para analisar transcrições de vídeos longos, selecionar destaques e gerar títulos.
+ ⚙️ Configuração compatível: No AutoClip, escolha o provedor compatível com OpenAI e informe a Base URL, sua chave de API e um modelo disponível.
+ 🧩 Vários modelos: O parceiro oferece Claude, GPT, Gemini, DeepSeek e outras famílias. Escolha modelos que aceitem o endpoint compatível para comparar a análise de transcrições e a seleção de destaques.
+ 🏷️ Preços e serviços: Segundo o parceiro, alguns modelos custam a partir de 1% do preço oficial, com cobrança em RMB, emissão de faturas e verificação de autenticidade dos modelos. Confira os modelos, preços e condições atuais na plataforma.
+ 🎁 Oferta para AutoClip: Novos usuários podem receber $5 em créditos de teste pelo link de indicação, conforme as condições da promoção. Guia de configuração (inglês) +
## Perguntas frequentes
-É gratuito? Preciso de uma chave de API? - -O AutoClip em si continua gratuito e de código aberto sob MIT. Provedores de modelos na nuvem cobram pelo uso e exigem sua própria chave de API. Ollama / LM Studio não precisam de chave de nuvem, mas exigem modelos e hardware adequado. A partir da **v1.3.2**, publicar no exterior exige a sua própria conta [Upload-Post](https://www.upload-post.com). Planos gratuitos e pagos, e os limites diários de TikTok, YouTube, Instagram e outras plataformas, seguem as páginas do próprio Upload-Post. Não são promessas do AutoClip. - -
- -
-Meus vídeos são enviados para a nuvem? +É grátis? Preciso de API Key? -A edição fica no seu dispositivo. A análise com modelos na nuvem envia o texto das legendas ao provedor escolhido. O clipe pronto só sai da máquina depois que você clica em Publicar, e só para as plataformas que você conectou. Também dá para baixar sem publicar. Essa página Publicar está disponível na **v1.3.2**. Estatísticas e relatórios de erros dependem da versão e das configurações; consulte as notas de privacidade. +App grátis sob MIT. Análise, transcrição e imagens cloud usam suas credenciais e tarifas do fornecedor. A capa automática não usa geração paga por padrão. Ollama / LM Studio dispensam chave cloud, mas exigem hardware. Publicar exige sua conta Bilibili ou [Upload-Post](https://www.upload-post.com).
-Posso usar vídeos sem legendas? +Meus vídeos são enviados? -Sim, após preparar os componentes locais do Whisper e um modelo de voz. Também é possível importar SRT existente. Legendas precisas podem reduzir o tempo e os erros de transcrição. +Corte e render ficam no computador. Análise cloud envia legendas e texto relevante; entendimento visual ou geração com referência envia quadros necessários; transcrição cloud envia áudio. Análise e transcrição locais dispensam a API cloud correspondente. Clipes são enviados às plataformas conectadas quando você escolhe publicar. Estatísticas e relatórios de erro podem ser desligados. [Privacidade](docs/PRIVACY.en.md).
-Por que nenhum clipe foi gerado? +Quais vídeos funcionam melhor? -Verifique a etapa que falhou: legendas vazias, conexão com o modelo, pontuação mínima muito alta ou problemas no FFmpeg e no disco. Você pode reduzir o limite de 0.7 para 0.5, mas isso não garante clipes. +Entrevistas, podcasts, cursos e vídeos falados são os principais casos validados. Legendas do autor são mais rápidas; sem elas, transcrição local/cloud. Para jogos ou pouco diálogo, ative entendimento visual com modelo de imagens e revise os momentos escolhidos.
-Quais vídeos funcionam melhor e quanto tempo leva? +Por que não saiu nenhum clipe? -A análise usa principalmente as legendas, sendo adequada para entrevistas, podcasts, aulas e comentários falados. Ação visual ou música podem ter resultados limitados. O tempo depende da duração, do hardware, do modelo e da exportação; comece com uma amostra curta. +Confira transcrição, modelo, FFmpeg, disco e regras da plataforma. YouTube longo exige clipes completos de no mínimo 180 segundos; use Shorts/Bilibili para fontes curtas. Inclua versão 1.5.0, OS, duração, modelo e logs sem segredos em [problemas conhecidos](https://github.com/zhouxiaoka/autoclip/issues/96).
-[Guia completo de solução de problemas (inglês)](docs/FAQ.en.md) · [Problemas conhecidos](https://github.com/zhouxiaoka/autoclip/issues/96) +[Solução de problemas](docs/FAQ.en.md) · [Problemas conhecidos](https://github.com/zhouxiaoka/autoclip/issues/96) ## Documentação -O README está disponível em oito idiomas; a maioria dos guias detalhados está em chinês. Os idiomas do README não indicam os idiomas compatíveis com a interface ou com os modelos de transcrição. - -- [Instalação e primeiros clipes (English)](docs/USER_INSTALLATION_GUIDE.en.md) -- [Implantação com Docker (chinês)](DOCKER.md) -- [CLI, MCP e modelos locais (chinês)](docs/CLI_AND_MCP.md) -- [Provedores de modelos (chinês)](docs/MULTI_LLM_PROVIDER_GUIDE.md) -- [Perguntas frequentes (chinês)](docs/FAQ.md) -- [Guia de contribuição (chinês)](CONTRIBUTING.md) -- [Histórico de alterações](CHANGELOG.md) -- [Privacidade (chinês / inglês)](docs/PRIVACY.en.md) -- [Tradução do README e manutenção dos selos (chinês)](docs/i18n.md) - -## Contribua e entre em contato - -Correções, comentários e melhorias nas traduções são bem-vindos. Ao relatar um erro, inclua sistema operacional, versão, modelo, passos para reprodução e logs sem informações confidenciais. +| Você quer | Docs | +| --- | --- | +| Instalar e primeiros cortes | [Instalação](docs/USER_INSTALLATION_GUIDE.en.md) | +| Hospedar e automatizar | [Docker](docs/DOCKER.en.md) · [CLI / MCP](docs/CLI_AND_MCP.md) (chinês) · [Agent skill](skills/autoclip/SKILL.md) (chinês) · [OpenCode](docs/OPENCODE.en.md) | +| Modelos e falhas | [Modelos](docs/MULTI_LLM_PROVIDER_GUIDE.md) (chinês) · [FAQ](docs/FAQ.en.md) | +| Versões, roteiro, privacidade | [Changelog](CHANGELOG.md) · [Roteiro](ROADMAP.md) (chinês) · [Quadro](docs/COMMUNITY_BOARD.md) (chinês) · [Privacidade](docs/PRIVACY.en.md) | +| Contribuir e traduzir | [Contribuir](CONTRIBUTING.md) (chinês) · [Traduções](docs/i18n.md) (chinês) | -Projeto mantido por uma pessoa no tempo livre. O prazo de resposta varia; não há suporte imediato nem assistência individual de implantação. Consulte as perguntas frequentes e os problemas conhecidos antes de entrar em contato. +## Contribuir -Ideias, usos e pedidos de modelo vão para as [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions). Erros reproduzíveis usam o [formulário de issue](https://github.com/zhouxiaoka/autoclip/issues/new/choose). Regras do quadro: [community board](docs/COMMUNITY_BOARD.md) (chinês). +Correções, exemplos, feedback e traduções são bem-vindos. Se o AutoClip ajudar, um star ajuda de volta. -- [Boas-vindas e categorias](https://github.com/zhouxiaoka/autoclip/discussions/127) -- [Perguntas do primeiro clipe](https://github.com/zhouxiaoka/autoclip/discussions/128) -- [Ideias](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Conversar:** [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Primeiro corte](https://github.com/zhouxiaoka/autoclip/discussions/128) · [Ideias](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Falhas:** [formulário](https://github.com/zhouxiaoka/autoclip/issues/new/choose) com SO, versão, modelo, passos e logs sem segredo +- **Parcerias:** [christine_zhouye@163.com](mailto:christine_zhouye@163.com) -- E-mail: [christine_zhouye@163.com](mailto:christine_zhouye@163.com) +Mantido por uma pessoa. Sem suporte ao vivo nem deploy um a um. -Agradecemos ao FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper e a todas as pessoas que contribuem. Distribuído sob a [licença MIT](LICENSE). Se o AutoClip for útil, considere dar uma estrela ao projeto. +![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date) -[![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date)](https://star-history.com/#zhouxiaoka/autoclip&Date) +Obrigado ao FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper, FunASR e a quem contribui. [MIT License](LICENSE). diff --git a/README-RU.md b/README-RU.md index 2ae57eef4..54da8faa4 100644 --- a/README-RU.md +++ b/README-RU.md @@ -1,213 +1,360 @@
-AutoClip +AutoClip # AutoClip -**Превращайте длинные видео в моменты, которыми хочется поделиться.** +### Одна ссылка — один клик. -[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · **Русский** · [Français](README-FR.md) +Открытый код, нарезка и рендер на вашем компьютере. Вставьте ссылку, выберите площадку и получите видео, обложку и текст,
+для Douyin, Xiaohongshu, TikTok, Reels, YouTube Shorts, Bilibili или YouTube.
+Приложение бесплатно; облачные модели оплачиваются по использованию. Результат можно поправить в редакторе. -[![GitHub release](https://img.shields.io/github/v/release/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/releases/latest) -[![GitHub stars](https://img.shields.io/github/stars/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/forks) -[![GitHub issues](https://img.shields.io/github/issues/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/issues) -[![License: MIT](https://img.shields.io/github/license/zhouxiaoka/autoclip?style=flat-square)](LICENSE) +

+ GitHub release + GitHub stars + Downloads + License: MIT +

-[Сайт проекта](https://zhouxiaoka.github.io/autoclip_intro/) · [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Сообщить о проблеме](https://github.com/zhouxiaoka/autoclip/issues) +AutoClip — GitHub Trending -**Установщики приложения: [macOS · Apple Silicon](https://github.com/zhouxiaoka/autoclip/releases/latest) · [Windows · x64](https://github.com/zhouxiaoka/autoclip/releases/latest)** +**[Сайт](https://zhouxiaoka.github.io/autoclip_intro/)** · **[Скачать десктоп](https://github.com/zhouxiaoka/autoclip/releases/latest)** · [Кейсы](https://zhouxiaoka.github.io/autoclip_intro/cases/) · [Быстрый старт](#быстрый-старт) · [Документация](#документация) · [Ошибка](https://github.com/zhouxiaoka/autoclip/issues/new/choose) -[Установка и первые клипы (English)](docs/USER_INSTALLATION_GUIDE.en.md) · [Полное руководство по устранению неполадок (английский)](docs/FAQ.en.md) +[简体中文](README.md) · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · **Русский** · [Français](README-FR.md)
-Начиная с v1.3.1, приложение, сайт и README доступны на китайском, английском, японском, корейском, испанском, португальском, русском и французском языках. Выберите язык в верхней панели или используйте язык системы. Язык ваших материалов и созданного контента не меняется. +**[1.5.0 официально выпущен](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)**, вместе с desktop, CLI и MCP. Автовыпуск, разбивка субтитров, кадрирование и очередь длинных видео описаны в [истории изменений](CHANGELOG.md). Обновите старые версии. + +## Настоящие клипы + +Нажмите на изображение или «Смотреть», чтобы открыть полный клип. Указан язык субтитров готового видео. Ниже шесть примеров; раскройте раздел, чтобы посмотреть ещё десять. + +### Вертикальные · интервью и подкаст на весь экран + + + + + + + + +
+Bill Gates — AI测试时竟会装傻?
+Bill Gates
+Интервью · Douyin · Китайский
+▶ Смотреть 1:01 · Оригинал +
+AI Experts Debate — We're Driving Toward a Cliff in the Fog
+AI Experts Debate
+Интервью · Shorts · Английский
+▶ Смотреть 1:25 · Оригинал +
+Tony Robbins — 风险极小,回报极大?
+Tony Robbins
+Подкаст на весь экран · Douyin · Китайский
+▶ Смотреть 1:45 · Оригинал +
+Andrew Garfield × Amy Poehler — I Love Competition—but Hate Fake Casualness
+Andrew Garfield × Amy Poehler
+Подкаст на весь экран · Shorts · Английский
+▶ Смотреть 1:01 · Оригинал +
+ +### Горизонтальные · исходное кадрирование + + + + + + +
+佟丽娅 × 鲁豫 — 舞蹈是我骨子里的东西
+佟丽娅 × 鲁豫
+Исходное кадрирование · Bilibili · Китайский
+▶ Смотреть 1:41 · Оригинал +
+Sam Altman — AI是文艺复兴,还是工业革命?
+Sam Altman
+Исходное кадрирование · Bilibili · Китайский
+▶ Смотреть 2:02 · Оригинал +
-AutoClip с помощью ИИ анализирует субтитры, находит яркие моменты, придумывает заголовки и автоматически создаёт клипы и подборки. Подходит для интервью, подкастов, лекций и записей трансляций. Доступны настольное приложение, веб-интерфейс через Docker и CLI / MCP. +
+Ещё 10 готовых клипов + + + + + + + + + + + + + + + + + + + + +
+Adam Neumann — Success is how you feel one minute before death—full of love, no regret
+Adam Neumann
+Подкаст на весь экран · TikTok · Английский
+▶ Смотреть 0:59 · Оригинал +
+小奇 × 鲁豫 — 想证明自己,又怕被注视
+小奇 × 鲁豫
+Интервью · Douyin · Китайский
+▶ Смотреть 0:50 · Оригинал +
+郭柯宇 × 鲁豫 — 演员的快感在创作过程 不在结果
+郭柯宇 × 鲁豫
+Интервью · Douyin · Китайский
+▶ Смотреть 1:11 · Оригинал +
+Willem Dafoe — Fake teeth made him feel lascivious and instantly became the character
+Willem Dafoe
+Подкаст на весь экран · TikTok · Английский
+▶ Смотреть 1:07 · Оригинал +
+TIM × 罗永浩 — 红得快的网红 糊得更快
+TIM × 罗永浩
+Интервью · Douyin · Китайский
+▶ Смотреть 1:05 · Оригинал +
+Jensen Huang — AI是五层蛋糕 能源才是底层
+Jensen Huang
+Интервью · Xiaohongshu · Китайский
+▶ Смотреть 1:17 · Оригинал +
+Andrej Karpathy — AI还不能当实习生用 因认知能力严重不足
+Andrej Karpathy
+Интервью · Douyin · Китайский
+▶ Смотреть 0:43 · Оригинал +
+A20 Pro — 苹果芯片不是拼乐高
+A20 Pro
+Интервью · Xiaohongshu · Китайский
+▶ Смотреть 2:00 · Оригинал +
+Sylvester Stallone — 60岁写《洛奇》 是向衰老宣战
+Sylvester Stallone
+Интервью · Douyin · Китайский
+▶ Смотреть 1:39 · Оригинал +
+MrBeast — YouTube's first 5 seconds matter more than thumbnails
+MrBeast
+Подкаст на весь экран · TikTok · Английский
+▶ Смотреть 1:42 · Оригинал +
-## Интерфейс приложения +
-![AutoClip v1.3.0 — local video import](docs/images/import-local.jpg) +Видео, обложки и тексты публикаций доступны в **[библиотеке примеров →](https://zhouxiaoka.github.io/autoclip_intro/cases/?lang=ru)**. [Поделитесь своими клипами](https://github.com/zhouxiaoka/autoclip/discussions/new?category=show-and-tell). Права на исходные видео принадлежат их авторам; клипы показаны только для демонстрации. -Реальный веб-интерфейс v1.3.0: добавьте локальное видео в области импорта и при необходимости субтитры SRT. +## Что умеет -## Признание сообщества +### Вставил ссылку — получил клипы -

- AutoClip — GitHub Trending - AutoClip — Trendshift Python daily ranking - AutoClip — Trendshift daily ranking, all languages -

+Генерация по формату и длительности площадки. Для каждой площадки автоматически создаётся до 10 лучших подходящих клипов; остальные — по запросу. В комплекте обложка, заголовок, описание, хештеги и ZIP. -Эти значки предоставляет Trendshift. Нажмите на них, чтобы посмотреть достижения AutoClip. GitHub Trending и Trendshift — разные рейтинги; значки показывают зафиксированные достижения, а не текущую позицию. +### Упаковка встроена -## Возможности +Douyin / Xiaohongshu — интервью по умолчанию; TikTok / Reels / Shorts — полноэкранный подкаст. Вертикальный макет можно выбрать, язык субтитров и текста задаёт площадка. Bilibili / YouTube — горизонтальные. Кадр следует за говорящим, сцены без людей сохраняются целиком. Брендовый финал включён по умолчанию, отключается в настройках; в копируемом тексте нет подписи AutoClip. -| Возможность | Описание | -| --- | --- | -| Импорт видео | Локальные файлы, ссылки YouTube и Bilibili, а также необязательные субтитры SRT. | -| Поиск ярких моментов | Создание плана, временных интервалов по темам, оценок фрагментов и заголовков на основе субтитров. | -| Клипы и подборки | Автоматическое создание клипов и рекомендуемых подборок с ручным изменением порядка. | -| Публикация (v1.3.2) | Когда клипы готовы, откройте «Публикация» у клипа. Доступно в **v1.3.2**. Зарубежные площадки — те, что подключены в вашем собственном аккаунте Upload-Post: TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads, Pinterest, Bluesky, Discord, Telegram и Google Business, по факту подключения. Bilibili — один аккаунт: один раз вставьте Cookie в настройках. Нужны SESSDATA, bili_jct и DedeUserID. Можно отправить сейчас или по расписанию. Заголовок и описание необязательны и по умолчанию берутся из названия клипа. Вшитые субтитры включены по умолчанию, как и титульная карточка примерно на 4 секунды. Видимость по умолчанию — только я / private там, где площадка это поддерживает. AutoClip обещает это только для TikTok, YouTube и Bilibili. Файл можно скачать без публикации. На странице проекта есть история и календарь, а ещё отмена расписания, которое ещё не вышло. «Составить неделю» только для зарубежных площадок: понедельник, среда и пятница в 09:00, без Bilibili. Вертикальные аккаунты рендерятся в 9:16 без обрезки до 60 секунд. Только Bilibili — альбомная ориентация. Только LinkedIn или X — исходный кадр. Вертикаль и Bilibili в одной отправке рендерятся по отдельности. | -| Автообложка (v1.3.2) | При публикации обложку можно создать автоматически, чтобы Bilibili не отклонил пустую обложку. Подробности обложки и титульной карточки по умолчанию — в пояснении к установщику этого выпуска. Доступно в **v1.3.2**. | -| Экспорт для публикации | Профили Douyin, Xiaohongshu, YouTube Shorts и Bilibili, вшитые субтитры и титульные карточки. | -| Выбор моделей | Qwen, OpenAI-совместимые API, Gemini, SiliconFlow и локальные модели через Ollama / LM Studio. | -| Автоматизация | Организация запусков через CLI или вызов того же конвейера обработки из клиента MCP. | +### Остаётся на компьютере + +Нарезка, кадрирование и рендер локальные. Выбирайте модель, авторские субтитры, локальный Whisper / SenseVoice или настроенную облачную транскрипцию. CLI / MCP используют тот же поток, что desktop. + +## Время и стоимость на реальных видео + +Три разных источника измерены во время разработки, не контролируемое сравнение одного входа. Стоимость оценена по тогдашнему использованию текстового qwen-plus, без облачного ASR, AI-изображений и публикации. Фактический счёт задаёт провайдер. + +| Версия | Исходник | Выход | Оценка стоимости текстовой модели (CNY) | +| --- | --- | ---: | ---: | +| **Новая · есть субтитры** | Jensen · 1ч43м (EN → Xiaohongshu) | **7,5 мин / 10 клипов** | **¥0,09** | +| Новая · без субтитров | TIM × Ло Юнхао · 2ч52м (ZH → Douyin) | 29,5 мин / 10 клипов | ¥0,20 | +| Старая | MrBeast · 2ч06м (EN → TikTok) | 65 мин | ¥0,64 | -> Импорт видео → Субтитры / распознавание речи → Анализ и оценка ИИ → Клипы и подборки → Экспорт +
+Условия и записи + +1 октября 2026, тот же Apple Silicon Mac. Два новых запуска сделали 10 клипов; старый — 33. Различаются и исходники, и число результатов. Jensen использовал авторские субтитры; TIM — локальный Whisper base. + +Авторские субтитры позволяют пропустить транскрипцию; иначе выбирайте локальный или облачный ASR. Дополнительные площадки и клипы увеличивают время и расход. [Измерения и расчёт](docs/COST_PER_VIDEO.md) (кит.). + +
+ +## Выбирайте модели и поток данных + +Нарезка и рендер на вашем компьютере. Облачный анализ отправляет нужные субтитры и текст; анализ изображения или генерация с референсом — необходимые кадры; облачная транскрипция — аудио. Локальные анализ и транскрипция не требуют соответствующего облачного API. Готовые клипы загружаются на подключённые площадки при выборе публикации. Аналитику и отчёты об ошибках можно выключить. [Конфиденциальность](docs/PRIVACY.en.md). ## Быстрый старт -### 1. Настольное приложение +| Задача | Способ | Нужно | +| --- | --- | --- | +| Делать клипы на этом ПК | **Десктоп** | macOS Apple Silicon или Windows x64 | +| Свой веб / Linux | **Docker** | Docker и Compose v2 | +| Пакеты / агенты | **CLI / MCP** | Python 3.10+ (лучше 3.11) и FFmpeg | -Скачайте подходящий установщик из [GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases/latest): +### Десктоп -| Платформа | Установка | -| --- | --- | -| macOS · Apple Silicon | `.dmg` | -| Windows 10 / 11 · x64 | `-setup.exe` | -| Intel Mac / Linux | Используйте Docker или CLI ниже | +1. **Установка.** Из [Releases](https://github.com/zhouxiaoka/autoclip/releases/latest). macOS Apple Silicon: `.dmg`. Windows 10 / 11 x64: `-setup.exe`. Python и FFmpeg уже внутри. +2. **Настройте модель.** Выберите провайдера и API Key, доступную модель анализа, проверьте соединение и сохраните. Для локальных моделей сначала загрузите модель и запустите Ollama / LM Studio. +3. **Ссылка и площадка.** Начните с интервью/подкаста с субтитрами и выберите вертикальный макет. Без субтитров подготовьте Whisper / SenseVoice или облачную транскрипцию в настройках. +4. **Проверьте и сохраните.** Проверьте субтитры, кадр и полноту содержания, затем скачайте комплект или подключите аккаунт для публикации. При необходимости создавайте резервные клипы. -Установщики включают Python и FFmpeg. Доступные платформы и порядок первого запуска указаны в соответствующем релизе. После установки выберите провайдера модели в настройках, проверьте соединение, сохраните настройки и импортируйте видео. +Intel Mac / Linux могут использовать Docker или CLI. Требования, первый запуск и объём проверки — в [руководстве](docs/USER_INSTALLATION_GUIDE.en.md) и [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0). -### 2. Docker / Web +[Установка](docs/USER_INSTALLATION_GUIDE.en.md) · [Неполадки](docs/FAQ.en.md) -Требуются Docker и Docker Compose v2. Выполняйте команды из корня репозитория: +**Docker / Web** ```bash git clone https://github.com/zhouxiaoka/autoclip.git cd autoclip -``` - -```bash cp env.example .env -``` - -Перед запуском отредактируйте `.env`: задайте `LLM_PROVIDER`, соответствующий API-ключ и имя модели. Провайдера также можно настроить в интерфейсе после запуска. - -```bash mkdir -p data logs uploads docker compose up -d --build ``` -Откройте [веб-интерфейс](http://localhost:3000). [Документация API](http://localhost:8000/docs) доступна после запуска сервера. Подробности — в [руководстве по Docker](DOCKER.md) на китайском языке. +Откройте [веб-интерфейс](http://localhost:3000). [API](http://localhost:8000/docs) доступна после старта бэкенда. [Гид по Docker](docs/DOCKER.en.md). -Если в Linux возникают ошибки доступа к примонтированным каталогам, исправьте владельца каталогов данных проекта следующей командой и снова запустите сервисы: +В Linux при ошибке прав на bind сначала исправьте владельца: ```bash docker compose run --rm --no-deps --user root --entrypoint sh autoclip -c 'chown -R autoclip:autoclip /app/data /app/logs /app/uploads' docker compose up -d ``` -### 3. CLI / MCP +Для LAN IP или своего домена добавьте адрес frontend в `AUTOCLIP_ALLOWED_ORIGINS` в `.env` (через запятую). + +**CLI / MCP** -Нужны Python 3.10+ (рекомендуется 3.11) и FFmpeg в PATH. Пример рассчитан на оболочку macOS / Linux; в Windows PowerShell активируйте окружение командой `venv\Scripts\Activate.ps1`. Для локальной обработки через CLI Redis не требуется. +Python 3.10+ (лучше 3.11), FFmpeg и FFprobe в PATH; Redis не нужен. Скачайте [официальный ZIP CLI / MCP](https://github.com/zhouxiaoka/autoclip/releases/download/v1.5.0/autoclip-1.5.0-cli-mcp.zip), распакуйте и выполните в этом каталоге: ```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt -python -m pip install -e . +python -m pip install --force-reinstall --no-deps autoclip-1.5.0-py3-none-any.whl ``` -Пример с локальной моделью: установите и запустите Ollama, затем скачайте модель. Для видео без субтитров нужен `faster-whisper`; речевая модель загружается при первом использовании. Для готовых субтитров добавьте `--srt talk.srt`. +Команды выше для macOS / Linux. В Windows создайте среду через `py -m venv venv`, активируйте `.\venv\Scripts\Activate.ps1`, затем выполните те же команды `python -m pip`. -```bash -ollama pull qwen2.5:7b -python -m pip install faster-whisper -autoclip doctor --provider ollama -autoclip run talk.mp4 --provider ollama --json -``` - -Замените `PROJECT_ID` на идентификатор проекта из результата обработки, чтобы экспортировать видео для Shorts. Команда `autoclip mcp` запускает MCP-сервер через stdio: +Сначала сохраните настройки модели: используйте desktop или свой каталог по примеру без ключей из ZIP. [CLI / MCP](docs/CLI_AND_MCP.md) (кит.). `produce` не использует временную настройку `run --provider`. `--srt` пропускает транскрипцию. ```bash -autoclip export PROJECT_ID --preset shorts -autoclip mcp +autoclip --version +autoclip produce talk.mp4 --srt talk.srt --platform douyin --portrait-style podcast --json +autoclip outputs PROJECT_ID --export-kits ``` -В клиенте MCP укажите абсолютный путь к `autoclip` в виртуальном окружении в поле `command`, а `["mcp"]` — в поле `args`. См. [руководство по CLI / MCP](docs/CLI_AND_MCP.md) и [навык для агентов](skills/autoclip/SKILL.md) на китайском языке. +Сервер запускает клиент MCP. Для отдельной отладки выполните `autoclip mcp` в другом терминале; OpenCode настраивается через `autoclip mcp install opencode`. -## Настройка моделей +Замените `PROJECT_ID` полученным ID. MCP: `start_quick_output` / `get_quick_output_status`; `command` — абсолютный путь к `autoclip` в venv, `args` — `["mcp"]`. Старые `run` / `export` и инструменты доступны. [CLI / MCP](docs/CLI_AND_MCP.md) (кит.), [OpenCode](docs/OPENCODE.en.md), [Agent skill](skills/autoclip/SKILL.md) (кит.). -| Вариант | Настройка | -| --- | --- | -| Облачные модели | Выберите Qwen, OpenAI-совместимый API, Gemini или SiliconFlow и введите API-ключ. Для совместимых сервисов можно задать Base URL. | -| Ollama | Адрес по умолчанию: `http://localhost:11434/v1`; модель: `qwen2.5:7b`. API-ключ не нужен. | -| LM Studio | Загрузите модель и запустите Local Server, по умолчанию на `http://localhost:1234/v1`. Выберите модель, доступную на вашем сервере. | +## Модели -В Docker адрес `localhost` указывает на сам контейнер. Для доступа к модели на хосте задайте адрес, доступный из контейнера; см. руководство по CLI / MCP. Нарезка видео выполняется локально, но при анализе облачной моделью текст субтитров отправляется выбранному провайдеру. Для скачивания видео и моделей нужен интернет. +| Способ | Настройка | +| --- | --- | +| Облачный API | Провайдер и API Key в настройках. Совместимые с OpenAI принимают Base URL. | +| Ollama | Адрес по умолчанию `http://localhost:11434/v1`. Скачайте и запустите локальную модель, затем выберите модель, которую предоставляет сервер. API Key не нужен. | +| LM Studio | Загрузите модель и запустите Local Server, по умолчанию `http://localhost:1234/v1`. | + +В Docker `localhost` — сам контейнер. Для модели на хосте укажите адрес, доступный из контейнера. + +[Модели](docs/MULTI_LLM_PROVIDER_GUIDE.md) (кит.) · [Локально и контейнеры](docs/CLI_AND_MCP.md) (кит.) + +## Благодарим спонсоров ❤️ + + + + + + + + + + +
+ 88API
+ 88API +
+ Благодарим 88API за поддержку AutoClip! Платформа объединяет GPT, Claude, Gemini, Grok, DeepSeek, Kimi и GLM для анализа субтитров, выбора ярких моментов и создания заголовков.
+ 🎨 Мультимедиа: Модели изображений, видео и аудио, включая GPT-Image, Seedance, Veo, MiniMax Hailuo H3, Kling, Whisper и TTS. AutoClip использует совместимые API анализа, создания обложек и транскрипции.
+ 🏷️ Сервис и оплата: По информации партнёра, сервис управляется зарубежной компанией и предлагает поддержку операторов, счета и пополнение в соотношении 1:1; действуют условия платформы.
+ 🎁 Новым пользователям: Получите пробный кредит для проверки моделей по реферальной ссылке на условиях акции. Инструкция по настройке (англ.) +
+ Infistar
+ Infistar.cc +
+ Благодарим Infistar.cc за поддержку AutoClip! Сервис предоставляет API разных моделей для анализа субтитров длинных видео, выбора ярких моментов и создания заголовков.
+ ⚙️ Совместимый API: Выберите в AutoClip провайдера с поддержкой OpenAI-совместимого API и укажите Base URL, свой ключ API и доступную модель.
+ 🧩 Выбор моделей: Партнёр предлагает Claude, GPT, Gemini, DeepSeek и другие семейства. Выбирайте модели, поддерживающие совместимую конечную точку, чтобы сравнивать анализ субтитров и подбор ярких моментов.
+ 🏷️ Цены и услуги: По данным партнёра, некоторые модели доступны по цене от 1% официального тарифа, с оплатой в юанях, выставлением счетов и проверкой подлинности модели. Список моделей, действующие цены и условия уточняйте на платформе.
+ 🎁 Предложение для AutoClip: Новые пользователи могут получить $5 пробного кредита при регистрации по реферальной ссылке на условиях акции. Инструкция по настройке (англ.) +
## Частые вопросы
-Это бесплатно? Нужен API-ключ? - -Сам AutoClip по-прежнему бесплатен и открыт по лицензии MIT. Облачные провайдеры взимают плату за использование моделей и требуют ваш API-ключ. Для Ollama / LM Studio облачный ключ не нужен, но необходимы модели и подходящее оборудование. С **v1.3.2** зарубежная отправка требует ваш собственный аккаунт [Upload-Post](https://www.upload-post.com). Бесплатные и платные тарифы, а также дневные лимиты TikTok, YouTube, Instagram и других площадок, берутся со страниц самого Upload-Post. Это не обещания AutoClip. - -
- -
-Мои видео загружаются на сервер? +Это бесплатно? Нужен API Key? -Монтаж остаётся на вашем устройстве. Облачной модели отправляется текст субтитров. Готовый клип покидает компьютер только после нажатия «Публикация» и только на подключённые площадки. Его также можно скачать без публикации. Эта страница доступна в **v1.3.2**. Статистика и отчёты об ошибках зависят от версии и настроек; см. сведения о конфиденциальности. +Приложение бесплатно под MIT. Облачный анализ, транскрипция и AI-изображения используют ваши ключи и тарифы провайдера. Автообложка по умолчанию не вызывает платную генерацию. Ollama / LM Studio требуют железо, но не облачный ключ. Публикация — со своим Bilibili или [Upload-Post](https://www.upload-post.com).
-Можно работать без субтитров? +Видео куда-то отправляется? -Да, после установки локальных компонентов Whisper и речевой модели. Можно также импортировать готовый SRT. Точные субтитры помогают сократить ожидание и ошибки распознавания. +Нарезка и рендер на вашем компьютере. Облачный анализ отправляет нужные субтитры и текст; анализ изображения или генерация с референсом — необходимые кадры; облачная транскрипция — аудио. Локальные анализ и транскрипция не требуют соответствующего облачного API. Готовые клипы загружаются на подключённые площадки при выборе публикации. Аналитику и отчёты об ошибках можно выключить. [Конфиденциальность](docs/PRIVACY.en.md).
-Почему клипы не созданы? +Какие видео подходят лучше? -Проверьте этап сбоя: пустые субтитры, подключение к модели, слишком высокий порог оценки, FFmpeg и свободное место. Можно снизить порог с 0.7 до 0.5, но это не гарантирует создание клипов. +Основные проверенные случаи — интервью, подкасты, курсы и речь. Авторские субтитры быстрее всего; иначе используйте локальную/облачную транскрипцию. Для игр или малого диалога включите анализ кадров с подходящей моделью и проверьте выбранные моменты.
-Какие видео подходят и сколько времени занимает обработка? +Почему нет клипов? -Анализ опирается на субтитры, поэтому подходят интервью, подкасты, лекции и речевые комментарии. Для визуального действия или музыки результат может быть ограничен. Время зависит от длительности, оборудования, модели и экспорта; начните с короткого образца. +Проверьте транскрипцию, соединение с моделью, FFmpeg, диск и условия площадки. Длинный YouTube требует цельных клипов от 180 секунд; для короткого источника выберите Shorts/Bilibili. Если ошибка остаётся, приложите версию 1.5.0, OS, длительность, модель и очищенные логи в [известные проблемы](https://github.com/zhouxiaoka/autoclip/issues/96).
-[Полное руководство по устранению неполадок (английский)](docs/FAQ.en.md) · [Известные проблемы](https://github.com/zhouxiaoka/autoclip/issues/96) +[Неполадки](docs/FAQ.en.md) · [Известные проблемы](https://github.com/zhouxiaoka/autoclip/issues/96) ## Документация -README доступен на восьми языках; подробные руководства ниже в основном написаны на китайском. Языки перевода README не определяют языки интерфейса приложения или моделей распознавания речи. - -- [Установка и первые клипы (English)](docs/USER_INSTALLATION_GUIDE.en.md) -- [Развёртывание Docker (китайский)](DOCKER.md) -- [CLI, MCP и локальные модели (китайский)](docs/CLI_AND_MCP.md) -- [Провайдеры моделей (китайский)](docs/MULTI_LLM_PROVIDER_GUIDE.md) -- [Частые вопросы (китайский)](docs/FAQ.md) -- [Руководство для участников (китайский)](CONTRIBUTING.md) -- [История изменений](CHANGELOG.md) -- [Конфиденциальность (китайский / английский)](docs/PRIVACY.en.md) -- [Перевод README и обслуживание значков (китайский)](docs/i18n.md) - -## Участие и обратная связь - -Приветствуются исправления, отзывы и улучшения переводов. В сообщении об ошибке укажите ОС, версию, модель, шаги воспроизведения и журналы ошибок без конфиденциальных данных. +| Нужно | Документы | +| --- | --- | +| Установка и первые клипы | [Установка](docs/USER_INSTALLATION_GUIDE.en.md) | +| Свой хостинг и автоматизация | [Docker](docs/DOCKER.en.md) · [CLI / MCP](docs/CLI_AND_MCP.md) (кит.) · [Agent skill](skills/autoclip/SKILL.md) (кит.) · [OpenCode](docs/OPENCODE.en.md) | +| Модели и сбои | [Модели](docs/MULTI_LLM_PROVIDER_GUIDE.md) (кит.) · [FAQ](docs/FAQ.en.md) | +| Версии, план, приватность | [Changelog](CHANGELOG.md) · [План](ROADMAP.md) (кит.) · [Доска](docs/COMMUNITY_BOARD.md) (кит.) · [Приватность](docs/PRIVACY.en.md) | +| Участие и перевод | [Вклад](CONTRIBUTING.md) (кит.) · [Переводы](docs/i18n.md) (кит.) | -Проект поддерживает один человек в свободное время. Срок ответа не фиксирован; мгновенная поддержка и индивидуальная помощь с развёртыванием не предоставляются. Перед обращением прочитайте FAQ и список известных проблем. +## Участие -Идеи, сценарии и запросы моделей публикуйте в [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions). Воспроизводимые ошибки оформляйте через [шаблон issue](https://github.com/zhouxiaoka/autoclip/issues/new/choose). Правила доски: [community board](docs/COMMUNITY_BOARD.md) (на китайском). +Правки, примеры, отзывы и переводы приветствуются. Если AutoClip помог — звезда кстати. -- [Приветствие и категории](https://github.com/zhouxiaoka/autoclip/discussions/127) -- [Вопросы о первом клипе](https://github.com/zhouxiaoka/autoclip/discussions/128) -- [Идеи](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Общение:** [Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [Первый клип](https://github.com/zhouxiaoka/autoclip/discussions/128) · [Идеи](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **Баги:** [форма](https://github.com/zhouxiaoka/autoclip/issues/new/choose) с ОС, версией, моделью, шагами и журналами без секретов +- **Партнёрство:** [christine_zhouye@163.com](mailto:christine_zhouye@163.com) -- Электронная почта: [christine_zhouye@163.com](mailto:christine_zhouye@163.com) +Ведёт один человек. Живой поддержки и личного деплоя нет. -Спасибо проектам FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper и всем участникам. Проект распространяется по [лицензии MIT](LICENSE). Если AutoClip вам помогает, поддержите проект звездой. +![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date) -[![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date)](https://star-history.com/#zhouxiaoka/autoclip&Date) +Спасибо FastAPI, React, Tauri, FFmpeg, yt-dlp, Whisper, FunASR и всем, кто вкладывается. [MIT License](LICENSE). diff --git a/README.md b/README.md index 6fb12a0d0..4541a8d2d 100644 --- a/README.md +++ b/README.md @@ -1,187 +1,335 @@
-AutoClip +AutoClip # AutoClip -**把长视频变成值得分享的精彩片段。** +### 一个链接,一键出片 -**简体中文** · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md) +开源,在你的电脑上剪辑与渲染。贴一个链接,选好平台,生成 视频、封面和发布文案,
+适配抖音、小红书、TikTok、Reels、YouTube Shorts、B 站与 YouTube。
+软件免费,云端模型按量计费;需要调整时可进入编辑器。 -[![GitHub release](https://img.shields.io/github/v/release/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/releases/latest) -[![GitHub stars](https://img.shields.io/github/stars/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/forks) -[![GitHub issues](https://img.shields.io/github/issues/zhouxiaoka/autoclip?style=flat-square)](https://github.com/zhouxiaoka/autoclip/issues) -[![License: MIT](https://img.shields.io/github/license/zhouxiaoka/autoclip?style=flat-square)](LICENSE) +

+ GitHub release + GitHub stars + Downloads + License: MIT +

-[项目网站](https://zhouxiaoka.github.io/autoclip_intro/) · [讨论](https://github.com/zhouxiaoka/autoclip/discussions) · [反馈问题](https://github.com/zhouxiaoka/autoclip/issues) +AutoClip — GitHub Trending -**桌面安装包: [macOS · Apple Silicon](https://github.com/zhouxiaoka/autoclip/releases/latest) · [Windows · x64](https://github.com/zhouxiaoka/autoclip/releases/latest)** +**[官网](https://zhouxiaoka.github.io/autoclip_intro/)** · **[下载桌面版](https://github.com/zhouxiaoka/autoclip/releases/latest)** · [案例库](https://zhouxiaoka.github.io/autoclip_intro/cases/) · [快速开始](#快速开始) · [文档](#文档) · [问题反馈](https://github.com/zhouxiaoka/autoclip/issues/new/choose) -[安装与第一次出片](docs/USER_INSTALLATION_GUIDE.md) · [完整排错指南](docs/FAQ.md) +**简体中文** · [English](README-EN.md) · [日本語](README-JA.md) · [한국어](README-KO.md) · [Español](README-ES.md) · [Português](README-PT.md) · [Русский](README-RU.md) · [Français](README-FR.md)
-自 v1.3.1 起,产品界面、官网和 README 均支持中、英、日、韩、西、葡、俄、法。顶栏可切换界面语言或跟随系统;用户素材和生成内容保留原文。 +**[1.5.0 已正式发布](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)**,桌面、CLI 与 MCP 同步更新。一键出片、字幕分页、人物取景与长视频队列修复见 [更新日志](CHANGELOG.md)。旧版用户请升级。 + +## 真实成片 + +点击截图或「播放」直接观看完整成片;下方语言指成片字幕语言。这里精选 6 条,展开可看另外 10 条。 + +### 竖版 · 访谈式与满屏播客式 + + + + + + + + +
+Bill Gates — AI测试时竟会装傻?
+Bill Gates
+访谈式 · 抖音 · 中文
+▶ 播放 1:01 · 原片 +
+AI Experts Debate — We're Driving Toward a Cliff in the Fog
+AI Experts Debate
+访谈式 · Shorts · 英文
+▶ 播放 1:25 · 原片 +
+Tony Robbins — 风险极小,回报极大?
+Tony Robbins
+满屏播客 · 抖音 · 中文
+▶ 播放 1:45 · 原片 +
+Andrew Garfield × Amy Poehler — I Love Competition—but Hate Fake Casualness
+Andrew Garfield × Amy Poehler
+满屏播客 · Shorts · 英文
+▶ 播放 1:01 · 原片 +
+ +### 横版 · 保留原画幅 + + + + + + +
+佟丽娅 × 鲁豫 — 舞蹈是我骨子里的东西
+佟丽娅 × 鲁豫
+原画幅 · B 站 · 中文
+▶ 播放 1:41 · 原片 +
+Sam Altman — AI是文艺复兴,还是工业革命?
+Sam Altman
+原画幅 · B 站 · 中文
+▶ 播放 2:02 · 原片 +
-AutoClip 用 AI 分析视频字幕、定位高光、生成标题,并自动剪出片段与合集。适合访谈、播客、课程和直播回放,提供桌面应用、Docker Web 界面和 CLI / MCP 三种使用方式。 +
+查看更多 10 条真实成片 + + + + + + + + + + + + + + + + + + + + +
+Adam Neumann — Success is how you feel one minute before death—full of love, no regret
+Adam Neumann
+满屏播客 · TikTok · 英文
+▶ 播放 0:59 · 原片 +
+小奇 × 鲁豫 — 想证明自己,又怕被注视
+小奇 × 鲁豫
+访谈式 · 抖音 · 中文
+▶ 播放 0:50 · 原片 +
+郭柯宇 × 鲁豫 — 演员的快感在创作过程 不在结果
+郭柯宇 × 鲁豫
+访谈式 · 抖音 · 中文
+▶ 播放 1:11 · 原片 +
+Willem Dafoe — Fake teeth made him feel lascivious and instantly became the character
+Willem Dafoe
+满屏播客 · TikTok · 英文
+▶ 播放 1:07 · 原片 +
+TIM × 罗永浩 — 红得快的网红 糊得更快
+TIM × 罗永浩
+访谈式 · 抖音 · 中文
+▶ 播放 1:05 · 原片 +
+Jensen Huang — AI是五层蛋糕 能源才是底层
+Jensen Huang
+访谈式 · 小红书 · 中文
+▶ 播放 1:17 · 原片 +
+Andrej Karpathy — AI还不能当实习生用 因认知能力严重不足
+Andrej Karpathy
+访谈式 · 抖音 · 中文
+▶ 播放 0:43 · 原片 +
+A20 Pro — 苹果芯片不是拼乐高
+A20 Pro
+访谈式 · 小红书 · 中文
+▶ 播放 2:00 · 原片 +
+Sylvester Stallone — 60岁写《洛奇》 是向衰老宣战
+Sylvester Stallone
+访谈式 · 抖音 · 中文
+▶ 播放 1:39 · 原片 +
+MrBeast — YouTube's first 5 seconds matter more than thumbnails
+MrBeast
+满屏播客 · TikTok · 英文
+▶ 播放 1:42 · 原片 +
-## 界面预览 +
-![AutoClip v1.3.0 — local video import](docs/images/import-local.jpg) +视频、封面与发布文案见 **[官网案例库 →](https://zhouxiaoka.github.io/autoclip_intro/cases/)**,欢迎[投稿你的成片](https://github.com/zhouxiaoka/autoclip/discussions/new?category=show-and-tell)。原片版权归原作者,仅作效果展示。 -v1.3.0 真实 Web 界面:在文件导入区添加本地视频,可同时提供 SRT 字幕。 +## 能做什么 -## 社区成就 +### 贴链接就出片 -

- AutoClip — GitHub Trending - AutoClip — Trendshift Python daily ranking - AutoClip — Trendshift daily ranking, all languages -

+选好平台,按平台的画幅与时长要求自动生成。每个平台按评分自动生成至多 10 条合格片段,其余列为备选,点「生成这条」再制作。每条都带封面、标题、简介、话题和 ZIP 发布包。 + +### 成片自己会包装 + +抖音 / 小红书默认访谈式,TikTok / Reels / Shorts 默认满屏播客式;竖版也可自行选择两种版式。字幕和文案语言仍按平台,B 站 / YouTube 为横版。画面跟随说话人,无人镜头保留完整画面。自动品牌片尾默认开启,可在设置中关闭;复制发布文案不附 AutoClip 署名。 + +### 还在你的电脑上 + +剪辑、取景与渲染在本机完成。分析模型自选,字幕可用作者字幕、本地 Whisper / SenseVoice 或已配置的云端转写。CLI / MCP 与桌面共用同一条一键出片链路。 + +## 真实素材的耗时与费用 -以下徽章由 Trendshift 提供,点击可查看 AutoClip 的上榜记录。GitHub Trending 与 Trendshift 是不同榜单;徽章展示平台记录的成就,不代表当前实时排名。 +以下是开发期间三条不同素材的实测,不是同一输入的速度对照。费用按当时 qwen-plus 的文字模型用量估算,不含云端语音识别、AI 生图或投稿服务费用;实际账单以所选服务商为准。 -## 你可以做什么 +| 版本 | 原片 | 出片 | 文字模型费用估算(人民币) | +| --- | --- | ---: | ---: | +| **新版 · 有字幕** | Jensen · 1h43m(英 → 小红书) | **7.5 分钟 / 10 条** | **¥0.09** | +| 新版 · 无字幕 | TIM × 罗永浩 · 2h52m(中 → 抖音) | 29.5 分钟 / 10 条 | ¥0.20 | +| 旧版 | MrBeast · 2h06m(英 → TikTok) | 65 分钟 | ¥0.64 | -| 能力 | 说明 | -| --- | --- | -| 导入素材 | 支持本地视频、YouTube 与 B 站链接,可附带 SRT 字幕。 | -| 发现高光 | 从字幕提取大纲、话题时间线、精彩度评分和片段标题。 | -| 剪辑与合集 | 自动生成视频切片,组合推荐合集,也可手动调整顺序。 | -| 发布(v1.3.2) | 切片就绪后,在同一页打开发布。自 **v1.3.2** 起可用。海外走你自己的 Upload-Post 账号里已连接的平台:TikTok、Instagram、YouTube、Facebook、LinkedIn、X、Threads、Pinterest、Bluesky、Discord、Telegram、Google Business,以该账号实际连接的为准。B 站在设置里粘贴一次 Cookie(须含 SESSDATA、bili_jct、DedeUserID),一个账号。可现在发或定时;标题和描述可不填,默认用切片标题;字幕烧录默认打开,片头约 4 秒标题卡默认打开。可见范围在平台支持时默认「仅自己」,对外只对 TikTok、YouTube、B 站承诺仅自己 / private。也可以只下载、不发布。项目页有发布记录和月历,可取消尚未发出的排期。「排这一周」只排海外,填周一、周三、周五 09:00,不含 B 站。竖屏账号渲成 9:16,不按 60 秒截断;只发 B 站用横屏;只有 LinkedIn、X 这类横屏账号时用原画;竖屏和 B 站同一次各渲各的。 | -| 自动封面(v1.3.2) | 发布时可自动生成封面,避免 B 站空封面被拒。默认封面和标题卡的细节随本版安装包说明。自 **v1.3.2** 起可用。 | -| 发布导出 | 提供抖音、小红书、YouTube Shorts 和 B 站导出预设,支持烧录字幕与标题卡。 | -| 自由选择模型 | 支持通义千问、OpenAI 兼容接口、Gemini、硅基流动,以及 Ollama / LM Studio 本地模型。 | -| 接入自动化 | 通过 CLI 批量编排,或让支持 MCP 的客户端调用同一条处理流水线。 | +
+测试条件与记录 + +2026-10-01,同一台 Apple Silicon Mac。前两条为新链路、自动生成 10 条;旧链路生成 33 条,素材与输出数量不同。Jensen 使用作者字幕,TIM 使用本地 Whisper base。 + +已有作者字幕时跳过转写;没有字幕时可选本地或云端转写。追加平台和制作备选会增加处理时间与用量。完整阶段记录与估算口径见 [成本与时间](docs/COST_PER_VIDEO.md)。 + +
+ +## 模型与数据由你选择 -> 导入视频 → 准备字幕 / 语音转写 → AI 分析与评分 → 生成切片与合集 → 导出成片 +剪辑和渲染在你的电脑上完成。使用云端分析会发送相关字幕与文案;画面理解或参考帧生图会发送所需抽样画面,云端转写会发送音频。使用本地分析与本地转写时不需要对应云端 API。成片只有选择投稿后才上传到已连接的平台;匿名统计与错误报告可在设置中关闭。详见 [隐私说明](docs/PRIVACY.md)。 ## 快速开始 -### 1. 桌面版 +| 你的使用场景 | 建议方式 | 准备事项 | +| ----------------- | ------------- | --------------------------------- | +| 在电脑上出片 | **桌面版** | macOS Apple Silicon 或 Windows x64 | +| 自建 Web 服务 / Linux | **Docker** | Docker 与 Compose v2 | +| 批量处理 / 接入 Agent | **CLI / MCP** | Python 3.10+(建议 3.11)与 FFmpeg | -从 [GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases/latest) 下载适合你的安装包: +### 桌面版 -| 平台 | 安装方式 | -| --- | --- | -| macOS · Apple Silicon | `.dmg` | -| Windows 10 / 11 · x64 | `-setup.exe` | -| Intel Mac / Linux | 使用下方 Docker 或 CLI | +1. **下载安装**:在 [Releases](https://github.com/zhouxiaoka/autoclip/releases/latest) 下载。macOS Apple Silicon 选 `.dmg`,Windows 10 / 11 x64 选 `-setup.exe`。安装包自带 Python 和 FFmpeg。 +2. **配置模型**:在设置里选择服务商、填写 API Key,选择可用的分析模型,测试连接并保存;本地模型先在 Ollama / LM Studio 启动服务并加载模型。 +3. **贴链接,选平台**:先试一条有字幕的访谈或播客,可选择竖版版式;无字幕时在设置中准备 Whisper / SenseVoice,或配置云端转写。 +4. **检查并下载**:预览自动成片,检查字幕、取景与内容完整性,再下载发布包或连接账号投稿;需要更多片段时生成备选。 -桌面安装包内置 Python 和 FFmpeg。实际支持的平台与首次启动说明以对应 Release 为准。安装后先在设置中选择模型提供商、测试连接并保存,再导入视频。 +Intel Mac / Linux 可使用 Docker 或 CLI。安装要求、系统首次启动提示和本次发布的验收范围见 [安装指南](docs/USER_INSTALLATION_GUIDE.md) 与 [1.5.0 Release](https://github.com/zhouxiaoka/autoclip/releases/tag/v1.5.0)。 -### 2. Docker / Web +[完整安装与首次使用指南](docs/USER_INSTALLATION_GUIDE.md) · [遇到问题?](docs/FAQ.md) -需要 Docker 和 Docker Compose v2。以下命令在仓库根目录执行: +**Docker / Web 部署** ```bash git clone https://github.com/zhouxiaoka/autoclip.git cd autoclip -``` - -```bash cp env.example .env -``` - -启动前编辑 `.env`:选择 `LLM_PROVIDER`,填写对应服务的 API Key 和模型名;也可以启动后在设置页配置。 - -```bash mkdir -p data logs uploads docker compose up -d --build ``` -打开 [Web 界面](http://localhost:3000);[API 文档](http://localhost:8000/docs) 在后端启动后可用。部署细节见 [Docker 指南](DOCKER.md)(中文)。 +打开 [Web 界面](http://localhost:3000);[API 文档](http://localhost:8000/docs) 在后端启动后可用。部署细节见 [Docker 指南](DOCKER.md)。 -Linux 上若绑定目录出现权限错误,先执行以下命令修正项目数据目录的归属,再重新启动服务: +Linux 上若绑定目录出现权限错误,先修正数据目录的归属再启动: ```bash docker compose run --rm --no-deps --user root --entrypoint sh autoclip -c 'chown -R autoclip:autoclip /app/data /app/logs /app/uploads' docker compose up -d ``` -### 3. CLI / MCP +从局域网 IP 或自定义域名打开时,在 `.env` 的 `AUTOCLIP_ALLOWED_ORIGINS` 填入前端地址(可逗号分隔)。 + +**CLI / MCP** -需要 Python 3.10+(建议 3.11)和 PATH 中可用的 FFmpeg。以下安装示例使用 macOS / Linux shell;Windows PowerShell 用 `venv\Scripts\Activate.ps1` 激活虚拟环境。CLI 本地处理不需要 Redis。 +需要 Python 3.10+(建议 3.11),FFmpeg 与 FFprobe 在 PATH 中可用;本地 CLI 不需要 Redis。下载 [正式 CLI / MCP ZIP](https://github.com/zhouxiaoka/autoclip/releases/download/v1.5.0/autoclip-1.5.0-cli-mcp.zip),解压后在该目录执行: ```bash -git clone https://github.com/zhouxiaoka/autoclip.git -cd autoclip python3 -m venv venv source venv/bin/activate python -m pip install -r requirements.txt -python -m pip install -e . +python -m pip install --force-reinstall --no-deps autoclip-1.5.0-py3-none-any.whl ``` -本地模型示例:先安装并启动 Ollama,再下载模型。无字幕视频需要 `faster-whisper`,首次转写会下载语音模型;已有字幕可用 `--srt talk.srt`。 +以上命令用于 macOS / Linux。Windows 用 `py -m venv venv` 创建环境、`.\venv\Scripts\Activate.ps1` 激活;随后使用相同的 `python -m pip` 安装命令。 -```bash -ollama pull qwen2.5:7b -python -m pip install faster-whisper -autoclip doctor --provider ollama -autoclip run talk.mp4 --provider ollama --json -``` - -把 `PROJECT_ID` 替换为处理结果中的项目 ID,即可导出 Shorts 格式;用 `autoclip mcp` 启动 stdio MCP 服务: +先保存模型配置:可复用桌面设置;独立使用时按 ZIP 的无密钥示例配置自己的数据目录,详见 [CLI / MCP 指南](docs/CLI_AND_MCP.md)。`produce` 不使用旧 `run --provider` 的临时覆盖。已有字幕可用 `--srt` 跳过转写。 ```bash -autoclip export PROJECT_ID --preset shorts -autoclip mcp +autoclip --version +autoclip produce talk.mp4 --srt talk.srt --platform douyin --portrait-style podcast --json +autoclip outputs PROJECT_ID --export-kits ``` -在 MCP 客户端中将 `command` 设为虚拟环境里 `autoclip` 的绝对路径,`args` 设为 `["mcp"]`。详见 [CLI / MCP 指南](docs/CLI_AND_MCP.md)(中文)和 [Agent skill](skills/autoclip/SKILL.md)(中文)。 +MCP 服务由客户端启动。需要单独调试时,在另一个终端运行 `autoclip mcp`;使用 OpenCode 可执行 `autoclip mcp install opencode` 写入客户端配置。 -## 模型配置 +把 `PROJECT_ID` 换成制作结果中的项目 ID。MCP 新入口为 `start_quick_output` / `get_quick_output_status`;客户端 `command` 指向虚拟环境中的 `autoclip` 绝对路径,`args` 为 `["mcp"]`。旧 `run` / `export` 和旧切片工具继续兼容。详见 [CLI / MCP](docs/CLI_AND_MCP.md)、[OpenCode 接入](docs/OPENCODE.md) 与 [Agent skill](skills/autoclip/SKILL.md)。 -| 方式 | 配置 | -| --- | --- | -| 云端模型 | 在设置中选择通义千问、OpenAI 兼容接口、Gemini 或硅基流动,填写 API Key;兼容接口可配置 Base URL。 | -| Ollama | 服务地址默认为 `http://localhost:11434/v1`,默认模型 `qwen2.5:7b`,无需 API Key。 | -| LM Studio | 加载模型并启动 Local Server,默认地址 `http://localhost:1234/v1`,选择服务实际提供的模型。 | +## 模型配置 -Docker 访问宿主机模型服务时,`localhost` 指向容器自身;需配置容器能访问的宿主机地址。详见 CLI / MCP 指南。视频剪辑在本地进行,云端模型分析会向所选服务发送字幕文本;下载视频与模型仍需要网络。 +| 方式 | 配置 | +| --------- | -------------------------------------------------------------- | +| 云端 API | 在设置中选择服务商,填写自己的 API Key。OpenAI 兼容服务还可配置 Base URL。 | +| Ollama | 默认地址 `http://localhost:11434/v1`;先拉取并启动本地模型,再选择服务实际提供的模型,无需 API Key。 | +| LM Studio | 加载模型并启动 Local Server,默认地址 `http://localhost:1234/v1`。 | + +Docker 访问宿主机模型服务时,`localhost` 指向容器自身,需要改为容器可访问的宿主机地址。 + +[模型配置指南](docs/MULTI_LLM_PROVIDER_GUIDE.md) · [本地模型与容器配置](docs/CLI_AND_MCP.md) + +## 特别感谢 ❤️ + + + + + + + + + + +
+ 88API
+ 88API +
+ 感谢 88API Token聚合平台 赞助 AutoClip!聚合 GPT、Claude、Gemini、Grok、DeepSeek、Kimi、GLM 等语言与编程模型,适合字幕分析、高光筛选与标题生成。
+ 🎨 多媒体能力:平台提供 GPT-Image、Gemini、Grok 等图片模型,Seedance、Veo、MiniMax Hailuo H3、Kling、Grok 等视频模型,以及 Whisper、TTS 等语音能力;AutoClip 可接入兼容的分析、封面生图与字幕转写接口。
+ 🏷️ 服务与结算:据合作方介绍,由海外企业运营,提供人工客服、正规发票,充值比例 1:1;具体模型、服务与结算条件以平台页面为准。
+ 🎁 新用户福利:通过 专属推广链接注册可获体验额度,用于测试模型能力,领取条件以活动页面为准。 接入说明 +
+ Infistar
+ Infistar.cc
无限星河
+
+ 感谢 Infistar.cc 无限星河 赞助 AutoClip!提供多模型 API 服务,适合长视频字幕分析、高光筛选与标题生成等工作流。
+ ⚙️ 兼容接入:在 AutoClip 选择 OpenAI 兼容接口,填写 Base URL、API Key 和可用模型,即可配置使用。
+ 🧩 多模型选择:合作方提供 Claude、GPT、Gemini、DeepSeek 等系列模型,可选择支持兼容接口的型号,对比字幕分析与高光筛选效果。
+ 🏷️ 价格与服务:据合作方介绍,部分模型低至官方定价的 0.1 折,支持人民币结算、开票及模型验真;具体型号、价格与服务条件以平台页面为准。
+ 🎁 AutoClip 专属福利:通过 专属推广链接注册可领取 $5 体验额度,领取条件以活动页面为准。 接入说明 +
## 常见问题
需要付费或 API Key 吗? -AutoClip 本身仍然免费、开源(MIT)。云端模型由所选服务商计费,需要自己的 API Key;Ollama / LM Studio 本地预设无需云端 Key,但需要模型和相应硬件。自 **v1.3.2** 起,海外发布需要你自己的 [Upload-Post](https://www.upload-post.com) 账号。免费档、付费档,以及 TikTok、YouTube、Instagram 等的每日额度,以 Upload-Post 自己的页面为准,不是 AutoClip 的承诺。 +软件免费、MIT 开源。云端分析、转写与 AI 生图按所选服务商计费,需自己的凭据;自动设计封面默认不调用付费生图。Ollama / LM Studio 本地分析不需要云端 Key,但需相应硬件。直接投稿还需自己的 B 站或 [Upload-Post](https://www.upload-post.com) 账号。
我的视频会上传吗? -剪辑留在你的设备上。使用云端模型时,字幕文本会发送给该服务商。成片只有在你点「发布」之后才会离开这台机器,发到你已连接的平台;也可以只下载、不发布。这一发布页自 **v1.3.2** 起可用。统计与错误报告取决于版本和设置,详见隐私说明。 +剪辑和渲染在你的电脑上完成。使用云端分析会发送相关字幕与文案;画面理解或参考帧生图会发送所需抽样画面,云端转写会发送音频。使用本地分析与本地转写时不需要对应云端 API。成片只有选择投稿后才上传到已连接的平台;匿名统计与错误报告可在设置中关闭。详见 [隐私说明](docs/PRIVACY.md)。
-没有字幕也能使用吗? +什么视频效果最好? -可以,需要先准备本地 Whisper 组件和语音模型。已有字幕时可同时导入 SRT;准确字幕通常能减少转写等待和识别错误。 +访谈、播客、课程和口播是主要验证场景,有作者字幕时最快。缺字幕可用本地或云端转写;游戏录屏、口播较少的素材可启用画面识别并选择支持图片的模型,仍需检查实际选段。
为什么没有生成片段? -先检查失败阶段:字幕是否为空、模型连接是否成功、评分阈值是否过高,以及 FFmpeg 和磁盘是否正常。可以尝试把评分阈值从 0.7 降到 0.5,但不保证一定有片段。 - -
- -
-什么视频更适合?处理要多久? - -当前分析主要基于字幕,适合访谈、播客、课程和口播。纯视觉动作或音乐类视频效果可能有限。耗时取决于时长、硬件、模型与导出设置,建议先用自备的 3–5 分钟短样片验证。 - -第一次出片先试这条:[Jackie Dowling | Stanford Energy Fellow](https://www.youtube.com/watch?v=dtmjLzOtx8I)(Stanford ENERGY)。示例·非托管·自担使用权。 - -其他示例不必都试。多为英语对白,可开官方字幕或自备 SRT/Whisper。 - -- [The State of Startups in 2026](https://www.youtube.com/watch?v=yslXlV2BP_Y)(Y Combinator)。示例·非托管·自担使用权。 -- [Sam Altman on Astra, AGI, and the future of OpenAI](https://www.youtube.com/watch?v=VeizK1M7V7E)。第三方访谈(Sources Podcast,非 OpenAI 官方频道)。示例·非托管·自担使用权。 +先看具体失败阶段:字幕/转写是否成功、模型连接、FFmpeg 与磁盘是否正常,以及候选是否满足目标平台规则。YouTube 长视频要求完整片段至少 180 秒,短素材可选 Shorts 或 B 站。仍失败请附 1.5.0 版本、系统、素材时长、模型和脱敏日志,见 [已知问题](https://github.com/zhouxiaoka/autoclip/issues/96)。
@@ -189,32 +337,24 @@ AutoClip 本身仍然免费、开源(MIT)。云端模型由所选服务商 ## 文档 -README 提供八种语言;以下深入文档目前以中文为主。README 翻译语言不代表应用界面或转写模型支持的语言范围。 - -- [安装与第一次出片](docs/USER_INSTALLATION_GUIDE.md) -- [Docker 部署(中文)](DOCKER.md) -- [CLI、MCP 与本地模型(中文)](docs/CLI_AND_MCP.md) -- [模型提供商配置(中文)](docs/MULTI_LLM_PROVIDER_GUIDE.md) -- [常见问题(中文)](docs/FAQ.md) -- [贡献指南(中文)](CONTRIBUTING.md) -- [更新日志](CHANGELOG.md) -- [隐私说明(中文 / English)](docs/PRIVACY.en.md) -- [README 翻译与徽章维护(中文)](docs/i18n.md) - -## 参与贡献与联系 - -欢迎提交修复、使用反馈和翻译改进。报告问题时请附上系统、版本、所选模型、复现步骤及已脱敏的错误日志。 +| 你想了解 | 文档 | +| --------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| 安装与首次出片 | [安装指南](docs/USER_INSTALLATION_GUIDE.md) | +| 自建服务与自动化 | [Docker 部署](DOCKER.md) · [CLI / MCP](docs/CLI_AND_MCP.md) · [Agent skill](skills/autoclip/SKILL.md) · [OpenCode 接入](docs/OPENCODE.md) | +| 配置模型与排错 | [模型配置](docs/MULTI_LLM_PROVIDER_GUIDE.md) · [常见问题](docs/FAQ.md) | +| 版本、路线图与隐私 | [更新日志](CHANGELOG.md) · [路线图](ROADMAP.md) · [社区看板](docs/COMMUNITY_BOARD.md) · [隐私说明](docs/PRIVACY.md) | +| 参与开发与翻译 | [贡献指南](CONTRIBUTING.md) · [翻译维护](docs/i18n.md) | -个人业余维护,回复时间不固定,不提供即时客服或一对一部署服务。联系前请先查看常见问题与已知问题。 +## 参与贡献 -想法、用法和模型讨论走 [GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions),不要为此开 Issue。能复现的故障用 [Issue 模板](https://github.com/zhouxiaoka/autoclip/issues/new/choose)。看板规则见 [社区看板](docs/COMMUNITY_BOARD.md)。 +欢迎提交修复、出片样例、使用反馈和翻译改进。如果 AutoClip 帮到了你,欢迎给项目一个 Star。 -- [欢迎与分类](https://github.com/zhouxiaoka/autoclip/discussions/127) -- [第一次出片问答](https://github.com/zhouxiaoka/autoclip/discussions/128) -- [想法](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **提问与交流**:[GitHub Discussions](https://github.com/zhouxiaoka/autoclip/discussions) · [第一次出片问答](https://github.com/zhouxiaoka/autoclip/discussions/128) · [分享想法](https://github.com/zhouxiaoka/autoclip/discussions/129) +- **报告故障**:使用 [Issue 模板](https://github.com/zhouxiaoka/autoclip/issues/new/choose),附上系统、版本、所选模型、复现步骤与已脱敏日志 +- **合作联系**:[christine_zhouye@163.com](mailto:christine_zhouye@163.com) -- 邮箱: [christine_zhouye@163.com](mailto:christine_zhouye@163.com) +个人维护,回复时间不固定,不提供即时客服或一对一部署服务。 -感谢 FastAPI、React、Tauri、FFmpeg、yt-dlp、Whisper,以及所有贡献者。项目采用 [MIT License](LICENSE)。如果 AutoClip 帮到了你,欢迎给项目一个 Star。 +![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date) -[![Star History](https://api.star-history.com/svg?repos=zhouxiaoka/autoclip&type=Date)](https://star-history.com/#zhouxiaoka/autoclip&Date) +感谢 FastAPI、React、Tauri、FFmpeg、yt-dlp、Whisper、FunASR,以及所有贡献者。项目采用 [MIT License](LICENSE)。 diff --git a/RELEASE_CHECKLIST.md b/RELEASE_CHECKLIST.md index 8f3a8cac9..f009ef84f 100644 --- a/RELEASE_CHECKLIST.md +++ b/RELEASE_CHECKLIST.md @@ -1,55 +1,143 @@ -# AutoClip 周更发版清单 +# AutoClip 发版流程 -> 节奏:**每周一版**,版本号只是周次编号(`1.3.0 → 1.4.0 → …`,周中热修用 `x.y.1`)。 -> 目标不是「这版把什么做完」,而是「把 main 上已验证的改动每周发出去」。`HANDOFF.md` 里的 v1.3 / v1.4 分组只是优先级队列。 -> 一次完整发版(打 tag 到 Release 出包)约 25 分钟,全部由 `desktop-build.yml` 自动完成;人要做的只有下面打勾的事。 +> 2026-09-29 起所有发版都按这份执行。背景:9-22 到 9-27 六天发了 5 个版本,每版都没经过真机验收就直接推给全部用户, +> 热修又带出新问题。原则变成:**攒批、验收、先小范围、再推给所有人**。 +> 先构建未打标签的内部安装包并完成双平台产品验收,通过后才创建公开标签。构建和 Release 正文由 `desktop-build.yml` 自动完成。2026-10-02 起按 [完整测试验收工作流](docs/TESTING_ACCEPTANCE.md) 留可校验证据;转正必须通过 Release Acceptance。勾选清单本身不代表验收通过。 -## 周中(周一 – 周五) +## 0. 先给问题分级 -- [ ] 只合并 **CI 全绿 + 有验证记录** 的 PR(PR 描述里要有「怎么验的」)。外部 PR 按 `HANDOFF.md` 第三节原则处理。 -- [ ] 每个合入的 PR 都在 `CHANGELOG.md` 的 `## [未发布]` 里留一行(新增 / 修复 / 改进),写给用户看,不写内部实现。 -- [ ] 每版至少带一条 **失败态改善** 或 **安装体验改善**(issue 区最缺的两类)。 -- [ ] 周报(`scripts/weekly_digest.py`)里新出现的高频问题,当周能修就进这版,修不了写进 `HANDOFF.md` 待办。 +发现问题时先定级,级别决定要不要马上发版。 -## 切版(周六 / 周日,冻结后 24 小时内) +| 级别 | 什么情况 | 怎么处理 | +|---|---|---| +| **S1 优先热修** | 装不上、打不开、升级失败、丢数据、安全漏洞、常见升级配置挡住核心入口或主流程集中失败 | 立即排查、止血并准备最小补丁(见第 4 节);验收通过后发布,时限不能覆盖质量门槛 | +| **S2 进本周常规版** | 某个功能在特定条件下失败,有绕过办法 | 修好合进 main,周四随常规版发出 | +| **S3 排进计划** | 体验问题、文案、少见的边界情况 | 进 Roadmap,不单独发版 | -- [ ] main CI 绿(`gh run list --branch main --limit 1`)。 -- [ ] `python scripts/bump_version.py --check` 四处版本号一致。 -- [ ] 本地跑一遍 `pytest backend/tests`、`cd frontend && npm run lint && npm run typecheck && npm run build`、`python -m backend.eval`。 -- [ ] 通读 `CHANGELOG.md [未发布]`:措辞面向用户、每条能对应到 issue 或 PR、没有泄露内部路径 / 密钥。 -- [ ] `python scripts/bump_version.py X.Y.0 --commit` - → 改 `tauri.conf.json` / `Cargo.toml` / `pyproject.toml` / `desktop_config.py`,把 `[未发布]` 滚成 `[X.Y.0] - 日期`。 -- [ ] `git push origin main && git tag vX.Y.0 && git push origin vX.Y.0` - → 触发 `desktop-build.yml`:macOS arm64 DMG + Windows x64 安装包并行构建,`release` job 用 `scripts/release_notes.py` - 从 CHANGELOG 抽该版本段落 + 平台说明生成 Release 正文并挂产物。 -- [ ] 看 Actions 里 Desktop Build 全绿、Release 页两个文件都在(少一个 = 对应平台构建失败,看 run 日志)。 +大多数用户反馈是 S2。把 S2 当 S1 处理,版本数就会失控。 -## 发版后(当天) +## 1. 节奏与版本号 -- [ ] **真机验证(人做,CI 覆盖不到)**: - - Windows:干净机器装 `-setup.exe` → 能启动 → 设置页保存 provider → 跑通一条本地视频。**Windows 下载量是 DMG 的 3 倍,这一步不能省。** - - macOS:右键打开 DMG 里的应用 → 同上。 -- [ ] 更新置顶帖 #96 的版本号与「v1.x 修了什么」小节。 -- [ ] 上一版 Release 的 `needs-info` / 已修复 issue:引导升级后关闭(模板回复见 `HANDOFF.md` 第三节)。 -- [ ] `HANDOFF.md` 头部「更新:日期 · main@sha」与第四节勾选状态同步。 +- **常规版每周最多一版**,建议周四切版。main 上没有可发的就不发,不为凑版本发版。 +- **热修版只为 S1**,不受每周一版限制,但只包含修复那个问题的最小改动。 +- 版本号:`X.Y.Z+1` 用于兼容性修复;1.5.1、1.5.2、1.5.3 保留为未通过验收的预发布。下一候选只在源码中准备编号;公开标签和正式发布须有会话授权。内部修复、重复构建不递增公开版本号。新功能单独进入后续常规版本;修复期间不合新功能。 +- 同一个 tag 永远不重打。发现问题就用下一个补丁号。 -## 热修(周中发现影响面大的 bug) +## 2. 周中(合入 main) -- [ ] 单独分支 → PR → CI 绿 → 合入 → `bump_version.py X.Y.1 --commit` → 打 tag。不攒到周末。 +- [ ] 只合并 **CI 全绿 + PR 描述写了「怎么验的」** 的 PR。外部 PR 按 `HANDOFF.md` 第三节原则处理。 +- [ ] 每个合入的 PR 在 `CHANGELOG.md` 的 `## [未发布]` 里留一行,写给用户看,不写内部实现。 +- [ ] 周报(`scripts/weekly_digest.py`)里的高频问题按第 0 节定级。 -## 明确不做 +## 3. 常规版 -- 不在切版日合新功能;周六冻结后只合修 CI / 修 CHANGELOG 措辞的改动。 -- 不手工编辑四处版本号(用脚本),不手工写 Release 正文(从 CHANGELOG 生成)。 -- 不为了「凑一版大的」推迟发版。main 上有可发的就发。 +### 3.1 切版前(周三) +- [ ] main CI 绿:`gh run list --branch main --limit 1` +- [ ] `python scripts/bump_version.py --check` 版本号一致 +- [ ] 本地统一检查:`python scripts/quality_gate.py --report /absolute/local/evidence/quality.json`;记录提交和未提交改动 +- [ ] 通读 `CHANGELOG.md [未发布]`:面向用户、能对应到 issue / PR、没有内部路径 / 密钥 + +### 3.2 标签前:内部构建与双平台产品验收 +- [ ] 用 `bump_version.py X.Y.Z --commit` 准备未公开候选版本,但**不打 tag**;后续修复继续使用这个未公开编号 +- [ ] 完整源码检查与 PR CI 通过;冻结完整提交 SHA,推送候选分支 +- [ ] 在该分支运行 **Desktop Build**(`workflow_dispatch`),同时选 macOS / Windows。只生成 Actions artifacts,不创建 Release;已有公开版本号或已有标签会被拒绝 +- [ ] 构建与安装/升级检查全绿;下载双平台包、签名和 `internal-desktop-provenance`,核对源码 SHA、run ID、全部包哈希 +- [ ] 运行 `scripts/internal_acceptance.py init` 生成全 pending 的内部记录;逐项完成以下矩阵和每条修复,真实模型、费用、环境及限制按实际记录 +- [ ] 仅重跑修复影响的断言;已通过未影响断言按 [影响承接合同](docs/TESTING_ACCEPTANCE.md#影响范围与原执行证据承接) 保留原来源/包哈希/执行时间,并另记当前复核时间;独立 gate/证据分支改动不重建冻结产品 +- [ ] 有 pending / failed / skipped 场景或未解释的主流程失败时,继续在内部修复、重建、重新验收,**不得打 tag** + +两个平台执行 [必测矩阵](docs/TESTING_ACCEPTANCE.md#4-最终安装包的必测矩阵),包括下面基础项以及迁移、无字幕/视觉、失败恢复、保存/包装和隐私监控。记录内部包 SHA-256、完整提交、系统与运行时;脱敏结果进入 `docs/internal-builds/COMMIT/internal-acceptance.json` 与摘要,原始截图/日志留本地: + +- [ ] **Windows**(下载量约 80%,不能省) + - [ ] 从上一个正式版**覆盖升级**:安装过程不报文件占用,启动后设置和项目都在 + - [ ] 干净安装:能启动,设置页保存模型 + - [ ] 本地视频导入 → 出片 → 预览 → 导出 + - [ ] YouTube 或 B 站链接导入 → 进度在动 → 出片 +- [ ] **macOS**:同上四项(首次打开仍需右键打开,直到完成公证) +- [ ] 本版 CHANGELOG 里每条修复,至少在一台机器上亲手确认过 + +#### 没有 Windows 真机时(当前情况) + +Windows 验收分三层,前两层必须过,第三层补上界面和真实网络: + +1. **CI 自动冒烟(必须,tag 构建自动跑,不过就不会出 Release)**:`desktop-build.yml` 的 `smoke-windows-x64` 在干净的 windows-latest 上 + 装上一个正式版 → 模拟残留后端占住 `_asyncio.pyd` → 静默覆盖安装本次构建 → 用安装目录自带的 Python 跑 `scripts/verify_windows_install.py` + (内置 ffmpeg 出片、中文文件名、yt-dlp 拿到 ffmpeg、桌面后端启动、来源守卫)。覆盖了近两周 Windows 反馈里的主要故障点, + 但**看不到界面**,也不下载真实链接。 +2. **Mac 上的 Windows 虚拟机或经授权的测试者(产品验收必须)**:Parallels Desktop / VMware Fusion + Windows 11 ARM(x64 安装包可在 ARM 版 Windows 上仿真运行), + 或 UTM(免费)。做一次快照当「干净机器」,每次发版还原快照后走上面四项。这是界面、WebView2、真实下载唯一能亲眼看的地方。 + 仿真环境里性能和个别驱动行为和真机不同,记录时注明「ARM 虚拟机」。 +3. **Pre-release 测试者(建议)**:经授权联系测试者,使用合法素材按必测矩阵记录结果和包哈希;一句“能用”不足以替代验收。 + +第 2 层没有证据时保持 **NO-GO**。延长观察期或写免责声明不能替代 Windows 产品验收;不转正、不推给全部用户。 + +### 3.3 内部验收通过后:打 tag → Pre-release +- [ ] 将人工审阅过的脱敏内部 manifest 和摘要提交到独立证据分支;保留被验收的源码提交,不能因提交报告而改变构建身份 +- [ ] 运行 **Internal Acceptance**:源码完整 SHA、内部 Desktop Build run ID、已提交 manifest 路径;它核对双平台全部场景、修复、当前包哈希、新执行或受影响断言的新证据、原执行的影响承接证明、时间及实名复核;Internal/Release/Promote 都从同一已审计 dispatch ref 执行 gate +- [ ] Internal Acceptance 成功且用户已授权本版本后,在**被验收的原提交**创建带注解标签:注解必须有独立一行 `Internal-Acceptance-Run: RUN_ID`;不要在验收后再 bump / 合入修改 +- [ ] 推送标签。tag 的 Desktop Build 会核对上述不可变验收回执;缺失或提交不符时,阻断打包和 Pre-release +- [ ] exact tag CI、双平台构建、Windows 安装/升级和运行时全绿;Release 为 Pre-release,全部 DMG / EXE / wheel / ZIP / updater / 签名 / provenance 齐全 +- [ ] 核对正式构建包哈希与内部包;最终包仍须按必测矩阵留证。发生重建/换包时重跑受影响场景,不能把内部包记录改时间后冒充最终包验收 + +此时应用内更新和官网还不推送该候选;只有手动下载 Pre-release 的人能装。标签后的核对与观察是第二道门槛,不能取代标签前的内部产品验收。 + +### 3.4 观察期(24 小时,热修版可缩短到 4 小时) +- [ ] Sentry:新版本的错误数 / 受影响用户数,和上一版同期对比,没有新的高频错误 +- [ ] 应用内反馈(`from-app` issue)没有集中出现同一个问题 +- [ ] 手动下载 Pre-release 的用户没有报 S1 +- [ ] 两个平台都有实际设备及完成流程;去重、版本、样本量、观察时间和限制写入摘要,零事件不能填“没有问题” + +### 3.5 转正:推给所有人 +- [ ] Actions → **Release Acceptance** → tag、该 tag 的 build run ID、已提交的脱敏验收 manifest 路径;等待成功 +- [ ] Actions → **Promote / Halt Release** → `tag=vX.Y.Z`,`action=promote`,`acceptance_run_id=上一步成功 run ID` + → 该版本变成 latest,应用内更新开始推送,官网同步 +- [ ] 更新置顶帖 #96 的版本号和「这版修了什么」 +- [ ] 本版修复的 issue:回复「已在 vX.Y.Z 修复,请升级」后关闭;重复的 issue 合并到一个跟踪 issue 再一起关 +- [ ] `HANDOFF.md` 头部状态同步 + +## 4. 热修(S1) + +1. 从**出问题的 tag** 拉分支,不从 main 拉,避免捎带未验证的改动: + ```bash + git switch -c codex/hotfix-1.5.1 v1.5.0 + ``` +2. 只放修复这一个问题的最小改动,加一条能复现这个问题的回归测试。 +3. 在 hotfix 分支 review;源码检查和 CI 绿后准备未打标签的候选,先按 3.2 完成内部双平台验收和 Internal Acceptance,再按 3.3 在被验收提交打标签。把必需的质量/发布门槛带入,不混入其他运行时整理。 +4. 同一组修复 **cherry-pick 或合并回 main**,别让下个常规版把问题带回来。 +5. 走 3.3 双平台基线与本次回归 + 3.4 观察(可缩短到 4 小时)+ 3.5 Acceptance 与转正;hotfix 不跳过关键场景。 + +## 5. 坏版本已经推给所有人了 + +按顺序做: + +1. **止血,先让新用户别再升级**:Actions → **Promote / Halt Release** → `tag=坏版本`,`action=halt`,`fallback_tag=上一个好版本`。 + 坏版本退回 Pre-release,好版本重新成为 latest,应用内更新和官网都退回去。 +2. **告知**:在坏版本的 Release 正文顶部和 #96 写明「vX.Y.Z 有已知问题:…,请暂缓升级 / 已升级的请等待 vX.Y.Z+1」。 +3. **往前修,不回滚**:Tauri 更新器不会给已升级的用户降级,只能按第 4 节发补丁版解决他们的问题。 +4. **收口反馈**:同一问题的 issue 合并到一个跟踪 issue,补丁版转正后统一回复并关闭。 +5. **复盘一行**:在 CHANGELOG 或 `docs/RELEASE_X_Y.md` 里写「为什么这次没被拦住」,并补上对应的测试或冒烟检查项,同类问题不再从同一个地方漏出去。 + +## 6. 明确不做 + +- 不跳过 Pre-release 直接推给所有人,热修也不跳过。 +- 不在内部产品验收不过时打 tag,也不在最终包验收不过时转正;内部发现问题继续修同一个未公开候选,不靠递增版本号推进。 +- 不重打同名 tag,不手工改四处版本号(用脚本),不手工写 Release 正文(从 CHANGELOG 生成)。 +- 不直接用 `gh release edit` 或 GitHub 网页按钮绕过 Acceptance;promote 会重新检查当前包哈希与构建,旧记录不能放行新包。 +- 热修分支不合新功能;切版日不合新功能。 ## 相关文件 | 用途 | 位置 | |---|---| | 版本号统一 + CHANGELOG 滚动 | `scripts/bump_version.py` | -| Release 正文生成 | `scripts/release_notes.py`(被 `desktop-build.yml` 的 `release` job 调用) | -| 构建 workflow | `.github/workflows/desktop-build.yml`(tag `v*` 触发;`workflow_dispatch` 可只勾一个平台试构建) | -| 打包脚本 | `scripts/build_macos_arm.sh`、`scripts/build_windows_x64.sh`(说明见 `BUILD_GUIDE.md`、`scripts/README.md`) | +| 源码质量统一入口 | `scripts/quality_gate.py`、`.github/workflows/ci.yml` | +| 完整场景、证据与责任 | `docs/TESTING_ACCEPTANCE.md`、`AGENTS.md` | +| 验收校验 + Actions 证据 | `scripts/release_acceptance.py`、`.github/workflows/release-acceptance.yml` | +| Release 正文生成 | `scripts/release_notes.py`(`desktop-build.yml` 的 `release` job 调用) | +| 标签前产品验收 | `scripts/internal_acceptance.py`、`.github/workflows/internal-acceptance.yml`;成功回执绑定提交和内部包哈希 | +| 构建并发 Pre-release | `.github/workflows/desktop-build.yml`(tag `v*` 触发;`workflow_dispatch` 可只勾一个平台试构建,不会发布) | +| 转正 / 撤回 | `.github/workflows/promote-release.yml` | +| 应用内更新地址 | `src-tauri/tauri.conf.json` → `plugins.updater.endpoints`(`releases/latest/download/latest.json`) | +| 打包脚本 | `scripts/build_macos_arm.sh`、`scripts/build_windows_x64.sh` | | 每周反馈周报 | `scripts/weekly_digest.py` | | 当前状态 / 待办 | `HANDOFF.md` | diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 0a4a13798..38e9765ca 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,5 +1,7 @@ # AutoClip 桌面版发布说明 +> 自 **v1.4.0** 起,用户可见的版本说明以 [CHANGELOG.md](CHANGELOG.md) 和 [GitHub Releases](https://github.com/zhouxiaoka/autoclip/releases) 为准。本文保留较早版本的历史说明,不单独作为当前功能范围。 + ## v1.1.0 - 2026年5月 > 这一版让 macOS 桌面客户端**真正可装、可用、能出片**。v1.0.0 的安装包此前存在打不出产物、 diff --git a/ROADMAP.md b/ROADMAP.md index e20ca628f..bbeecd279 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,7 @@ # AutoClip 产品路线图 +> **2026-09-21 更新:近期执行入口为 [未来六周产品规划](docs/PRODUCT_PLAN_2026_Q4.md)。** 按最新方向,立即优先接入 Seed 多模态理解,以超休闲游戏买量素材为首个场景,交付覆盖创意编排和视听制作,并研究 Jev 对候选筛选与排序的收益;详见 [接入与评测计划](docs/MULTIMODAL_HIGHLIGHTS_PLAN.md)。效果对标与入库门槛见 [Golden Case 库](docs/GAME_AD_GOLDEN_CASES.md)。下文保留为历史长期方案;账号与 credits 商业化在重复需求验证后重新评估,旧阶段状态和工期不代表当前进度。 + > 从"纯本地桌面工具"演进为"有账号、有数据、可商业化"的产品。 > 适配前提:**托管额度 credits 计费 · 视频处理保持纯本地 · 国内外都要(国内先发)· 个人开发者 + AI**。 diff --git a/SECURITY.md b/SECURITY.md index 93cf1b911..5be8c67dc 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,239 +1,15 @@ # 安全政策 -## 支持的版本 +安全修复集中在当前 `main`,通过后续正式版本提供给安装包用户。旧版本没有独立维护分支;请查看 [Releases](https://github.com/zhouxiaoka/autoclip/releases) 与发布说明确认修复是否已进入你使用的版本。合入源码不代表已发布安装包。 -我们目前为以下版本提供安全更新: +## 报告问题 -| 版本 | 支持状态 | -| ---- | -------- | -| 1.0.x | ✅ 支持 | -| 0.9.x | ❌ 不支持 | +项目目前未开启 GitHub 私密漏洞报告。可使用维护者公开联系邮箱 [christine_zhouye@163.com](mailto:christine_zhouye@163.com)私下联系;如通过 Issue 联系,只描述需要建立安全联系,不公开漏洞利用步骤、API Key、Cookie、私人素材或含密钥的日志。建立私密渠道后,再提供影响版本、复现条件和脱敏证据。 -## 报告安全漏洞 +本项目没有公布专用安全邮箱、响应时限或第三方审计承诺。已公开的安全信息以[安全公告](https://github.com/zhouxiaoka/autoclip/security/advisories)、发布说明及对应修复记录为准。 -如果您发现了安全漏洞,请通过以下方式报告: +## 使用与更新 -### 报告方式 +桌面客户端与默认 Docker 配置面向本机或可信网络。公网部署需自行配置认证、TLS 和网络访问控制;不要直接公开 Redis、Flower 或未经保护的后台接口。不要把提供商 API Key 当成应用访问密码。 -**请勿在公开的GitHub Issues中报告安全漏洞!** - -1. **邮件报告** (推荐) - - 发送邮件至: security@autoclip.com - - 主题: [SECURITY] 安全漏洞报告 - -2. **GitHub安全建议** - - 访问: https://github.com/your-username/autoclip/security/advisories/new - - 点击"Report a vulnerability" - -### 报告内容 - -请包含以下信息: - -1. **漏洞描述** - - 详细描述安全漏洞 - - 影响的功能模块 - - 潜在的安全风险 - -2. **重现步骤** - - 详细的重现步骤 - - 必要的环境配置 - - 相关的代码片段 - -3. **影响评估** - - 漏洞的严重程度 - - 可能影响的用户范围 - - 潜在的数据泄露风险 - -4. **环境信息** - - 操作系统版本 - - Python版本 - - 项目版本 - - 其他相关环境信息 - -### 响应时间 - -- **确认收到**: 24小时内 -- **初步评估**: 72小时内 -- **修复计划**: 7天内 -- **修复发布**: 根据严重程度决定 - -## 安全最佳实践 - -### 部署安全 - -1. **环境变量安全** - ```bash - # 使用强密码 - API_DASHSCOPE_API_KEY=your_strong_api_key - - # 定期轮换密钥 - # 不要在代码中硬编码敏感信息 - ``` - -2. **网络安全** - - 使用HTTPS部署 - - 配置防火墙规则 - - 限制API访问来源 - - 启用CORS保护 - -3. **数据安全** - - 定期备份数据 - - 加密敏感数据 - - 实施访问控制 - - 监控异常访问 - -### 开发安全 - -1. **依赖管理** - ```bash - # 定期更新依赖 - pip install --upgrade -r requirements.txt - npm audit fix - - # 检查安全漏洞 - pip install safety - safety check - ``` - -2. **代码安全** - - 输入验证和清理 - - SQL注入防护 - - XSS攻击防护 - - CSRF保护 - -3. **API安全** - - 实施认证和授权 - - 限制请求频率 - - 验证输入参数 - - 记录安全日志 - -## 已知安全问题 - -### 已修复 - -- **CVE-2024-XXXX**: 描述已修复的安全问题 -- **CVE-2024-YYYY**: 另一个已修复的问题 - -### 待修复 - -- 暂无待修复的安全问题 - -## 安全更新 - -### 自动更新 - -我们建议用户: - -1. **定期更新依赖** - ```bash - # 后端依赖 - pip install --upgrade -r requirements.txt - - # 前端依赖 - cd frontend && npm update - ``` - -2. **监控安全公告** - - 关注GitHub安全公告 - - 订阅项目更新通知 - - 定期检查依赖漏洞 - -### 手动更新 - -对于关键安全更新: - -1. 查看发布说明 -2. 备份现有数据 -3. 按照升级指南操作 -4. 验证系统功能 - -## 安全配置 - -### 生产环境配置 - -```bash -# .env 生产环境配置示例 -ENVIRONMENT=production -DEBUG=false -LOG_LEVEL=WARNING - -# 使用强密码 -API_DASHSCOPE_API_KEY=your_production_api_key -ENCRYPTION_KEY=your_strong_encryption_key - -# 数据库安全 -DATABASE_URL=postgresql://user:password@localhost/autoclip - -# Redis安全 -REDIS_URL=redis://:password@localhost:6379/0 -``` - -### 网络安全 - -```nginx -# Nginx配置示例 -server { - listen 443 ssl; - server_name your-domain.com; - - ssl_certificate /path/to/cert.pem; - ssl_certificate_key /path/to/key.pem; - - # 安全头 - add_header X-Frame-Options DENY; - add_header X-Content-Type-Options nosniff; - add_header X-XSS-Protection "1; mode=block"; - - location / { - proxy_pass http://localhost:8000; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - } -} -``` - -## 安全审计 - -### 定期审计 - -我们定期进行以下安全审计: - -1. **依赖审计** - - 检查已知漏洞 - - 更新过时依赖 - - 移除未使用依赖 - -2. **代码审计** - - 静态代码分析 - - 安全代码审查 - - 渗透测试 - -3. **配置审计** - - 检查安全配置 - - 验证访问控制 - - 测试备份恢复 - -### 第三方审计 - -- 定期邀请安全专家审计 -- 参与开源安全项目 -- 遵循安全最佳实践 - -## 联系信息 - -- **安全邮箱**: security@autoclip.com -- **项目维护者**: [GitHub Profile](https://github.com/your-username) -- **紧急联系**: 通过GitHub Issues标记为"security" - -## 免责声明 - -本安全政策旨在帮助用户安全地使用AutoClip项目。我们努力保持项目的安全性,但不能保证绝对安全。用户需要: - -1. 自行评估安全风险 -2. 采取适当的安全措施 -3. 定期更新和维护系统 -4. 遵守相关法律法规 - ---- - -**最后更新**: 2024-01-15 +升级前备份数据库、项目文件和配置。源码部署按 `requirements.txt` 安装 Python 依赖,在 `frontend/` 执行 `npm ci`;不要通过无约束升级或自动修复命令绕过项目的依赖版本。具体启动与备份步骤见 [DOCKER.md](DOCKER.md) 和 [STARTUP_GUIDE.md](STARTUP_GUIDE.md)。 diff --git a/STARTUP_GUIDE.md b/STARTUP_GUIDE.md index 1bf7c820b..d8b16acb1 100644 --- a/STARTUP_GUIDE.md +++ b/STARTUP_GUIDE.md @@ -1,275 +1,46 @@ -# AutoClip 系统启动指南 +# 源码 Web 服务启动指南 -## 📋 概述 +普通用户优先使用 [README](README.md) 中的桌面客户端;本文用于 macOS/Linux 源码开发。容器部署见 [DOCKER.md](DOCKER.md),桌面打包见 [BUILD_GUIDE.md](BUILD_GUIDE.md)。 -AutoClip 是一个基于AI的视频切片处理系统,采用前后端分离架构。本指南将帮助您快速启动和运行整个系统。 +## 准备环境 -## 🚀 快速开始 - -### 1. 一键启动(推荐) - -```bash -# 完整启动(包含详细检查和健康监控) -./start_autoclip.sh - -# 快速启动(开发环境,跳过详细检查) -./quick_start.sh -``` - -### 2. 系统管理 - -```bash -# 检查系统状态 -./status_autoclip.sh - -# 停止所有服务 -./stop_autoclip.sh -``` - -## 📊 系统架构 - -### 后端服务 -- **FastAPI**: RESTful API 和 WebSocket 支持 -- **Celery**: 异步任务队列 -- **Redis**: 消息代理和缓存 -- **SQLite**: 数据存储 - -### 前端服务 -- **React**: 用户界面 -- **Vite**: 开发服务器 -- **TypeScript**: 类型安全 - -## 🔧 环境要求 - -### 系统要求 -- macOS 或 Linux -- Python 3.8+ -- Node.js 16+ -- Redis 服务器 - -### 依赖安装 +使用 Python 3.11、Node.js 20、Redis,以及可用的 FFmpeg。CI 使用 Python 3.11 / Node.js 20;前端依赖只在 `frontend/` 管理。 ```bash -# 1. 创建虚拟环境 python3 -m venv venv source venv/bin/activate - -# 2. 安装Python依赖 -pip install -r requirements.txt - -# 3. 安装前端依赖 -cd frontend -npm install -cd .. - -# 4. 安装Redis(macOS) -brew install redis -brew services start redis - -# 5. 配置环境变量 +python -m pip install -r requirements.txt +(cd frontend && npm ci) cp env.example .env -# 编辑 .env 文件,填入必要的配置 ``` -## 📝 配置文件 +编辑 `.env` 配置模型与 Redis,配置项见 [env.example](env.example)。macOS 可用 `brew install redis && brew services start redis`;Linux 使用发行版服务管理器启动 Redis。远程 Redis 不可用时,启动器会报错,不会用本地 Redis 或 SQLite 替代。 -### 环境变量 (.env) +## 启动与管理 ```bash -# 数据库配置 -DATABASE_URL=sqlite:///./data/autoclip.db - -# Redis配置 -REDIS_URL=redis://localhost:6379/0 - -# API配置 -API_DASHSCOPE_API_KEY=your_api_key_here -API_MODEL_NAME=qwen-plus - -# 日志配置 -LOG_LEVEL=INFO -ENVIRONMENT=development -DEBUG=true +./start_autoclip.sh # 前台运行,Ctrl+C 停止本次启动的服务 +./quick_start.sh # 同一启动流程,通过健康检查后转入后台 +./status_autoclip.sh # 返回非零状态表示服务缺失或检查失败 +./stop_autoclip.sh # 停止当前 checkout 记录的服务及子进程 ``` -## 🌐 服务端口 +脚本从自身所在目录运行,可以从其他目录调用。后台模式也可使用 `./start_autoclip.sh --detach`。默认 API 为 `http://localhost:8000`、Web 为 `http://localhost:3000`;用 `BACKEND_PORT` / `FRONTEND_PORT` 环境变量调整。启动器不会杀掉占用端口的其他进程;确认所属服务后再处理端口冲突。 -| 服务 | 端口 | 描述 | -|------|------|------| -| 前端界面 | 3000 | React 开发服务器 | -| 后端API | 8000 | FastAPI 服务器 | -| Redis | 6379 | 消息代理 | -| API文档 | 8000/docs | Swagger UI | - -## 📁 目录结构 - -``` -autoclip/ -├── backend/ # 后端代码 -│ ├── api/ # API路由 -│ ├── core/ # 核心配置 -│ ├── models/ # 数据模型 -│ ├── services/ # 业务逻辑 -│ └── tasks/ # Celery任务 -├── frontend/ # 前端代码 -│ ├── src/ # 源代码 -│ └── public/ # 静态资源 -├── data/ # 数据存储 -│ ├── projects/ # 项目数据 -│ └── uploads/ # 上传文件 -├── logs/ # 日志文件 -├── scripts/ # 工具脚本 -└── *.sh # 启动脚本 -``` +运行记录保存在 `backend.pid` / `frontend.pid` / `celery.pid` 和对应 `.pid.json`,日志位于 `logs/`。停止前验证进程命令、工作目录与创建时间;无法确认归属会报错,不会全局查找并终止 Vite/Celery。Redis 可能被其他项目共享,停止脚本不会关闭它。 -## 🔍 故障排除 +数据库由共享初始化函数创建。必要时可运行 `python init_database.py`,它不会清空已有数据;不要用删除数据库的方式解决启动失败。 -### 常见问题 +## 手动开发 -1. **端口被占用** - ```bash - # 检查端口占用 - lsof -i :8000 - lsof -i :3000 - - # 停止占用进程 - kill -9 - ``` - -2. **Redis连接失败** - ```bash - # 检查Redis状态 - redis-cli ping - - # 启动Redis - brew services start redis # macOS - systemctl start redis # Linux - ``` - -3. **Python依赖问题** - ```bash - # 重新安装依赖 - pip install -r requirements.txt --force-reinstall - ``` - -4. **前端依赖问题** - ```bash - # 清理并重新安装 - cd frontend - rm -rf node_modules package-lock.json - npm install - ``` - -### 日志查看 +激活虚拟环境并配置环境变量后,分别在终端运行: ```bash -# 查看所有日志 -tail -f logs/*.log - -# 查看特定服务日志 -tail -f logs/backend.log -tail -f logs/frontend.log -tail -f logs/celery.log +python -m uvicorn backend.main:app --host 127.0.0.1 --port 8000 --reload +celery -A backend.core.celery_app worker --loglevel=info --concurrency=1 -Q celery,processing,video,notification,upload +(cd frontend && npm run dev -- --port 3000) ``` -### 系统状态检查 - -```bash -# 详细状态检查 -./status_autoclip.sh - -# 手动检查服务 -curl http://localhost:8000/api/v1/health/ -curl http://localhost:3000/ -redis-cli ping -``` - -## 🛠️ 开发模式 - -### 后端开发 - -```bash -# 激活虚拟环境 -source venv/bin/activate - -# 设置Python路径 -export PYTHONPATH="${PWD}:${PYTHONPATH}" - -# 启动后端(开发模式) -python -m uvicorn backend.main:app --reload --port 8000 -``` - -### 前端开发 - -```bash -# 进入前端目录 -cd frontend - -# 启动开发服务器 -npm run dev -``` - -### Celery Worker - -```bash -# 启动Worker(必须带 -Q:任务按 celery_app.task_routes 路由到专用队列, -# 不带 -Q 的 worker 只消费默认 `celery` 队列,流水线任务会一直堆在 `processing` 里没人执行) -celery -A backend.core.celery_app worker --loglevel=info -Q celery,processing,video,notification,upload - -# 启动Beat调度器 -celery -A backend.core.celery_app beat --loglevel=info - -# 启动Flower监控 -celery -A backend.core.celery_app flower --port=5555 -``` - -## 📈 性能优化 - -### 生产环境配置 - -1. **数据库优化** - - 使用PostgreSQL替代SQLite - - 配置连接池 - - 启用查询缓存 - -2. **Redis优化** - - 配置内存限制 - - 启用持久化 - - 设置过期策略 - -3. **Celery优化** - - 调整并发数 - - 配置任务路由 - - 启用结果后端 - -## 🔒 安全配置 - -### 生产环境安全 - -1. **环境变量** - - 使用强密码 - - 定期轮换密钥 - - 限制API访问 - -2. **网络安全** - - 配置防火墙 - - 使用HTTPS - - 限制CORS - -3. **数据安全** - - 定期备份 - - 加密敏感数据 - - 访问控制 - -## 📞 支持 - -如果遇到问题,请: - -1. 查看日志文件 -2. 运行状态检查脚本 -3. 检查环境配置 -4. 参考故障排除部分 - -## 📄 许可证 +手动启动的进程没有脚本 PID 记录,请在各自终端用 Ctrl+C 停止。状态脚本检查已记录进程及 API/Web/Redis 可用性;Worker 进程存活不保证某个任务已经完成,任务队列与转写进度应查看 `logs/celery.log` 和项目页面。 -本项目采用 MIT 许可证。 +排错见 [FAQ](docs/FAQ.md),入口与历史文件说明见 [仓库目录说明](docs/REPOSITORY_LAYOUT.md)。 diff --git a/artifacts/game-ads/.gitignore b/artifacts/game-ads/.gitignore new file mode 100644 index 000000000..dd0256776 --- /dev/null +++ b/artifacts/game-ads/.gitignore @@ -0,0 +1,13 @@ +# Local media, downloaded dependencies and renderer diagnostics +.tools/ +**/assets/ +**/output/ +**/seed-frames/ +**/snapshots/ +**/.media/ +**/.hyperframes/ +**/.hf-tmp/ +**/check-report.json +*.log +**/.thumbnails/ +**/.waveform-cache/ diff --git a/artifacts/game-ads/run-20260921/README.md b/artifacts/game-ads/run-20260921/README.md new file mode 100644 index 000000000..c1c9124bd --- /dev/null +++ b/artifacts/game-ads/run-20260921/README.md @@ -0,0 +1,30 @@ +# 跑酷买量视频样片 · 2026-09-21 + +本批为同一段玩法的三种开头变体:A「连续避障」、B「下一步往哪躲?」、C「换你能躲过去吗?」。前三点二秒不同,其余主体、声音、结尾一致。用于比较开头方向,尚无投放表现数据。 + +- 输入:[用户提供的 Subway Princess Runner 视频](https://www.youtube.com/watch?v=jzccuci8znM)。游戏名称依据上传标题,未核对官方商店包名。 +- 源区间:226.5–248.5 秒,连续 22 秒,原速。 +- 输出:1080×1920,30 fps,H.264 + AAC。中心裁切约保留源画面的 926×1080;侧方环境会被裁掉,已抽检人物及主要障碍的可见性。 +- 包装:中文开场、原游戏声音、最后三秒行动邀请,音量末尾 0.3 秒淡出。没有额外配音或虚构胜负。 +- 制作:HyperFrames 0.8.58 / GSAP 3.14.2。可编辑项目位于 `runner-variants/`。 +- AI 复核:实际调用 `doubao-seed-2-1-pro-260915`,输入 11 张每两秒抽取的有序静帧,审查内容与裁切;结果在 `seed-review.json`。这不是逐帧视频时序识别,也尚未接入 AutoClip 产品后端。 +- 质量检查:HyperFrames 运行、布局、动画和对比度检查通过。两项非阻断警告建议把文字组拆成子合成;当前单场景无需拆分。另检查最终视频的编码、时长、完整解码、音轨和抽帧。 + +## 视频 + +- [A 直接展示](output/runner-A-direct.mp4) +- [B 悬念提问](output/runner-B-question.mp4) +- [C 挑战邀请](output/runner-C-challenge.mp4) + +## 重渲染 + +进入 `runner-variants/` 后: + +```sh +npx hyperframes@0.8.58 check --snapshots +npx hyperframes@0.8.58 render --output ../output/runner-A-direct.mp4 --quality looks --fps 30 --variables-file variant-A.json --strict-variables +npx hyperframes@0.8.58 render --output ../output/runner-B-question.mp4 --quality looks --fps 30 --variables-file variant-B.json --strict-variables +npx hyperframes@0.8.58 render --output ../output/runner-C-challenge.mp4 --quality looks --fps 30 --variables-file variant-C.json --strict-variables +``` + +使用本地系统字体子集,仅作本次样片评审。真实投放前替换为已获得相应用途许可的字体,并确认游戏画面、原声音轨的投放使用权。素材仍属于制作样片,不因渲染完成就升级为有效果证据的 golden case。 diff --git a/artifacts/game-ads/run-20260921/runner-variants/AGENTS.md b/artifacts/game-ads/run-20260921/runner-variants/AGENTS.md new file mode 100644 index 000000000..45aa30b89 --- /dev/null +++ b/artifacts/game-ads/run-20260921/runner-variants/AGENTS.md @@ -0,0 +1,103 @@ +# HyperFrames Composition Project + +## Skills — USE THESE FIRST + +**Always invoke the relevant skill before writing or modifying compositions.** Skills encode framework-specific patterns (e.g., `window.__timelines` registration, `data-*` attribute semantics, shader-compatible CSS rules) that are NOT in generic web docs. Skipping them produces broken compositions. + +**Doing anything with HyperFrames?** Start at `/hyperframes` — it tells you what HyperFrames can do and which skill or workflow handles your intent (make a video, TTS / BGM, prep footage, author / animate, render, install blocks), confirms your brief up front (the intent layer), and routes every "make me a…" request (a video, a deck, a composition port) to the right workflow. Read it first, especially when there's no project context to orient you. The workflows it routes to: + +- `/product-launch-video` — any **website** URL or brief / script → a product launch / SaaS / promo video, or a site tour / showcase featuring the site's own captured visuals. +- `/faceless-explainer` — arbitrary text (topic / article / notes), **no URL, no website capture** → 60-90s faceless explainer. +- `/embedded-captions` — an existing talking-head video (MP4) → the same footage with captions / subtitles added (rail + embed, or pure-cinematic embed); the footage itself is untouched. +- `/talking-head-recut` — an existing talking-head / interview / podcast video (MP4) → the same footage **packaged with designed graphic overlays** (kinetic titles, lower-thirds, data callouts, pull-quotes, side panels, pip) synced to the transcript; the clip plays unchanged underneath. (Plain captions/subtitles → `/embedded-captions`.) +- `/pr-to-video` — a GitHub PR (URL / `owner/repo#N` / "this PR") → 30-90s code-change explainer (changelog / feature reveal / fix / refactor). +- `/motion-graphics` — a short (typically under 10s) design-led **motion graphic**, motion-is-the-message, no narration: kinetic type, a stat / number count-up, a chart, a logo sting, a lower-third / overlay, or an animated tweet / headline / captured-page highlight; rendered to MP4 or a transparent overlay. Longer / narrated / custom → `/general-video`. +- `/music-to-video` — a **music track** (audio file, video to pull audio from, or one generated from a mood brief) → beat-synced video (lyric / slideshow / kinetic promo). Music drives pacing; user-supplied images / videos are cut onto the same beat grid. +- `/slideshow` — a **presentation / pitch deck / interactive deck** — discrete slides, fragment reveals, branching, hotspot navigation, presenter mode. Output is a navigable deck, not a rendered video. +- `/general-video` — fallback for any other video (title card, longer brand / sizzle reel, multi-scene montage, static loop, custom composition) and the home of **companion mode** — co-create with the full HyperFrames toolbox; the original hyperframes authoring flow, any length. + +**Porting an existing composition?** `/remotion-to-hyperframes` translates a Remotion (React) composition into HyperFrames HTML — a source migration, separate from the creation workflows above. + +The domain skills (`/hyperframes-core`, `/hyperframes-animation`, `/hyperframes-keyframes`, `/hyperframes-creative`, `/hyperframes-cli`, `/media-use`, `/hyperframes-audio`, `/hyperframes-registry`, `/figma`) and the full capability map live inside `/hyperframes` — it is the single source of truth for which skill handles which intent. + +**Changing how real footage or images look or reveal?** Load `/media-use` and read its `references/media-treatments.md` before editing, even when the request only says dark, flat, boring, retro, private, or “make the reveal cooler.” It governs how footage is treated, never whether media may be used. Use canonical media treatments and seek-safe motion; do not improvise equivalent CSS/SVG filters or overlays. + +> **Tailwind v4 projects** (`hyperframes init --tailwind`): see `/hyperframes-core` → `references/tailwind.md`. + +> **Skill missing or stale?** Run `npx hyperframes skills update ` to install/refresh +> the specific skill you need (the `/hyperframes` router does this automatically before +> entering a workflow), or bare `npx hyperframes skills update` to refresh the core set plus +> everything already installed — neither pulls the full set. Restart the agent session so +> newly installed skills load. + +## Commands + +```bash +npm run dev # human-operated foreground preview (blocks until stopped) +npx hyperframes preview --background # agent-safe persistent Studio preview +npx hyperframes preview --status # verify the persistent preview is listening +npx hyperframes preview --stop # stop it when review is finished +npm run check # lint + runtime + layout + motion + contrast (one command) +npm run render # render to MP4 +npm run publish # publish and get a shareable link +npx hyperframes lint --verbose # include info-level findings +npx hyperframes lint --json # machine-readable output for CI +npx hyperframes docs # reference docs in terminal +``` + +> **Agents must use `npx hyperframes preview --background` for Studio handoff.** Do not rely +> on a shell/tool `run_in_background` wrapper around `npm run dev`: that foreground process +> remains owned by the invoking session and can disappear while the browser stays open, +> leaving refreshes at `ERR_CONNECTION_TIMED_OUT`. Verify with `preview --status`, keep it +> alive through review, and stop it explicitly with `preview --stop` afterward. + +> **Pinned CLI version.** These scripts pin an exact `hyperframes@X.Y.Z` so this project re-renders identically over time. Weeks later that pin lags fixes shipped since. To move up: `npx hyperframes@latest upgrade --project . --check` (shows the delta), then `npx hyperframes@latest upgrade --project .` to rewrite the pins. Always unpinned — the pinned script re-runs the old version against itself. + +## Documentation + +**For quick reference**, use the local CLI docs command (no network required): + +```bash +npx hyperframes docs +``` + +Topics: `data-attributes`, `gsap`, `compositions`, `rendering`, `examples`, `troubleshooting` + +**For full documentation**, discover pages via the machine-readable index — do NOT guess URLs: + +``` +https://hyperframes.heygen.com/llms.txt +``` + +## Project Structure + +- `index.html` — main composition (root timeline) +- `compositions/` — sub-compositions referenced via `data-composition-src` +- `meta.json` — project metadata (id, name) +- `transcript.json` — whisper word-level transcript (if generated) + +## Linting — ALWAYS RUN AFTER CHANGES + +After creating or editing any `.html` composition, **always** run the full check before considering the task complete: + +```bash +npm run check +``` + +Fix all errors before presenting the result. Warnings should be reviewed before rendering. + +## Key Rules + +1. Every timed element needs `data-start` and a duration. `data-start` is what marks it as timed; `data-track-index` is an optional Studio display lane the render never reads +2. Give timed visual elements `class="clip"`. The framework keys visibility off `data-start`, not the class, but the shared `.clip` CSS is what gives a scene its full-frame box, and `lint` warns without it +3. Register one paused root timeline per composition on `window.__timelines`: + ```js + window.__timelines = window.__timelines || {}; + window.__timelines["composition-id"] = gsap.timeline({ paused: true }); + ``` + Scene timelines manually added to this root must not be paused. A paused + child does not advance when the root is seeked. The runtime activates + registered composition siblings, not arbitrary nested scene timelines. +4. Videos use `muted` with a separate `