fix: 封面自动生成时叠加用户选择的标题文字 (#1365 修复) #1367
Closed
xiaoxia
wants to merge 10 commits from
fix/cover-title-overlay into develop
pull from: fix/cover-title-overlay
merge into: xiaoxia:develop
xiaoxia:main
xiaoxia:develop
xiaoxia:fix/1677-review-followups
xiaoxia:feat/1677-canvas-batch-preview
xiaoxia:feat/1677-batch-generation
xiaoxia:fix/dedup-exclude-self-1702
xiaoxia:fix/dedup-zero-rate-1702
xiaoxia:fix/style-main-sync
xiaoxia:release/sync-develop-20260904
xiaoxia:fix/voice-duration-filter-and-warning-removal
xiaoxia:feature/clip-duration-voice-alignment
xiaoxia:fix/title-position-fallback-wrap-consistency
xiaoxia:fix/dedup-coverage-and-retry-bug
xiaoxia:feature/1659-dynamic-keyframe-sliding-window
xiaoxia:fix/ai-badge-overflow
xiaoxia:feat/cross-video-avoidance-1670
xiaoxia:feat/fingerprint-chunks-1657
xiaoxia:fix/ai-badge-fallback
xiaoxia:fix/extract-voice-api-path
xiaoxia:fix/ruff-b904-voices
xiaoxia:feat/segment-random-shuffle-1663
xiaoxia:fix/tts-duration-and-video-extract
xiaoxia:feat/extract-video-voice-and-source-label
xiaoxia:fix/auto-merge-race-condition
xiaoxia:diag/ref-env-test
xiaoxia:fix/upload-asset-not-visible-immediately
xiaoxia:infra/fix-main-workflows
xiaoxia:fix/ci-mypy-integ
xiaoxia:fix/disable-pr-auto-scan-schedule
xiaoxia:ci/canary-workflow
xiaoxia:fix/playwright-base-image
xiaoxia:feat/config-phase4-env-render
xiaoxia:fix/ci-production-deploy-skip
xiaoxia:fix/remove-duplicate-034-migration
xiaoxia:feat/ci-base-image-autobuild
xiaoxia:fix/preset-4items
xiaoxia:feat/smart-match-integration
xiaoxia:fix/video-duration-mismatch
xiaoxia:fix/title-preset-t-render
xiaoxia:fix/web-duplicate-rate-mapping
xiaoxia:feat/auto-duplicate-rate-user-scope
xiaoxia:fix/title-drag-pointer-events-and-size
xiaoxia:fix/smart-match-empty-results
xiaoxia:feat/title-drag-position
xiaoxia:fix/smart-match-limit-algorithm
xiaoxia:feat/title-drag-custom
xiaoxia:fix/from-assets-400-clip-config-fallback
xiaoxia:chore/pr-auto-scan-cron-15min
xiaoxia:sync/develop-to-main-v2
xiaoxia:fix/auto-merge-contexts-v2
xiaoxia:fix/psycopg2-to-psycopg3
xiaoxia:fix/prebake-ffmpeg-ci-image
xiaoxia:fix/cache-continue-on-error
xiaoxia:fix/auto-approve-contexts
xiaoxia:fix/buildx-web-cache-bust
xiaoxia:fix/ci-cache-robustness
xiaoxia:fix/check-push-paths-no-checkout
xiaoxia:fix/ci-check-push-paths-checkout
xiaoxia:fix/deploy-staging-skip-bug
xiaoxia:ci/pipeline-speedup-batch2
xiaoxia:feat/product-inline-player
xiaoxia:ci/transient-fault-auto-retry
xiaoxia:ci/image-content-verification
xiaoxia:ci/selfcheck-zombie-run-and-dedupe
xiaoxia:ci/fix-scheduled-jobs-zombie-timeout
xiaoxia:fix/test-hevc-mock-no-sysmodules
xiaoxia:fix/ingest-jobs-404-not-found
xiaoxia:feat/segment-duplication-control
xiaoxia:feat/persist-used-segments
xiaoxia:chore/remove-random-asset-mode
xiaoxia:fix/e2e-6step-generate-flow
xiaoxia:fix/audio-mime-inference
xiaoxia:fix/cover-from-final-video
xiaoxia:feat/merge-step4-step5
xiaoxia:fix/asset-thumbnails
xiaoxia:fix/thumbnail-v2
xiaoxia:fix/thumbnail-url-not-saved
xiaoxia:fix/title-position-default-top
xiaoxia:feat/from-assets-by-template-segments
xiaoxia:feat/mediakit-smart-clip-selection
xiaoxia:fix/restore-backend-files
xiaoxia:fix/cross-task-segment-dedup
xiaoxia:fix/ui-template-thumb-and-material-grid
xiaoxia:fix/cover-title-consistency
xiaoxia:fix/voice-library-id-passthrough
xiaoxia:fix/mark-clips-ready-after-from-assets
xiaoxia:fix/ass-fontsize-compensation-1.35
xiaoxia:fix/call-clips-from-assets
xiaoxia:fix/font-name-map-noto-sans-sc
xiaoxia:fix/restore-preview-step4-5-step7-video
xiaoxia:fix/editor-clips-random-start-time
xiaoxia:fix/remove-preview-and-generate-count
xiaoxia:fix/title-line-height
xiaoxia:fix/title-margin-top-120
xiaoxia:fix/title-size-max-128
xiaoxia:fix/preview-coord-system
xiaoxia:fix/title-fullwidth-slash
xiaoxia:fix/voice-preview-materials-v2
xiaoxia:fix/voice-preview-materials
xiaoxia:fix/preview-resolution
xiaoxia:feat/server-rendered-preview
xiaoxia:fix/source-edit-plan-id-v2
xiaoxia:chore/cleanup-template-editor-generation
xiaoxia:feat/sync-edit-plan-clips
xiaoxia:refactor/worker-use-edit-plan-clips
xiaoxia:fix/cover-title-style-e2
xiaoxia:fix/batch-writeback-once
xiaoxia:fix/edit-flow-data-chain
xiaoxia:fix/cover-ffmpeg-title-overlay
xiaoxia:fix/mediakit-completed-status
xiaoxia:fix/cover-mediakit-timeout
xiaoxia:fix/cover-extract-from-source-asset
xiaoxia:fix/webcodecs-decode-failure-fallback
xiaoxia:feat/hevc-auto-transcode
xiaoxia:fix/ai-code-review-blocking-v2
xiaoxia:fix/ai-code-review-blocking
xiaoxia:fix/hevc-description
xiaoxia:fix/infinity-samples
xiaoxia:fix/all-canvas-issues
xiaoxia:fix/promise-timeout
xiaoxia:fix/demux-async
xiaoxia:fix/optional-chaining-safety
xiaoxia:fix/frontend-segment-extraction
xiaoxia:fix/canvas-description-cache-and-keyframe
xiaoxia:fix/fullbox-offset-and-title-split
xiaoxia:fix/preview-player-4-issues
xiaoxia:fix/canvas-black-screen-voice-validation
xiaoxia:fix/canvas-player-issues
xiaoxia:fix/preview-player-v8
xiaoxia:fix/preview-player-v7
xiaoxia:fix/preview-player-v5
xiaoxia:fix/preview-player-v4
xiaoxia:fix/preview-player-v3
xiaoxia:fix/preview-player-v2
xiaoxia:fix/preview-player-playback-and-title
xiaoxia:fix/assets-batch-endpoint
xiaoxia:fix/usePreviewAssets-infinite-loop
xiaoxia:fix/token-refresh-bugs
xiaoxia:cleanup/remove-unused-preview-props
xiaoxia:refactor/frontend-preview-player
xiaoxia:fix/cover-url-in-finalize
xiaoxia:feat/upload-cover-and-title-in-generate
xiaoxia:fix/batch-download-session-flaky-v2
xiaoxia:fix/test-clip-mock-fields
xiaoxia:feat/title-style-panel-to-step5
xiaoxia:fix/flaky-batch-download-session-test
xiaoxia:fix/clips-api-response-structure
xiaoxia:fix/proactive-token-refresh
xiaoxia:fix/token-refresh-test-fix
xiaoxia:feat/clips-asset-url
xiaoxia:fix/canvas-video-resolution-match
xiaoxia:fix/worker-cjk-fonts
xiaoxia:fix/preview-title-render
xiaoxia:fix/cover-extract-frames
xiaoxia:fix/render-bool-config-crash
xiaoxia:fix/restore-showTitlePreview-prop
xiaoxia:fix/ts-errors-pr1382
xiaoxia:fix/bool-config-crash
xiaoxia:fix/e2e-step-order-adapt
xiaoxia:feat/title-preview-right-panel
xiaoxia:fix/title-config-param-mapping
xiaoxia:feat/title-preview-canvas-v2
xiaoxia:fix/auto-merge-ai-review-check
xiaoxia:fix/cover-title-asr-path
xiaoxia:fix/cover-500-logger-and-source-plan-fallback
xiaoxia:fix/flaky-test-batch-download
xiaoxia:fix/auto-format-merge-commit-consistency
xiaoxia:fix/cover-generation-unify
xiaoxia:fix/custom-title-render
xiaoxia:fix/video-ratio-resolution-parsing
xiaoxia:fix/cover-templates-double-encoded-config
xiaoxia:fix/api-ffmpeg-missing
xiaoxia:fix/double-slash-oss-path
xiaoxia:fix/cover-types-import-paths
xiaoxia:refactor/decouple-cover-types-from-editing-planner
xiaoxia:optimize/cover-generation-speed
xiaoxia:fix/cover-issues-1341
xiaoxia:fix/confirm-api-path-1341
xiaoxia:fix/cover-error-logging-1347
xiaoxia:fix/remove-unused-useRef-import
xiaoxia:fix/cover-generation-issues-1341
xiaoxia:fix/totalDuration-duplicate-develop
xiaoxia:feat/cover-generation-ui-1341
xiaoxia:fix/cover-generation-progress-modal
xiaoxia:fix/remove-selected-template-text
xiaoxia:feature/unify-preview-confirm-render-path
xiaoxia:fix/generate-fallback-user-assets
xiaoxia:fix/worker-entrypoint-w-flag
xiaoxia:fix/cover-stub-placeholder-url
xiaoxia:fix/cover-field-name-1317
xiaoxia:fix/thumbnail-yuv-format
xiaoxia:fix/cover-templates-error-handling
xiaoxia:feat/cover-templates-api-integration
xiaoxia:feat/cover-settings-redesign
xiaoxia:fix/audio-only-clips-in-filter-complex
xiaoxia:fix/preview-voice-ids-fallback
xiaoxia:fix/confirm-generation-api-develop
xiaoxia:fix/sync-confirm-api-to-develop
xiaoxia:fix/issue-1294-preview-voiceover-asr-fallback
xiaoxia:fix/issue-1294-preview-voiceover-asr-init
xiaoxia:fix/worker-concurrency-default-4
xiaoxia:fix/auto-approve-skipped-status
xiaoxia:fix/e2e-title-input-timing
xiaoxia:bugfix/1294-preview-voice-injection
xiaoxia:fix/e2e-title-placeholder-v2
xiaoxia:fix/ci-lower-coverage-threshold
xiaoxia:fix/e2e-title-placeholder
xiaoxia:fix/preview-improvements
xiaoxia:feature/1286-preview-count-validation-and-worker-concurrency
xiaoxia:bugfix/1286-staging-ci-shell-quoting
xiaoxia:feature/1286-can-generate-auto-repair
xiaoxia:bugfix/1286-staging-ci-tests-fix
xiaoxia:fix/ci-concurrency-lock
xiaoxia:feature/1280-preview-generation-speedup
xiaoxia:fix/staging-tests-npm-retry
xiaoxia:feature/1256-random-asset-selection-preview
xiaoxia:feat/issue-1256-auto-smart-match
xiaoxia:fix/quota-test-wave78-pro-sync
xiaoxia:feat/upload-voice-modal-visual
xiaoxia:feat/remove-result-panel-and-plan-info
xiaoxia:fix/quota-pro-tier-fallback
xiaoxia:fix/asset-create-optional-project-id
xiaoxia:feature/integrate-cover-generation
xiaoxia:fix/step6-cover-ratio-label
xiaoxia:feat/step4-title-autocomplete
xiaoxia:fix/canvas-titlecentering-v2
xiaoxia:fix/skip-source-audio-in-mix
xiaoxia:feat/no-video-cleanup-and-centering-fix
xiaoxia:feat/title-preview-canvas
xiaoxia:feat/unify-asset-selection
xiaoxia:fix/pip-removal-and-title-wrap
xiaoxia:fix/preset-font-preview
xiaoxia:fix/preview-strategy-id-from-template
xiaoxia:fix/title-preview-overlay
xiaoxia:fix/preview-generation-3-issues
xiaoxia:fix/1221-auth-401-interceptor
xiaoxia:feat/preset-voice-previews-round2
xiaoxia:feat/preset-voice-previews
xiaoxia:feat/mediakit-ai-cover-1208
xiaoxia:fix/download-assets-allow-asset-ids-only
xiaoxia:feat/preview-generation-1197
xiaoxia:feat/voice-clone-preview-1195
xiaoxia:refactor/bind-contact-modal-split
xiaoxia:test/wave207-inmemory-small-repos
xiaoxia:test/wave219-template-clip-config
xiaoxia:refactor/asset-selector-split
xiaoxia:test/wave218-batch-download
xiaoxia:test/wave214-text-splitter
xiaoxia:test/wave213-bind-contact
xiaoxia:test/wave212-login-use-case
xiaoxia:test/wave211-password-reset
xiaoxia:test/wave210-verification-code
xiaoxia:test/wave209-jwt-auth
xiaoxia:test/wave203-bgm-mixer-pure
xiaoxia:test/wave202-multi-track-mixer-pure
xiaoxia:test/wave200-pip-engine-pure
xiaoxia:test/wave191-edit-template
xiaoxia:test/wave208-password-auth
xiaoxia:test/wave206-inmemory-repos
xiaoxia:test/wave205-path-security
xiaoxia:test/wave204-text-splitter-pagination
xiaoxia:test/wave201-concat-engine-pure
xiaoxia:refactor/generate-video-split
xiaoxia:test/wave199-sticker-engine-pure
xiaoxia:refactor/video-player-hook
xiaoxia:test/wave198-shared-ai-service
xiaoxia:test/wave196-auth-session-store
xiaoxia:test/wave197-asset-compat
xiaoxia:test/wave195-verification-code
xiaoxia:test/wave194-tts-config
xiaoxia:test/wave193-video-share
xiaoxia:test/wave192-media-validation
xiaoxia:refactor/generate-form-state
xiaoxia:test/wave190-preset-voices
xiaoxia:test/wave189-preset-bgm
xiaoxia:test/wave188-video-concat
xiaoxia:test/wave187-speed-config
xiaoxia:test/wave186-subtitle
xiaoxia:refactor/task-table
xiaoxia:test/wave185-audio-track-config
xiaoxia:test/wave184-intro-outro-config
xiaoxia:test/wave183-voice-presets
xiaoxia:test/wave182-config-schemas
xiaoxia:fix/develop-unit-tests-failure
xiaoxia:fix/frontend-unit-test-smoke-test
xiaoxia:fix/ci-unit-test-coverage-threshold
xiaoxia:fix/tts-panel-voices-api-v2
xiaoxia:fix/voice-clone-preview-play-1195
xiaoxia:test-branch-123
xiaoxia:fix/main-deploy-staging-manual
xiaoxia:merge/develop-ci-scripts
xiaoxia:fix/vitest-exclude-e2e
xiaoxia:test/wave173-pip-config
xiaoxia:fix/ci-staging-deploy-and-notify-0728
xiaoxia:fix/ci-production-build-bugs-0728
xiaoxia:fix/preview-cleanup-ssh-default
xiaoxia:fix/daily-check-outputs
xiaoxia:fix/auto-merge-short-job
xiaoxia:fix/build-production-needs-tests
xiaoxia:fix/pr-path-filter-skip
xiaoxia:fix/code-review-ci-gate
xiaoxia:test/wave164-filter-presets
xiaoxia:fix/pr-automation-concurrency
xiaoxia:fix/ci-pr-automation-optimization-0728
xiaoxia:refactor/generate-result-panel
xiaoxia:test/wave163-watermark-config
xiaoxia:refactor/step6-cover-settings
xiaoxia:test/wave162-asset-scoring
xiaoxia:refactor/use-product-actions
xiaoxia:test/wave161-domain-entities
xiaoxia:test/wave160-job-domain
xiaoxia:refactor/use-timeline-menus
xiaoxia:refactor/step7-confirm
xiaoxia:refactor/use-step5-voice
xiaoxia:test/wave140-watermark-config
xiaoxia:test/wave139-url-security
xiaoxia:test/wave159-template-clip-config
xiaoxia:test/wave158-edit-plan
xiaoxia:test/wave157-domain-small-modules
xiaoxia:test/wave156-generation-task
xiaoxia:test/wave155-generated-video
xiaoxia:test/wave154-classification
xiaoxia:test/wave153-edit-plan-clip
xiaoxia:fix/ci-p1-p2-optimizations-0728
xiaoxia:test/wave152-duplication
xiaoxia:test/wave151-quota
xiaoxia:fix/clone-upload-422-and-types-path
xiaoxia:test/wave172-color-grade-config
xiaoxia:test/wave171-subtitle-style
xiaoxia:test/wave170-chroma-key-config
xiaoxia:test/wave169-ass-subtitle-builder
xiaoxia:test/wave168-transition-presets
xiaoxia:test/wave167-sticker-config
xiaoxia:test/wave166-plan-generator-utils
xiaoxia:refactor/green-screen-panel
xiaoxia:test/wave165-trim-config
xiaoxia:refactor/clip-mutations
xiaoxia:fix/ci-p0-bugs-0728
xiaoxia:refactor/material-form
xiaoxia:refactor/clone-voice-card
xiaoxia:refactor/tag-selector
xiaoxia:fix/voice-material-types-path
xiaoxia:refactor/use-voice-material-actions
xiaoxia:fix/ruff-config-pyproject
xiaoxia:test/wave144-tts-job
xiaoxia:test/wave142-transition-presets
xiaoxia:fix/ci-gate-exit-code-develop
xiaoxia:fix/ci-gate-exit-code-main
xiaoxia:fix/auto-fix-loop-detection
xiaoxia:refactor/asset-selector
xiaoxia:refactor/generate-video-hook
xiaoxia:test/auto-format-verify-0727
xiaoxia:refactor/voice-materials-p4
xiaoxia:feature/ai-review-status
xiaoxia:refactor/use-voice-materials-split
xiaoxia:refactor/voice-library-deepen
xiaoxia:refactor/generate-page-phase1
xiaoxia:refactor/router-split
xiaoxia:refactor/my-voices
xiaoxia:refactor/clone-modal
xiaoxia:refactor/title-library
xiaoxia:refactor/timeline-panel-phase3-pr
xiaoxia:feature/ai-review-status-develop
xiaoxia:feature/auto-fix-all-prs-develop
xiaoxia:test/wave132-wechat-oauth-unit
xiaoxia:test/ci-format-auto-fix-0727
xiaoxia:test/wave131-password-hasher
xiaoxia:test/wave130-jwt-service
xiaoxia:test/wave129-asset-scoring
xiaoxia:test/wave128-url-security
xiaoxia:test/wave127-template-data-unit
xiaoxia:test/wave126-small-domain-unit
xiaoxia:test/wave125-entities-unit
xiaoxia:test/wave124-quota-unit
xiaoxia:test/wave123-job-unit
xiaoxia:refactor/asset-operations-hook
xiaoxia:test/wave117-speed-config
xiaoxia:feature/auto-fix-all-prs
xiaoxia:test/wave118-chroma-key-config
xiaoxia:test/wave119-noise-reduction-config
xiaoxia:test/wave120-ass-subtitle-builder
xiaoxia:test/wave121-xfade-builder
xiaoxia:test/wave122-trim-config
xiaoxia:test/wave91-generation-plan-builder
xiaoxia:test/wave92-asset-scoring
xiaoxia:test/wave93-duplication-domain
xiaoxia:test/wave94-media-validation
xiaoxia:test/wave95-domain-entities
xiaoxia:test/wave96-job-domain
xiaoxia:test/wave97-quota-domain
xiaoxia:test/wave98-preset-bgm
xiaoxia:test/wave99-small-domain-modules
xiaoxia:refactor/duplication-detail
xiaoxia:refactor/upload-voice-modal-split
xiaoxia:refactor/product-detail
xiaoxia:refactor/task-history
xiaoxia:refactor/bgm-selector-split
xiaoxia:refactor/use-clip-operations-split
xiaoxia:refactor/template-management-hook
xiaoxia:refactor/asset-library-deepen
xiaoxia:refactor/duplication-results-split
xiaoxia:refactor/clip-detail-section-split
xiaoxia:refactor/layer-config-split
xiaoxia:refactor/cover-selector-split
xiaoxia:refactor/template-editor-api
xiaoxia:refactor/assets-api
xiaoxia:refactor/editing-planner-api
xiaoxia:refactor/voice-clone-api
xiaoxia:refactor/tts-api
xiaoxia:refactor/products-api
xiaoxia:refactor/templates-api
xiaoxia:refactor/voices-api
xiaoxia:refactor/tasks-api
xiaoxia:refactor/titles-api
xiaoxia:refactor/subscription-api
xiaoxia:refactor/duplication-api
xiaoxia:refactor/bgm-projects-tags-api
xiaoxia:refactor/task-center
xiaoxia:refactor/voice-clone-page
xiaoxia:refactor/home-page
xiaoxia:refactor/template-library
xiaoxia:refactor/step5-voice-hook
xiaoxia:refactor/editing-drawers
xiaoxia:refactor/use-step4-title-split
xiaoxia:refactor/use-edit-plan-clips-split
xiaoxia:refactor/editing-planner-deepen
xiaoxia:refactor/editing-planner-types-split
xiaoxia:refactor/product-library-deepen
xiaoxia:refactor/upgrade-subscription-split
xiaoxia:fix/test-agent-docs-path
xiaoxia:fix/ci-daily-check-dood-mount
xiaoxia:fix/ci-daily-check-shell-bash
xiaoxia:refactor/my-templates-split
xiaoxia:fix/ci-format-cleanup-20260727
xiaoxia:test/wave116-trim-config
xiaoxia:test/wave115-watermark-config
xiaoxia:test/wave114-color-grade-config
xiaoxia:test/wave113-transition-config
xiaoxia:test/wave112-intro-outro-config
xiaoxia:test/wave111-audio-track-config
xiaoxia:test/wave110-pip-config
xiaoxia:test/wave90-plan-generator-utils
xiaoxia:test/wave88-streaming-service
xiaoxia:test/wave109-sticker-config
xiaoxia:test/wave108-ai-parsing
xiaoxia:test/wave107-subtitle-style
xiaoxia:test/wave106-video-concat-config
xiaoxia:test/wave105-render-layer-utils
xiaoxia:test/wave104-template-clip-converter
xiaoxia:test/wave100-application-modules
xiaoxia:test/wave103-clip-operations
xiaoxia:test/wave101-video-filter-builder
xiaoxia:pr-932
xiaoxia:test/wave102-template-effect-mapper
xiaoxia:sync/ci-scripts-to-main-20260726
xiaoxia:fix/frontend-lint-clip-type-import
xiaoxia:test/wave89-asset-analyzer-split
xiaoxia:test/wave87-worker-deep-coverage
xiaoxia:refactor/editing-planner-round2
xiaoxia:fix/ci-monitor-workflows-909-910-911
xiaoxia:fix/ci-daily-check-hardcoded-creds-912
xiaoxia:fix/ci-acr-cleanup-pr-days-908
xiaoxia:fix/ci-code-quality-905-914
xiaoxia:fix/ci-preview-deploy-907
xiaoxia:refactor/timeline-panel-phase1-pr
xiaoxia:refactor/timeline-panel-phase1
xiaoxia:refactor/product-library-phase3-final
xiaoxia:fix/ci-unit-tests-collection-906
xiaoxia:refactor/product-library-phase2-pr
xiaoxia:refactor/product-library-phase1
xiaoxia:refactor/editing-planner-phase3
xiaoxia:refactor/editing-planner-phase1
xiaoxia:test/wave86-worker-layer-coverage
xiaoxia:test/wave80-module-registry-subtitle-more
xiaoxia:test/wave85-exceptions-bgm-utils-subtitle-deep
xiaoxia:test/wave84-classification-tts-config-entities-more
xiaoxia:test/wave83-generated-video-verification-video-share-more
xiaoxia:test/wave82-exceptions-template-generated-video-more
xiaoxia:test/wave81-filter-transition-voice-presets-more
xiaoxia:test/wave79-subtitle-generator-text-splitter-more
xiaoxia:test/wave78-duplication-domain
xiaoxia:test/wave75-more-domain-utils
xiaoxia:test/wave77-generation-task-more-domain
xiaoxia:test/wave76-tts-job-state-machine
xiaoxia:test/wave74-classification-bgm-utils-subtitle
xiaoxia:refactor/asset-library-phase2
xiaoxia:fix/052-generation-task-bgm-config-migration
xiaoxia:fix/dedup-pure-test-db-import
xiaoxia:refactor/voice-library-phase3
xiaoxia:feat/ci-canary-release
xiaoxia:feat/ci-sync-renovate-to-main
xiaoxia:test/wave70-dedup-render-subtitles-tts-engine
xiaoxia:test/wave56-worker-more-engines
xiaoxia:refactor/voice-library-phase1
xiaoxia:chore/ci-acr-cleanup-main-sync
xiaoxia:chore/ci-acr-cleanup-enhance
xiaoxia:chore/ci-migration-upgrade-sync-main
xiaoxia:chore/ci-migration-validation-upgrade
xiaoxia:test/wave61-title-library-config-base
xiaoxia:test/wave58-in-memory-repositories
xiaoxia:fix/ci-preview-deploy-npm-ci
xiaoxia:fix/ci-worker-cache-optimization
xiaoxia:fix/staging-shell-sh-to-bash-main
xiaoxia:fix/staging-shell-sh-to-bash
xiaoxia:fix/ruff-f841-b007-detector
xiaoxia:fix/ruff-f401-cleanup
xiaoxia:test/unit-test-wave35
xiaoxia:ci/port-env-cleanup
xiaoxia:chore/sync-main-ci-config
xiaoxia:refactor/unified-enums
xiaoxia:fix/staging-e2e-container-cleanup
xiaoxia:fix/ci-systematic-p0-round2
xiaoxia:fix/jwt-tampered-test-flaky
xiaoxia:fix/black-format-ai-files
xiaoxia:fix/ci-staging-e2e-dood
xiaoxia:fix/wechat-callback-token-order
xiaoxia:fix/ci-systematic-p0-fix
xiaoxia:fix/ci-worker-base-registry
xiaoxia:fix/code-quality-black-format
xiaoxia:fix/ruff-format-2files
xiaoxia:feat/p3-1-tts-job-tests
xiaoxia:feat/p3-1-auth-handlers-tests
xiaoxia:feat/p3-1-wechat-oauth-tests
xiaoxia:feat/video-share-backend
xiaoxia:fix/ai-review-critical-match
xiaoxia:emergency-disk-cleanup
xiaoxia:fix/ci-simplify-merge-speed
xiaoxia:fix/ci-integration-oom-workers
xiaoxia:fix/flaky-jwt-tampered-test
xiaoxia:fix/462-pass-through-watermark
xiaoxia:test/p3-1-wave29-template-use-cases-tests
xiaoxia:fix/633-virtual-clip-transition-duration
xiaoxia:test/p3-1-wave26-tts-workflow-tests
xiaoxia:test/p3-1-wave23-cosyvoice-service-tests
xiaoxia:test/p3-1-wave24-register-password-reset-tests
xiaoxia:test/p3-1-wave28-cosyvoice-service-tests
xiaoxia:fix/login-token-order-bug
xiaoxia:fix/ci-architecture-bugs-3items
xiaoxia:test/p3-1-wave9-auth-service-tests
xiaoxia:test/p3-1-wave7-entities-domain-tests
xiaoxia:feat/ci-pytest-xdist-parallel
xiaoxia:feat/p3-1-validation-utils-tests
xiaoxia:feat/p3-1-module-registry-tests
xiaoxia:feat/p3-1-text-splitter-tests
xiaoxia:fix/ci-auto-merge-short-job-mode
xiaoxia:fix/auto-merge-no-approval-needed
xiaoxia:fix/vitest-related-flag-bug
xiaoxia:fix/worker-build-dood-fallback
xiaoxia:ci/repeated-failure-detection
xiaoxia:ci/validate-parallelization-phase2
xiaoxia:fix/auto-fix-ci-skip
xiaoxia:ci/failure-diagnosis-enhanced
xiaoxia:ci/validate-parallelization
xiaoxia:ci/worker-layered-cache
xiaoxia:fix/check-ci-status-order
xiaoxia:ci/autofix-distinguish-agent
xiaoxia:ci/cache-optimization-plus
xiaoxia:fix/558-wechat-login-fixes
xiaoxia:feat/558-wechat-login-polish
xiaoxia:test/unit-test-coverage-p3-batch2
xiaoxia:opt/restore-registry-cache-to
xiaoxia:p2-6-ci-health-daily
xiaoxia:fix/frontend-ts-error-message-type
xiaoxia:fix/ci-autoapprove-match-branch-protection
xiaoxia:fix/ci-autofix-checkout-force
xiaoxia:fix/ci-p02-checkout-retry
xiaoxia:fix/ci-black-format-worker
xiaoxia:fix/549-preset-voice-one-click-gen
xiaoxia:fix/ci-p01-preview-ssh-key
xiaoxia:fix/ci-pg-container-ip
xiaoxia:feature/agentloop-ci-trace
xiaoxia:feat/smart-edit-flow-restructure
xiaoxia:feat/smart-edit-cover-migration
xiaoxia:feat/frontend-coverage-phase3
xiaoxia:feat/frontend-coverage-phase2
xiaoxia:fix/p1-preset-voice-no-sound
xiaoxia:ci/fix-frontend-test-exclude-e2e
xiaoxia:fix/p1-asset-list-status-and-pagination
xiaoxia:fix/asset-batch-delete-crash
xiaoxia:test/cleanup-verify
xiaoxia:test/preview-e2e-verify
xiaoxia:fix/hevc-encoding-filter-and-auto-select
xiaoxia:ci/p1-4-preview-environment
xiaoxia:fix/download-asset-storage-key
xiaoxia:ci/p1-3-coverage-gate
xiaoxia:ci/fix-auto-approve-sha-and-scheduling
xiaoxia:ci/fix-scheduling-and-sha
xiaoxia:ci/fix-scheduling-label-mismatch
xiaoxia:ci/fix-build-review-prompt
xiaoxia:fix/docker-login-v2
xiaoxia:fix/docker-login-yaml
xiaoxia:feature/p1-2-edit-plan-render-link
xiaoxia:test/auto-merge-verify
xiaoxia:test/ci-trigger-rebase-verify
xiaoxia:test/auto-approve-validation
xiaoxia:feat/ci-auto-approve
xiaoxia:fix/buildx-builder-name-conflict
xiaoxia:fix/auto-merge-token
xiaoxia:fix/registry-login-v3
xiaoxia:fix/registry-login-v2
xiaoxia:fix/ci-build-registry-login
xiaoxia:feature/ai-code-review
xiaoxia:feat/ci-frontend-path-filter
xiaoxia:fix/migration-safety-push-event
xiaoxia:feat/runner-layered-scheduling
xiaoxia:feat/staging-auto-rollback
xiaoxia:feat/registry-retry-stability
xiaoxia:feat/ci-deploy-concurrency
xiaoxia:feat/ci-concurrency-fix
xiaoxia:fix/ci-validate-pg-container
xiaoxia:feat/ci-validate-isolated-pg
xiaoxia:feat/save-plan-as-template
xiaoxia:feat/frontend-ci-speedup
xiaoxia:ci/runner-diagnose
xiaoxia:feat/edit-plan-clips-api
xiaoxia:fix/voice-clone-ssrf
xiaoxia:fix/migration-safety-reliability
xiaoxia:fix/edit-plan-resume-editing
xiaoxia:fix/mypy-hardgate
xiaoxia:feat/mypy-incremental
xiaoxia:fix/task-id-prefix-polling
xiaoxia:fix/generation-put-status-restriction
xiaoxia:debug/ci-build-runs-on
xiaoxia:fix/ci-disable-registry-cache-to
xiaoxia:fix/ci-build-checkout-print
xiaoxia:debug/ci-build-schedule
xiaoxia:fix/runner-build-verify
xiaoxia:test/runner-build-verify
xiaoxia:test/build-farm-label
xiaoxia:fix/ci-build-checkout-parser
xiaoxia:fix/ci-build-checkout-syntax
xiaoxia:fix/ci-build-yaml
xiaoxia:feat/split-build-workflow-v2
xiaoxia:chore/cleanup-main-workflows
xiaoxia:feat/acr-registry-migration
xiaoxia:feat/split-build-workflow
xiaoxia:feat/ci-runner-saas-label
xiaoxia:fix/add-result-count-migration
xiaoxia:fix/matrix-run-newline
xiaoxia:ci/matrix-build-parallelism
xiaoxia:feature/product-center-ui-upgrade
xiaoxia:fix/hard-cut-use-concat
xiaoxia:fix/b007-unused-loop-var
xiaoxia:fix/b011-assert-false
xiaoxia:ci/local-cache-optimization
xiaoxia:fix/migration-diff-ci
xiaoxia:fix/frontend-lint-cache-validation
xiaoxia:ci/registry-cache-stability-fix
xiaoxia:fix/edit-plan-p0-asset-ids-and-p1-fixes
xiaoxia:fix/incremental-scan-api-based
xiaoxia:fix/unified-render-black-format
xiaoxia:fix/ci-incremental-scan-api-based
xiaoxia:fix/edit-plan-result-count-and-logs
xiaoxia:fix/prettier-format-frontend
xiaoxia:fix/ci-trigger-branch-patterns
xiaoxia:perf/web-build-cache-p1
xiaoxia:fix/eslint-npx-version-mismatch
xiaoxia:feat/ci-incremental-lint
xiaoxia:feat/ruff-replace-flake8
xiaoxia:fix/frontend-lint-npx-local
xiaoxia:fix/worker-pythonpath
xiaoxia:feat/worker-image-slimming
xiaoxia:fix/staging-ssh-deploy-call
xiaoxia:fix/staging-ssh-syntax
xiaoxia:feat/staging-ssh-deploy
xiaoxia:fix/code-quality-batch1
xiaoxia:fix/ci-bot-fix-pr
xiaoxia:feat/production-healthcheck
xiaoxia:fix/tech-debt-security-round2
xiaoxia:feat/staging-healthcheck-ci-v2
xiaoxia:temp-clean-npm-cache
xiaoxia:feat/ci-notify-final
xiaoxia:fix/frontend-type-debt-round2
xiaoxia:fix/deploy-notify-continue-on-error
xiaoxia:fix/render-engine-security-p0-p1
xiaoxia:feat/ci-notify-card-and-cache
xiaoxia:feature/task-center-page
xiaoxia:feat/ci-p2-optimization
xiaoxia:fix/pr312-security-debt-p1
xiaoxia:feat/ci-runner-layered
xiaoxia:feat/staging-healthcheck-ci
xiaoxia:fix/ci-buildx-builder
xiaoxia:feat/ci-parallel-build
xiaoxia:feat/multi-track-mix-subtitle-concat
xiaoxia:feat/changelog-auto-generate
xiaoxia:docs/audit-report-20260714
xiaoxia:feat/runner-label-routing
xiaoxia:ops/runner-labels
xiaoxia:feat/release-scripts-clean
xiaoxia:fix/deploy-production-ssh-key
xiaoxia:feat/ci-security-scans
xiaoxia:feat/release-scripts
xiaoxia:feat/video-speed-control
xiaoxia:fix/e2e-unroute-all-stability
xiaoxia:feat/cover-reverse-sticker
xiaoxia:feat/transition-engine
xiaoxia:fix/stub-generation-task-repository-filtered-methods
xiaoxia:feat/video-trimming
xiaoxia:feat/chroma-key-and-noise-reduction
xiaoxia:feat/watermark-intro-outro
xiaoxia:feat/bgm-mixing
xiaoxia:feat/picture-in-picture
xiaoxia:feat/tts-voiceover
xiaoxia:feat/template-and-plan-backend
xiaoxia:fix/build-script-grep-set-e
xiaoxia:feat/color-grading-engine
xiaoxia:feat/asr-auto-subtitles
xiaoxia:feat/video-center-backend
xiaoxia:feat/asset-batch-operations
xiaoxia:fix/build-cache-to-driver
xiaoxia:fix/e2e-disable-gpu
xiaoxia:fix/build-cache-tag
xiaoxia:fix/delete-204-response-body
xiaoxia:fix/ci-quick-fix
xiaoxia:ops/downgrade-runners
xiaoxia:cleanup/phase4-backend-p0
xiaoxia:bugfix/pip-break-system-packages-env
xiaoxia:cleanup/phase4-frontend-p2
xiaoxia:test-ci-verification
xiaoxia:fix/format-all-black-isort-flake8
xiaoxia:feature/ci-verification
xiaoxia:cleanup/phase4-frontend-p0p1
xiaoxia:ops/register-saas-runners
xiaoxia:fix/ci-runs-on-label
xiaoxia:fix/black-isort-format-fix
xiaoxia:fix/ci-pip-and-concurrency
xiaoxia:fix/pip-break-system-packages-compat
xiaoxia:ops/install-cmd-agent
xiaoxia:fix/pip-compatibility-all-runners
xiaoxia:cleanup/phase3-frontend
xiaoxia:feat/ci-security-scanning
xiaoxia:feat/frontend-build-gate
xiaoxia:fix/black-format-check-migration-safety
xiaoxia:ci/migration-safety-mypy
xiaoxia:ci/unify-cicd-config
xiaoxia:docs/ci-runner-planning
xiaoxia:feat/npm-audit-frontend
xiaoxia:cleanup/phase3-backend
xiaoxia:cleanup/phase2-backend
xiaoxia:fix/runner-labels
xiaoxia:cleanup/phase2-frontend
xiaoxia:ci/deploy-script-versioning
xiaoxia:feat/ci-vulture-dead-code
xiaoxia:feat/build-optimization
xiaoxia:feat/frontend-cache-optimization
xiaoxia:fix/redis-url-config
xiaoxia:feat/render-metrics
xiaoxia:cleanup/phase1-backend-v2
xiaoxia:cleanup/frontend-phase1-v2
xiaoxia:fix/develop-black-format
xiaoxia:cleanup/phase1-backend
xiaoxia:fix/generation-task-feature-flag
xiaoxia:cleanup/frontend-phase1
xiaoxia:feat/docker-cache-branch-isolation
xiaoxia:feat/ci-pr-gate-optimization
xiaoxia:feat/stream-copy-optimization
xiaoxia:fix/ffmpeg-timeout-protection
xiaoxia:feat/internal-render-download-api
xiaoxia:fix/dedup-float32-json
xiaoxia:fix/render-compare-p1
xiaoxia:fix/render-edit-plan-bugs
xiaoxia:feature/fix-format-render-adapter
xiaoxia:feat/unified-render-phase2
xiaoxia:feat/unified-render-phase1
xiaoxia:feat/ci-notify-all-jobs-v2
xiaoxia:feat/ci-notify-all-jobs
xiaoxia:fix/asset-status-enum-compat
xiaoxia:fix/generation-project-asset-download
xiaoxia:ci/runner-fix
xiaoxia:fix/classification-status-done-enum
xiaoxia:ci/runner-label-fix
xiaoxia:debug/cmd-agent
xiaoxia:temp/runner-expander
xiaoxia:temp/cmd-agent-fix
xiaoxia:temp/expand-runner
xiaoxia:feat/ci-split-v2
xiaoxia:feat/ci-split-integration-tests
xiaoxia:fix/voice-clone-source-audio-url-sign
xiaoxia:feat/task-queue-rate-limit
xiaoxia:fix/voice-clone-integration-test-assertions
xiaoxia:feat/ci-coverage-gate-and-notify
xiaoxia:fix/ci-validate-cache-exclude
xiaoxia:debug/cosyvoice-418-request-logging
xiaoxia:fix/cosyvoice-v3-flash-model
xiaoxia:fix/generation-task-enqueue-failure
xiaoxia:fix/cosyvoice-v3-voice-names
xiaoxia:fix/cosyvoice-full-rewrite
xiaoxia:feature/generation-logging-minimal
xiaoxia:fix/p02-deep-root-cause
xiaoxia:fix/p03-fps-setpts-order
xiaoxia:fix/p02-oss-credential-validation
xiaoxia:feat/worker-concurrency-env
xiaoxia:fix/p02-p03-deep-fix
xiaoxia:fix/generated-video-url-403
xiaoxia:fix/oneclick-gen-p0-fixes
xiaoxia:fix/ingest-job-library-id-length
xiaoxia:feat/app-version-in-dockerfile
xiaoxia:fix/cryptography-version
xiaoxia:fix/generation-task-status
xiaoxia:feature/ci-optimization
xiaoxia:feature/test-quality
xiaoxia:feature/ci-full-audit-fix
xiaoxia:feature/optimize-docker-tags
xiaoxia:feat/use-local-registry-mirrors
xiaoxia:feat/add-p1-api-tests
xiaoxia:feat/add-p1-e2e-tests
xiaoxia:feat/add-daily-health-check
xiaoxia:feat/add-performance-baseline
xiaoxia:feat/add-p0-e2e-tests
xiaoxia:fix/chunked-upload-route-order
xiaoxia:feat/add-p0-api-tests
xiaoxia:fix/config-standardization
xiaoxia:feat/editing-planner-frontend
xiaoxia:fix/editing-planner-mock-data
xiaoxia:feat/video-editing-modes-design
No Reviewers
Dismiss Review
Are you sure you want to dismiss this review?
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: xiaoxia/xiaoxia-saas#1367
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "fix/cover-title-overlay"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
用户在 Step 5 选择了视频标题后,Step 6 自动生成的封面图片上没有叠加该标题文字。PR #1365 的修复没有解决根本问题。
根因分析
标题文字在封面生成链路中存在三个断点:
generateCover()API 时未传入标题文字/generation/generate-cover端点不接受title_text参数,无法将标题渲染到封面图上custom_title(Step 5 用户选择的标题)未注入到virtual_plan.config.title.text,导致渲染引擎和封面候选帧都没有标题信息修复方案
前端(4 个文件)
apps/web/src/api/generation/cover.ts:GenerateCoverRequest新增title_text字段apps/web/src/pages/generate/hooks/useStep6Cover.ts:接收titleTextprop,传给 APIapps/web/src/pages/generate/components/Step6CoverSettings.tsx:新增titleTextprop 并传递给 hookapps/web/src/pages/generate/components/GenerateStepContent.tsx:将titleSettings.title传给 Step6CoverSettings后端(2 个文件)
apps/api/app/api/routes/generation_cover.py:GenerateCoverRequest新增title_text字段_apply_title_to_cover_image()辅助函数:下载封面图 → FFmpeg drawtext 叠加标题 → 重新上传 OSSapps/worker/worker_app/tasks/generation.py:_render_video()新增custom_title参数custom_title写入virtual_plan.config.title.textrender_adapter.py已有从 plan_config 读取标题并叠加到封面候选帧的逻辑数据流修复后
测试建议
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
[apps/api/app/api/routes/generation_cover.py: 79-95] 资源泄漏风险
_apply_title_to_cover_image函数中,tmp_dir临时目录的清理逻辑(finally块)仅挂载在 OSS 上传的try块下。如果在“下载原图”或“FFmpeg 处理”阶段发生异常并提前return,将导致tmp_dir无法被删除,长期运行会造成服务器磁盘空间泄漏(Disk Leak)。finally块)提升,覆盖整个函数的处理流程,或者使用contextlib或try...finally包裹所有可能产生 return 的路径。[apps/web/src/pages/generate/hooks/useStep6Cover.ts: 140] useEffect 无限循环
useEffect的依赖数组中包含了generating状态。该 Effect 内部会修改generating状态(先设为 true 请求接口,完成后设为 false)。当generating变为 false 时,会再次触发 Effect 执行,导致“生成 -> 完成 -> 再生成”的死循环,持续向服务端发送请求。generating。Effect 应仅由业务数据(如selectedTemplate,assetIds,titleText等)的变化触发,而不应由自身的执行状态触发。💡 改进建议(不阻塞合并)
[apps/api/app/api/routes/generation_cover.py: 274-288 & 312-327] 代码重复
generate_cover函数中,两处调用_apply_title_to_cover_image的逻辑完全一致(try-except 包裹、日志记录)。建议将此逻辑提取为一个局部辅助函数,避免代码重复,降低维护成本。[apps/api/app/api/routes/generation_cover.py: 72] 硬编码文件扩展名
src_path和 OSS 上传的storage_key均硬编码为.jpg。如果原始封面图是 PNG 或 WebP 格式,虽然 FFmpeg 通常能识别内容,但强制保存为 JPG 可能会丢失透明通道信息。建议根据原始 URL 的后缀或 MIME 类型动态确定扩展名。✅ 良好实践
apps/worker/worker_app/tasks/generation.py中,修改virtual_plan.config前使用了dict(...)进行浅拷贝,避免了直接修改可能被共享的原始配置对象,这是良好的防御性编程实践。title_text参数使用了Optional和默认值,保持了向后兼容性。🤖 由 AI 代码审查机器人自动生成 | 2026-08-14 06:52:01 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
#1368 已合入相同修复,此PR关闭。感谢贡献。
🗑️ 预览环境已清理
PR #1367 已关闭或合并,对应的预览环境已被清理。
Pull request closed