scenefab 2.2.0__tar.gz → 2.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. scenefab-2.4.2/PKG-INFO +451 -0
  2. scenefab-2.4.2/README.md +374 -0
  3. scenefab-2.4.2/config/app_config.yaml +10 -0
  4. {scenefab-2.2.0 → scenefab-2.4.2}/pyproject.toml +5 -1
  5. scenefab-2.4.2/resources/README.md +73 -0
  6. scenefab-2.4.2/resources/app_icon.svg +136 -0
  7. scenefab-2.4.2/resources/icons/app_icon.png +0 -0
  8. scenefab-2.4.2/resources/icons/app_icon_1024.png +0 -0
  9. scenefab-2.4.2/resources/icons/app_icon_128.png +0 -0
  10. scenefab-2.4.2/resources/icons/app_icon_256.png +0 -0
  11. scenefab-2.4.2/resources/icons/app_icon_32.png +0 -0
  12. scenefab-2.4.2/resources/icons/app_icon_512.png +0 -0
  13. scenefab-2.4.2/resources/icons/app_icon_64.png +0 -0
  14. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/api/main.py +10 -11
  15. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/api/routers/export.py +66 -16
  16. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/api/routers/pipeline.py +57 -5
  17. scenefab-2.4.2/src/scenefab/api/routers/plugins.py +194 -0
  18. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/api/routers/projects.py +37 -5
  19. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/application.py +50 -117
  20. scenefab-2.4.2/src/scenefab/core/__init__.py +67 -0
  21. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/core/audit.py +2 -2
  22. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/core/base_worker.py +33 -16
  23. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/core/di_container.py +37 -100
  24. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/core/event_types.py +0 -50
  25. scenefab-2.2.0/src/scenefab/core/streaming_llm_worker.py → scenefab-2.4.2/src/scenefab/core/stream_worker.py +30 -29
  26. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/core/task_model.py +2 -2
  27. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/core/task_store.py +19 -22
  28. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/core/unified_event_bus.py +14 -21
  29. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/exceptions.py +0 -49
  30. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/main.py +30 -13
  31. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/models/__init__.py +0 -15
  32. scenefab-2.2.0/src/scenefab/models/project_file_metadata.py → scenefab-2.4.2/src/scenefab/models/file_metadata.py +6 -21
  33. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/models/project.py +1 -35
  34. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/models/project_models.py +12 -52
  35. scenefab-2.4.2/src/scenefab/models/serialization.py +20 -0
  36. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/pipeline/__init__.py +17 -5
  37. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/pipeline/assembly_steps.py +136 -91
  38. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/pipeline/evaluation_steps.py +21 -93
  39. scenefab-2.4.2/src/scenefab/pipeline/fp_workflow.py +123 -0
  40. scenefab-2.4.2/src/scenefab/pipeline/narration/__init__.py +55 -0
  41. scenefab-2.2.0/src/scenefab/pipeline/narration_context.py → scenefab-2.4.2/src/scenefab/pipeline/narration/context.py +24 -13
  42. scenefab-2.2.0/src/scenefab/pipeline/narration.py → scenefab-2.4.2/src/scenefab/pipeline/narration/engine.py +18 -20
  43. scenefab-2.2.0/src/scenefab/pipeline/narration_evaluator.py → scenefab-2.4.2/src/scenefab/pipeline/narration/evaluator.py +149 -74
  44. scenefab-2.2.0/src/scenefab/pipeline/narration_state_machine.py → scenefab-2.4.2/src/scenefab/pipeline/narration/state_machine.py +153 -109
  45. scenefab-2.4.2/src/scenefab/pipeline/narration/steps.py +134 -0
  46. {scenefab-2.2.0/src/scenefab/core → scenefab-2.4.2/src/scenefab/pipeline}/short_drama.py +14 -7
  47. scenefab-2.4.2/src/scenefab/pipeline/text_utils.py +38 -0
  48. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/pipeline/understanding_steps.py +210 -118
  49. scenefab-2.4.2/src/scenefab/plugins/examples/cinematic_subtitle/__init__.py +0 -0
  50. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/plugins/loader.py +3 -1
  51. scenefab-2.4.2/src/scenefab/project/__init__.py +19 -0
  52. scenefab-2.2.0/src/scenefab/project_manager.py → scenefab-2.4.2/src/scenefab/project/manager.py +100 -195
  53. scenefab-2.2.0/src/scenefab/project_template_manager.py → scenefab-2.4.2/src/scenefab/project/template_mgr.py +221 -290
  54. {scenefab-2.2.0/src/scenefab → scenefab-2.4.2/src/scenefab/project}/template_models.py +1 -1
  55. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/secure_key_manager.py +41 -15
  56. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/__init__.py +1 -6
  57. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/__init__.py +6 -16
  58. scenefab-2.4.2/src/scenefab/services/ai/base.py +28 -0
  59. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/base_llm_provider.py +85 -113
  60. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/llm_manager.py +5 -5
  61. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/providers/__init__.py +0 -12
  62. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/providers/claude.py +9 -32
  63. scenefab-2.4.2/src/scenefab/services/ai/providers/deepseek.py +98 -0
  64. scenefab-2.4.2/src/scenefab/services/ai/providers/doubao.py +43 -0
  65. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/providers/gemini.py +24 -70
  66. scenefab-2.4.2/src/scenefab/services/ai/providers/glm5.py +18 -0
  67. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/providers/hunyuan.py +11 -15
  68. scenefab-2.4.2/src/scenefab/services/ai/providers/kimi.py +18 -0
  69. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/providers/local.py +5 -2
  70. scenefab-2.4.2/src/scenefab/services/ai/providers/openai_compat.py +91 -0
  71. scenefab-2.4.2/src/scenefab/services/ai/providers/qwen.py +15 -0
  72. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/providers/qwen37.py +85 -78
  73. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/retry.py +1 -1
  74. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/scene_analyzer.py +137 -19
  75. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/scene_models.py +1 -1
  76. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/script_generator/script_generator.py +19 -55
  77. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/script_stream.py +9 -157
  78. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/subtitle_extractor.py +1 -1
  79. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/subtitle_merger.py +4 -5
  80. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/subtitle_speech.py +2 -2
  81. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/subtitle_translator.py +13 -17
  82. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/tts_providers.py +9 -26
  83. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/vision_base.py +35 -0
  84. scenefab-2.4.2/src/scenefab/services/ai/vision_providers.py +118 -0
  85. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/voice_models.py +3 -1
  86. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/export/__init__.py +16 -23
  87. scenefab-2.2.0/src/scenefab/services/export/batch_export_manager.py → scenefab-2.4.2/src/scenefab/services/export/batch_export.py +41 -27
  88. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/export/export_manager.py +71 -5
  89. scenefab-2.4.2/src/scenefab/services/export/export_utils.py +99 -0
  90. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/export/jianying_exporter.py +15 -9
  91. scenefab-2.4.2/src/scenefab/services/export/subtitle_exporter.py +75 -0
  92. scenefab-2.2.0/src/scenefab/services/export/direct_video_exporter.py → scenefab-2.4.2/src/scenefab/services/export/video_exporter.py +212 -113
  93. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/orchestration/__init__.py +0 -20
  94. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/orchestration/pipe_models.py +9 -10
  95. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/__init__.py +45 -18
  96. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/base_maker.py +0 -111
  97. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/cache/frame_cache.py +40 -14
  98. {scenefab-2.2.0/src/scenefab/services/video_tools → scenefab-2.4.2/src/scenefab/services/video}/caption_gen.py +2 -1
  99. {scenefab-2.2.0/src/scenefab/services/video_tools → scenefab-2.4.2/src/scenefab/services/video}/hardware.py +16 -16
  100. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/highlight_detector.py +4 -2
  101. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/models/monologue.py +24 -0
  102. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/monologue_maker.py +115 -57
  103. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/pipeline_integrator.py +10 -35
  104. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/scene_converter.py +2 -5
  105. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/session.py +15 -22
  106. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/track_builder.py +1 -1
  107. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/video_interleaver.py +12 -4
  108. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video_understanding/api_adapters.py +2 -1
  109. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video_understanding/core.py +13 -4
  110. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video_understanding/story_builder.py +1 -1
  111. scenefab-2.4.2/src/scenefab/settings/__init__.py +22 -0
  112. scenefab-2.2.0/src/scenefab/settings.py → scenefab-2.4.2/src/scenefab/settings/config.py +76 -109
  113. scenefab-2.2.0/src/scenefab/settings_data.py → scenefab-2.4.2/src/scenefab/settings/definitions.py +17 -23
  114. scenefab-2.2.0/src/scenefab/settings_manager.py → scenefab-2.4.2/src/scenefab/settings/manager.py +37 -37
  115. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/signals_bridge.py +2 -2
  116. scenefab-2.4.2/src/scenefab/ui/__init__.py +26 -0
  117. scenefab-2.4.2/src/scenefab/ui/main/controls.py +63 -0
  118. scenefab-2.4.2/src/scenefab/ui/main/main_window/__init__.py +779 -0
  119. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/ui/main/main_window/nav_components.py +28 -23
  120. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/ui/main/main_window/status_bar.py +36 -5
  121. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/ui/main/main_window/top_bar.py +2 -2
  122. scenefab-2.4.2/src/scenefab/ui/main/page_router.py +103 -0
  123. scenefab-2.4.2/src/scenefab/ui/main/pages/__init__.py +28 -0
  124. scenefab-2.4.2/src/scenefab/ui/main/pages/assets_page.py +406 -0
  125. scenefab-2.4.2/src/scenefab/ui/main/pages/home_page.py +378 -0
  126. scenefab-2.4.2/src/scenefab/ui/main/pages/page_defaults.py +65 -0
  127. scenefab-2.4.2/src/scenefab/ui/main/pages/page_view_models.py +212 -0
  128. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/ui/main/pages/page_widgets.py +28 -22
  129. scenefab-2.4.2/src/scenefab/ui/main/pages/production_page.py +264 -0
  130. scenefab-2.4.2/src/scenefab/ui/main/pages/settings_page.py +563 -0
  131. scenefab-2.4.2/src/scenefab/ui/main/registry.py +138 -0
  132. scenefab-2.4.2/src/scenefab/ui/main/system_tray.py +115 -0
  133. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/ui/main/tray_manager.py +2 -2
  134. scenefab-2.4.2/src/scenefab/ui/theme/__init__.py +62 -0
  135. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/ui/theme/ds_tokens.py +247 -43
  136. scenefab-2.4.2/src/scenefab/ui/theme/runtime.py +130 -0
  137. scenefab-2.4.2/src/scenefab/ui/viewmodels/__init__.py +143 -0
  138. scenefab-2.4.2/src/scenefab/ui/viewmodels/assets_viewmodel.py +261 -0
  139. scenefab-2.4.2/src/scenefab/ui/viewmodels/home_viewmodel.py +185 -0
  140. scenefab-2.4.2/src/scenefab/ui/viewmodels/production_viewmodel.py +437 -0
  141. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/update/checker.py +11 -4
  142. scenefab-2.4.2/src/scenefab/utils/async_bridge.py +57 -0
  143. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/utils/async_subprocess.py +3 -28
  144. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/utils/error_handler.py +23 -69
  145. scenefab-2.4.2/src/scenefab/utils/json_io.py +72 -0
  146. scenefab-2.4.2/src/scenefab/utils/lazy_imports.py +66 -0
  147. scenefab-2.4.2/src/scenefab/utils/project_io.py +135 -0
  148. scenefab-2.4.2/src/scenefab/utils/retry.py +143 -0
  149. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/utils/security.py +59 -25
  150. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/utils/singleton.py +4 -13
  151. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/utils/version.py +1 -1
  152. scenefab-2.4.2/src/scenefab.egg-info/PKG-INFO +451 -0
  153. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab.egg-info/SOURCES.txt +65 -117
  154. scenefab-2.4.2/tests/test_api_routers_coverage.py +266 -0
  155. scenefab-2.4.2/tests/test_assets_viewmodel.py +128 -0
  156. scenefab-2.4.2/tests/test_batch_export.py +34 -0
  157. scenefab-2.4.2/tests/test_benchmark.py +53 -0
  158. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_config_manager.py +1 -22
  159. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_exceptions.py +10 -25
  160. scenefab-2.4.2/tests/test_fp_workflow.py +60 -0
  161. scenefab-2.4.2/tests/test_frame_cache_disk_fallback.py +159 -0
  162. scenefab-2.4.2/tests/test_home_viewmodel.py +127 -0
  163. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_integration.py +23 -13
  164. scenefab-2.4.2/tests/test_page_vm.py +22 -0
  165. scenefab-2.4.2/tests/test_production_viewmodel.py +240 -0
  166. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_project_manager.py +6 -3
  167. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_resources.py +14 -4
  168. scenefab-2.2.0/tests/test_script_generator_streaming.py → scenefab-2.4.2/tests/test_script_stream.py +0 -6
  169. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_service_container.py +3 -3
  170. scenefab-2.2.0/tests/test_project_settings_manager.py → scenefab-2.4.2/tests/test_settings_mgr.py +67 -1
  171. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_smoke_pipeline.py +130 -210
  172. scenefab-2.4.2/tests/test_template_mgr.py +420 -0
  173. scenefab-2.4.2/tests/test_text_utils.py +59 -0
  174. scenefab-2.4.2/tests/test_theme.py +115 -0
  175. scenefab-2.4.2/tests/test_theme_runtime.py +167 -0
  176. scenefab-2.4.2/tests/test_ui_module_smoke.py +139 -0
  177. scenefab-2.4.2/tests/test_update_checker.py +295 -0
  178. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_version.py +0 -6
  179. scenefab-2.4.2/tests/test_video_exporter.py +219 -0
  180. scenefab-2.2.0/PKG-INFO +0 -179
  181. scenefab-2.2.0/README.md +0 -102
  182. scenefab-2.2.0/config/app_config.yaml +0 -82
  183. scenefab-2.2.0/resources/README.md +0 -43
  184. scenefab-2.2.0/resources/app_icon.svg +0 -57
  185. scenefab-2.2.0/resources/icons/app_icon.png +0 -0
  186. scenefab-2.2.0/resources/icons/app_icon_128.png +0 -0
  187. scenefab-2.2.0/resources/icons/app_icon_256.png +0 -0
  188. scenefab-2.2.0/resources/icons/app_icon_32.png +0 -0
  189. scenefab-2.2.0/resources/icons/app_icon_512.png +0 -0
  190. scenefab-2.2.0/resources/icons/app_icon_64.png +0 -0
  191. scenefab-2.2.0/resources/styles/dark_theme.qss +0 -431
  192. scenefab-2.2.0/resources/styles/light_theme.qss +0 -431
  193. scenefab-2.2.0/src/scenefab/api/routers/plugins.py +0 -154
  194. scenefab-2.2.0/src/scenefab/cache_impl/__init__.py +0 -25
  195. scenefab-2.2.0/src/scenefab/cache_impl/disk_cache.py +0 -331
  196. scenefab-2.2.0/src/scenefab/cache_impl/memory_cache.py +0 -303
  197. scenefab-2.2.0/src/scenefab/cache_manager.py +0 -213
  198. scenefab-2.2.0/src/scenefab/core/__init__.py +0 -194
  199. scenefab-2.2.0/src/scenefab/core/batch_processor.py +0 -526
  200. scenefab-2.2.0/src/scenefab/core/config_v2.py +0 -448
  201. scenefab-2.2.0/src/scenefab/core/event_store.py +0 -420
  202. scenefab-2.2.0/src/scenefab/core/pipeline_engine.py +0 -655
  203. scenefab-2.2.0/src/scenefab/core/platform_adapter.py +0 -650
  204. scenefab-2.2.0/src/scenefab/core/platform_extended.py +0 -622
  205. scenefab-2.2.0/src/scenefab/core/ws_hub.py +0 -330
  206. scenefab-2.2.0/src/scenefab/event_bus.py +0 -140
  207. scenefab-2.2.0/src/scenefab/interfaces/__init__.py +0 -17
  208. scenefab-2.2.0/src/scenefab/interfaces/cache_interface.py +0 -147
  209. scenefab-2.2.0/src/scenefab/logger.py +0 -150
  210. scenefab-2.2.0/src/scenefab/models/enums.py +0 -77
  211. scenefab-2.2.0/src/scenefab/orchestration/__init__.py +0 -10
  212. scenefab-2.2.0/src/scenefab/orchestration/pipeline_controller.py +0 -229
  213. scenefab-2.2.0/src/scenefab/pipeline/narration_steps.py +0 -326
  214. scenefab-2.2.0/src/scenefab/plugins/examples/cinematic_subtitle/cinematic_sub.py +0 -301
  215. scenefab-2.2.0/src/scenefab/plugins/examples/deepseek_ai_generator/deepseek_gen.py +0 -354
  216. scenefab-2.2.0/src/scenefab/registry_models.py +0 -148
  217. scenefab-2.2.0/src/scenefab/service_container.py +0 -22
  218. scenefab-2.2.0/src/scenefab/services/ai/adapters/__init__.py +0 -30
  219. scenefab-2.2.0/src/scenefab/services/ai/adapters/adapter_registry.py +0 -183
  220. scenefab-2.2.0/src/scenefab/services/ai/adapters/base.py +0 -195
  221. scenefab-2.2.0/src/scenefab/services/ai/asr.py +0 -157
  222. scenefab-2.2.0/src/scenefab/services/ai/base.py +0 -100
  223. scenefab-2.2.0/src/scenefab/services/ai/cache.py +0 -487
  224. scenefab-2.2.0/src/scenefab/services/ai/errors.py +0 -40
  225. scenefab-2.2.0/src/scenefab/services/ai/infra/__init__.py +0 -203
  226. scenefab-2.2.0/src/scenefab/services/ai/interfaces.py +0 -134
  227. scenefab-2.2.0/src/scenefab/services/ai/llm.py +0 -124
  228. scenefab-2.2.0/src/scenefab/services/ai/manager.py +0 -116
  229. scenefab-2.2.0/src/scenefab/services/ai/model_registry.py +0 -203
  230. scenefab-2.2.0/src/scenefab/services/ai/providers/deepseek.py +0 -144
  231. scenefab-2.2.0/src/scenefab/services/ai/providers/doubao.py +0 -116
  232. scenefab-2.2.0/src/scenefab/services/ai/providers/glm5.py +0 -52
  233. scenefab-2.2.0/src/scenefab/services/ai/providers/kimi.py +0 -56
  234. scenefab-2.2.0/src/scenefab/services/ai/providers/provider_models.py +0 -226
  235. scenefab-2.2.0/src/scenefab/services/ai/providers/qwen.py +0 -93
  236. scenefab-2.2.0/src/scenefab/services/ai/scene_analyzer_v2.py +0 -230
  237. scenefab-2.2.0/src/scenefab/services/ai/secure_subtitle_extractor.py +0 -169
  238. scenefab-2.2.0/src/scenefab/services/ai/sensevoice_provider.py +0 -637
  239. scenefab-2.2.0/src/scenefab/services/ai/tts.py +0 -208
  240. scenefab-2.2.0/src/scenefab/services/ai/vision.py +0 -167
  241. scenefab-2.2.0/src/scenefab/services/ai/vision_providers.py +0 -414
  242. scenefab-2.2.0/src/scenefab/services/ai/whisper_asr_provider.py +0 -305
  243. scenefab-2.2.0/src/scenefab/services/export/export_utils.py +0 -204
  244. scenefab-2.2.0/src/scenefab/services/export/subtitle_exporter.py +0 -70
  245. scenefab-2.2.0/src/scenefab/services/orchestration/pipeline_project_manager.py +0 -489
  246. scenefab-2.2.0/src/scenefab/services/video/grouping/__init__.py +0 -20
  247. scenefab-2.2.0/src/scenefab/services/video/grouping/smart_grouper.py +0 -428
  248. scenefab-2.2.0/src/scenefab/services/video/selection/__init__.py +0 -14
  249. scenefab-2.2.0/src/scenefab/services/video/selection/seg_selector.py +0 -194
  250. scenefab-2.2.0/src/scenefab/services/video_tools/__init__.py +0 -39
  251. scenefab-2.2.0/src/scenefab/task_manager.py +0 -519
  252. scenefab-2.2.0/src/scenefab/ui/__init__.py +0 -9
  253. scenefab-2.2.0/src/scenefab/ui/main/main_window/__init__.py +0 -273
  254. scenefab-2.2.0/src/scenefab/ui/main/pages/__init__.py +0 -13
  255. scenefab-2.2.0/src/scenefab/ui/main/pages/assets_page.py +0 -151
  256. scenefab-2.2.0/src/scenefab/ui/main/pages/home_page.py +0 -205
  257. scenefab-2.2.0/src/scenefab/ui/main/pages/production_page.py +0 -179
  258. scenefab-2.2.0/src/scenefab/ui/main/pages/settings_page.py +0 -249
  259. scenefab-2.2.0/src/scenefab/ui/theme/__init__.py +0 -3
  260. scenefab-2.2.0/src/scenefab/ui/theme/base_styles.py +0 -147
  261. scenefab-2.2.0/src/scenefab/ui/theme/theme_manager.py +0 -333
  262. scenefab-2.2.0/src/scenefab/ui/theme/tokens.py +0 -114
  263. scenefab-2.2.0/src/scenefab/utils/performance.py +0 -222
  264. scenefab-2.2.0/src/scenefab/utils/pickle_io.py +0 -35
  265. scenefab-2.2.0/src/scenefab/utils/secure_config_loader.py +0 -430
  266. scenefab-2.2.0/src/scenefab/utils/shortcut_manager.py +0 -384
  267. scenefab-2.2.0/src/scenefab/version_manager.py +0 -573
  268. scenefab-2.2.0/src/scenefab/version_models.py +0 -92
  269. scenefab-2.2.0/src/scenefab.egg-info/PKG-INFO +0 -179
  270. scenefab-2.2.0/tests/test_ai_service_manager.py +0 -104
  271. scenefab-2.2.0/tests/test_arch_v21.py +0 -645
  272. scenefab-2.2.0/tests/test_assembly_steps.py +0 -584
  273. scenefab-2.2.0/tests/test_base_exporter.py +0 -135
  274. scenefab-2.2.0/tests/test_benchmark.py +0 -101
  275. scenefab-2.2.0/tests/test_cache_manager.py +0 -86
  276. scenefab-2.2.0/tests/test_caption_generator.py +0 -231
  277. scenefab-2.2.0/tests/test_core_v2.py +0 -804
  278. scenefab-2.2.0/tests/test_direct_video_exporter.py +0 -106
  279. scenefab-2.2.0/tests/test_evaluation_steps.py +0 -721
  280. scenefab-2.2.0/tests/test_export_presets.py +0 -52
  281. scenefab-2.2.0/tests/test_ffmpeg_tool.py +0 -338
  282. scenefab-2.2.0/tests/test_highlight_detector.py +0 -90
  283. scenefab-2.2.0/tests/test_issue82_regression.py +0 -198
  284. scenefab-2.2.0/tests/test_jianying_exporter.py +0 -178
  285. scenefab-2.2.0/tests/test_llm_base.py +0 -141
  286. scenefab-2.2.0/tests/test_llm_cache.py +0 -289
  287. scenefab-2.2.0/tests/test_llm_providers.py +0 -69
  288. scenefab-2.2.0/tests/test_logger.py +0 -87
  289. scenefab-2.2.0/tests/test_model_catalog.py +0 -390
  290. scenefab-2.2.0/tests/test_monologue_maker.py +0 -129
  291. scenefab-2.2.0/tests/test_narration_state_machine.py +0 -481
  292. scenefab-2.2.0/tests/test_performance.py +0 -154
  293. scenefab-2.2.0/tests/test_pipeline_project_manager.py +0 -34
  294. scenefab-2.2.0/tests/test_project_models.py +0 -124
  295. scenefab-2.2.0/tests/test_project_template_manager.py +0 -99
  296. scenefab-2.2.0/tests/test_project_version_manager.py +0 -100
  297. scenefab-2.2.0/tests/test_script_generator.py +0 -87
  298. scenefab-2.2.0/tests/test_subtitle_extractor.py +0 -109
  299. scenefab-2.2.0/tests/test_tray_manager.py +0 -104
  300. scenefab-2.2.0/tests/test_ui_main_window.py +0 -41
  301. scenefab-2.2.0/tests/test_understanding_steps.py +0 -606
  302. scenefab-2.2.0/tests/test_video_maker.py +0 -135
  303. scenefab-2.2.0/tests/test_vision_providers.py +0 -149
  304. scenefab-2.2.0/tests/test_voice_generator.py +0 -142
  305. {scenefab-2.2.0 → scenefab-2.4.2}/LICENSE +0 -0
  306. {scenefab-2.2.0 → scenefab-2.4.2}/MANIFEST.in +0 -0
  307. {scenefab-2.2.0 → scenefab-2.4.2}/config/llm.yaml +0 -0
  308. {scenefab-2.2.0 → scenefab-2.4.2}/config/logging.conf +0 -0
  309. {scenefab-2.2.0 → scenefab-2.4.2}/resources/icon.icns +0 -0
  310. {scenefab-2.2.0 → scenefab-2.4.2}/resources/icon.ico +0 -0
  311. {scenefab-2.2.0 → scenefab-2.4.2}/setup.cfg +0 -0
  312. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/__init__.py +0 -0
  313. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/__main__.py +0 -0
  314. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/api/__init__.py +0 -0
  315. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/api/routers/__init__.py +0 -0
  316. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/api/routers/health.py +0 -0
  317. {scenefab-2.2.0/src/scenefab/tests → scenefab-2.4.2/src/scenefab/api/schemas}/__init__.py +0 -0
  318. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/api/schemas/models.py +0 -0
  319. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/core/ffmpeg_safe.py +0 -0
  320. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/models/constants.py +0 -0
  321. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/models/media.py +0 -0
  322. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/models/narration.py +0 -0
  323. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/models/video.py +0 -0
  324. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/plugins/__init__.py +0 -0
  325. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/plugins/examples/deepseek_ai_generator/__init__.py +0 -0
  326. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/plugins/interfaces/__init__.py +0 -0
  327. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/plugins/interfaces/ai_generator.py +0 -0
  328. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/plugins/interfaces/base.py +0 -0
  329. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/plugins/interfaces/export_plugin.py +0 -0
  330. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/plugins/registry.py +0 -0
  331. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/py.typed +0 -0
  332. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/model_catalog.py +0 -0
  333. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/provider_types.py +0 -0
  334. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/scene_scorer.py +0 -0
  335. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/script_generator/__init__.py +0 -0
  336. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/script_generator/_prompt_builder.py +0 -0
  337. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/script_generator/_response_parser.py +0 -0
  338. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/script_generator/_style_prompts.py +0 -0
  339. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/script_models.py +0 -0
  340. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/subtitle_types.py +0 -0
  341. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/ai/voice_generator.py +0 -0
  342. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/export/jianying_adapter.py +0 -0
  343. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/export/presets.py +0 -0
  344. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/orchestration/enums.py +0 -0
  345. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/analyzer.py +0 -0
  346. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/cache/__init__.py +0 -0
  347. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/extraction/__init__.py +0 -0
  348. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/extraction/emotion_peak.py +0 -0
  349. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/extraction/first_person.py +0 -0
  350. {scenefab-2.2.0/src/scenefab/services/video_tools → scenefab-2.4.2/src/scenefab/services/video}/ffmpeg_tool.py +0 -0
  351. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/models/__init__.py +0 -0
  352. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/models/perspective.py +0 -0
  353. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/perspective_mapper.py +0 -0
  354. {scenefab-2.2.0/src/scenefab/services/video_tools → scenefab-2.4.2/src/scenefab/services/video}/probe.py +0 -0
  355. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video/processor.py +0 -0
  356. /scenefab-2.2.0/src/scenefab/services/video_tools/base.py → /scenefab-2.4.2/src/scenefab/services/video/tool_base.py +0 -0
  357. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video_understanding/__init__.py +0 -0
  358. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/services/video_understanding/models.py +0 -0
  359. /scenefab-2.2.0/src/scenefab/settings_types.py → /scenefab-2.4.2/src/scenefab/settings/types.py +0 -0
  360. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/templates/ai_enhancement/project_template.json +0 -0
  361. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/templates/ai_enhancement/template_info.json +0 -0
  362. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/templates/ai_enhancement/template_metadata.json +0 -0
  363. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/templates/video_tutorial/project_template.json +0 -0
  364. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/templates/video_tutorial/template_info.json +0 -0
  365. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/templates/video_tutorial/template_metadata.json +0 -0
  366. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/ui/main/__init__.py +0 -0
  367. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/ui/main/main_window/content_area.py +0 -0
  368. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/update/__init__.py +0 -0
  369. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab/utils/__init__.py +0 -0
  370. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab.egg-info/dependency_links.txt +0 -0
  371. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab.egg-info/entry_points.txt +0 -0
  372. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab.egg-info/requires.txt +0 -0
  373. {scenefab-2.2.0 → scenefab-2.4.2}/src/scenefab.egg-info/top_level.txt +0 -0
  374. {scenefab-2.2.0 → scenefab-2.4.2}/tests/test_secure_key_manager.py +0 -0
@@ -0,0 +1,451 @@
1
+ Metadata-Version: 2.4
2
+ Name: scenefab
3
+ Version: 2.4.2
4
+ Summary: SceneFab - AI 影视解说视频创作工具,一键完成智能拆条 · 解说生成 · 配音合成
5
+ Author-email: Agions <agions@qq.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Agions/scene-fab
8
+ Project-URL: Documentation, https://agions.github.io/scene-fab/
9
+ Project-URL: Repository, https://github.com/Agions/scene-fab.git
10
+ Project-URL: Issues, https://github.com/Agions/scene-fab/issues
11
+ Project-URL: Changelog, https://github.com/Agions/scene-fab/releases
12
+ Keywords: video,AI,film-commentary,scene-detection,TTS,短视频,影视解说
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: X11 Applications :: Qt
15
+ Classifier: Environment :: MacOS X
16
+ Classifier: Environment :: Win32 (MS Windows)
17
+ Classifier: Intended Audience :: End Users/Desktop
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Operating System :: Microsoft :: Windows
20
+ Classifier: Operating System :: POSIX :: Linux
21
+ Classifier: Operating System :: MacOS
22
+ Classifier: Programming Language :: Python :: 3
23
+ Classifier: Programming Language :: Python :: 3.10
24
+ Classifier: Programming Language :: Python :: 3.11
25
+ Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Topic :: Multimedia :: Video
27
+ Classifier: Topic :: Multimedia :: Video :: Non-Linear Editor
28
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
29
+ Requires-Python: >=3.10
30
+ Description-Content-Type: text/markdown
31
+ License-File: LICENSE
32
+ Requires-Dist: PySide6>=6.9.0
33
+ Requires-Dist: Shiboken6>=6.9.0
34
+ Requires-Dist: opencv-python>=4.8.1
35
+ Requires-Dist: numpy>=1.26.0
36
+ Requires-Dist: pillow>=10.1.0
37
+ Requires-Dist: pydub>=0.25.0
38
+ Requires-Dist: soundfile>=0.12.0
39
+ Requires-Dist: edge-tts>=6.1.0
40
+ Requires-Dist: scenedetect>=0.6.0
41
+ Requires-Dist: requests>=2.31.0
42
+ Requires-Dist: httpx>=0.25.0
43
+ Requires-Dist: pydantic>=2.5.0
44
+ Requires-Dist: pydantic-settings>=2.0.0
45
+ Requires-Dist: python-dotenv>=1.0.0
46
+ Requires-Dist: pyyaml>=6.0.1
47
+ Requires-Dist: psutil>=5.9.6
48
+ Requires-Dist: cryptography>=41.0.0
49
+ Requires-Dist: keyring>=24.0.0
50
+ Requires-Dist: openai>=1.0.0
51
+ Requires-Dist: google-generativeai>=0.8.0
52
+ Requires-Dist: moviepy>=1.0.3
53
+ Requires-Dist: packaging>=21.0
54
+ Provides-Extra: ai-full
55
+ Requires-Dist: faster-whisper>=1.0.0; extra == "ai-full"
56
+ Requires-Dist: torch>=2.0.0; extra == "ai-full"
57
+ Requires-Dist: librosa>=0.10.0; extra == "ai-full"
58
+ Provides-Extra: translation
59
+ Requires-Dist: deepl>=1.18.0; extra == "translation"
60
+ Provides-Extra: api
61
+ Requires-Dist: fastapi>=0.109.0; extra == "api"
62
+ Requires-Dist: uvicorn>=0.27.0; extra == "api"
63
+ Provides-Extra: all
64
+ Requires-Dist: scenefab[ai-full,api,translation]; extra == "all"
65
+ Provides-Extra: dev
66
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
67
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
68
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
69
+ Requires-Dist: pytest-timeout>=2.1.0; extra == "dev"
70
+ Requires-Dist: black>=23.11.0; extra == "dev"
71
+ Requires-Dist: mypy>=1.7.0; extra == "dev"
72
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
73
+ Requires-Dist: types-requests>=2.31.0; extra == "dev"
74
+ Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
75
+ Requires-Dist: types-PySide6>=6.6.0; extra == "dev"
76
+ Dynamic: license-file
77
+
78
+ <div align="center">
79
+
80
+ <img src="assets/logo-horizontal.svg" alt="SceneFab" width="480"/>
81
+
82
+ # SceneFab · AI 影视解说视频创作工具
83
+
84
+ > **从素材理解、脚本生成、配音合成到多平台导出,一站式自动化生产流程**
85
+
86
+ [![Version](https://img.shields.io/badge/v2.4.0-06b6d4?style=for-the-badge&logo=git&logoColor=white)](https://github.com/Agions/scene-fab/releases)
87
+ [![Python](https://img.shields.io/badge/Python-3.10+-3b82f6?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/)
88
+ [![PySide6](https://img.shields.io/badge/PySide6-6.9+-3b82f6?style=for-the-badge&logo=qt&logoColor=white)](https://doc.qt.io/qtforpython/)
89
+ [![FFmpeg](https://img.shields.io/badge/FFmpeg-6.x-3b82f6?style=for-the-badge&logo=ffmpeg&logoColor=white)](https://ffmpeg.org/)
90
+ [![License](https://img.shields.io/badge/License-MIT-8b5cf6?style=for-the-badge)](LICENSE)
91
+
92
+ [![CI](https://img.shields.io/github/actions/workflow/status/Agions/scene-fab/pr-check.yml?branch=main&style=flat-square&color=22c55e&label=CI)](https://github.com/Agions/scene-fab/actions)
93
+ [![Docs](https://img.shields.io/github/actions/workflow/status/Agions/scene-fab/deploy-pages.yml?style=flat-square&color=3b82f6&label=Docs)](https://agions.github.io/scene-fab/)
94
+ [![Stars](https://img.shields.io/github/stars/Agions/scene-fab?style=flat-square&color=f59e0b)](https://github.com/Agions/scene-fab/stargazers)
95
+ [![Issues](https://img.shields.io/github/issues/Agions/scene-fab?style=flat-square&color=ef4444)](https://github.com/Agions/scene-fab/issues)
96
+
97
+ [**在线文档**](https://agions.github.io/scene-fab/) · [**下载安装**](https://github.com/Agions/scene-fab/releases) · [**快速开始**](#快速开始) · [**报告问题**](https://github.com/Agions/scene-fab/issues/new?template=bug_report.md) · [**功能建议**](https://github.com/Agions/scene-fab/discussions)
98
+
99
+ </div>
100
+
101
+ ---
102
+
103
+ ## 🎬 它是什么?
104
+
105
+ **SceneFab** 是一款面向影视和短剧**第一人称解说**的 AI 视频创作工具。它将视频理解、脚本生成、配音合成、字幕装配和平台导出串成标准化流程,支持从单集创作到整季批量生产的完整链路。
106
+
107
+ 系统围绕 **DAG 并行流水线引擎** 构建,采用事件驱动架构,支持 10+ 个 LLM 提供商和多平台导出预设。
108
+
109
+ ### 解决什么问题?
110
+
111
+ | 痛点 | SceneFab 方案 |
112
+ |------|---------------|
113
+ | 🎞️ 视频拆条全靠手工打点,效率低 | AI 智能语义拆条(Qwen2.5-VL),按情节自动切分 |
114
+ | 📝 写脚本要理解人物关系 + 桥段 + 节奏 | 剧情图谱 + 桥段识别 + 第一人称 Hook→主体→钩子结构 |
115
+ | 🎙️ 配音成本高、音色不一致 | Edge-TTS 多音色 + F5-TTS 音色克隆,本地运行 |
116
+ | ⏱️ 字幕和配音对不齐 | 50ms 精度时间戳对齐,偏差 < 50ms 验收标准 |
117
+ | 📱 多平台导出参数杂 | 8 平台预设(抖音/B站/小红书/YouTube/TikTok...),一键导出 |
118
+ | 📚 短剧整季批量生产成本高 | 整季批量 + 断点续传 + 并行 worker + 实时进度追踪 |
119
+
120
+ ---
121
+
122
+ ## 🚀 核心能力
123
+
124
+ <table>
125
+ <tr>
126
+ <td align="center" width="33%">
127
+ <h3>🎬 AI 视频理解</h3>
128
+ <p>场景分析 · 人物识别 · 情绪峰值检测<br/>桥段识别 · StoryGraph 剧情图谱</p>
129
+ </td>
130
+ <td align="center" width="33%">
131
+ <h3>📝 第一人称脚本</h3>
132
+ <p>Hook 改写 · 桥段模板 · 多模型复核<br/>字数约束 · 风格预设(7 种)</p>
133
+ </td>
134
+ <td align="center" width="33%">
135
+ <h3>🎙️ 智能配音合成</h3>
136
+ <p>Edge-TTS 多音色 · F5-TTS 克隆<br/>50ms 时间戳对齐 · 音量稳定</p>
137
+ </td>
138
+ </tr>
139
+ <tr>
140
+ <td align="center">
141
+ <h3>📐 字幕装配</h3>
142
+ <p>SRT/ASS 双格式 · 安全区控制<br/>样式保留 · 多平台适配</p>
143
+ </td>
144
+ <td align="center">
145
+ <h3>📱 多平台导出</h3>
146
+ <p>8 平台预设 · H.264/H.265<br/>剪映草稿 JSON · MP4 直出</p>
147
+ </td>
148
+ <td align="center">
149
+ <h3>🔄 批量生产</h3>
150
+ <p>整季批量 · 断点续传 · 并行 worker<br/>实时进度 · 失败重试</p>
151
+ </td>
152
+ </tr>
153
+ </table>
154
+
155
+ ---
156
+
157
+ ## ⚡ 快速开始
158
+
159
+ ### 📥 安装 SceneFab
160
+
161
+ #### 方式一:下载安装包(推荐新手)
162
+
163
+ 从 [Releases](https://github.com/Agions/scene-fab/releases) 下载对应平台的安装包:
164
+
165
+ | 平台 | 文件 | 系统要求 |
166
+ |------|------|----------|
167
+ | Windows | `SceneFab-Setup-x.x.x.exe` | Windows 10+ |
168
+ | macOS | `SceneFab-x.x.x.dmg` | macOS 11+ (Apple Silicon / Intel) |
169
+ | Linux | `SceneFab-x.x.x.AppImage` | Ubuntu 20.04+ / glibc 2.31+ |
170
+
171
+ #### 方式二:pip 安装(推荐开发者)
172
+
173
+ ```bash
174
+ # 1. 安装 SceneFab
175
+ pip install scenefab
176
+
177
+ # 2. 验证 FFmpeg(必需依赖)
178
+ ffmpeg -version
179
+ # 应输出:ffmpeg version 6.x ...
180
+
181
+ # 如果未安装 FFmpeg:
182
+ brew install ffmpeg # macOS
183
+ sudo apt install ffmpeg # Ubuntu/Debian
184
+ winget install ffmpeg # Windows
185
+ ```
186
+
187
+ ### ⚙️ 配置 AI 服务
188
+
189
+ 编辑 `config/llm.yaml`,填入至少一个 API Key:
190
+
191
+ ```yaml
192
+ LLM:
193
+ default_provider: "deepseek"
194
+
195
+ deepseek:
196
+ enabled: true
197
+ api_key: "sk-your-deepseek-key"
198
+ model: "deepseek-v4-pro"
199
+
200
+ qwen:
201
+ enabled: true
202
+ api_key: "sk-your-qwen-key"
203
+ model: "qwen3.7-max"
204
+ ```
205
+
206
+ 或使用环境变量(更安全):
207
+
208
+ ```bash
209
+ export DEEPSEEK_API_KEY="sk-your-deepseek-key"
210
+ export QWEN_API_KEY="sk-your-qwen-key"
211
+ ```
212
+
213
+ ### ▶️ 启动 SceneFab
214
+
215
+ ```bash
216
+ # 启动 GUI(默认)
217
+ scenefab
218
+
219
+ # 查看版本
220
+ scenefab --version
221
+
222
+ # 查看帮助
223
+ scenefab --help
224
+ ```
225
+
226
+ 详细说明请参阅 [在线文档 - 快速开始](https://agions.github.io/scene-fab/guide/quick-start)。
227
+
228
+ ---
229
+
230
+ ## 🏗️ 技术架构
231
+
232
+ SceneFab 采用**事件驱动的 DAG 并行流水线**架构,每个模块职责清晰、易于扩展:
233
+
234
+ ```mermaid
235
+ flowchart TB
236
+ subgraph Client["桌面客户端 (PySide6 6.9+)"]
237
+ UI[工作台 · 创作流程 · 项目资产]
238
+ ViewModel[MVVM ViewModel]
239
+ end
240
+
241
+ subgraph Core["核心引擎"]
242
+ Bus[事件总线]
243
+ Engine[DAG 流水线引擎]
244
+ DI[依赖注入容器]
245
+ end
246
+
247
+ subgraph Services["业务服务"]
248
+ AI[AI 服务<br/>LLM · 视觉 · TTS · 脚本生成]
249
+ Video[视频服务<br/>分析 · 处理 · 导出]
250
+ Export[导出服务<br/>剪映 · MP4 · 字幕]
251
+ end
252
+
253
+ subgraph Pipeline["生产流水线"]
254
+ Import[① 素材导入]
255
+ Analyze[② 场景分析]
256
+ Script[③ 脚本生成]
257
+ Voice[④ 配音合成]
258
+ Caption[⑤ 字幕对齐]
259
+ Pub[⑥ 导出发布]
260
+ end
261
+
262
+ UI --> ViewModel
263
+ ViewModel --> Bus
264
+ Bus --> Engine
265
+ Engine --> DI
266
+ DI --> AI
267
+ DI --> Video
268
+ DI --> Export
269
+ Engine --> Pipeline
270
+
271
+ Import --> Analyze
272
+ Analyze --> Script
273
+ Script --> Voice
274
+ Voice --> Caption
275
+ Caption --> Pub
276
+
277
+ classDef brand fill:#0e7490,stroke:#22d3ee,color:#fff
278
+ classDef accent fill:#7c3aed,stroke:#a855f7,color:#fff
279
+ class Engine,DI,Bus brand
280
+ class AI,Video,Export accent
281
+ ```
282
+
283
+ ### 关键设计决策
284
+
285
+ - **MVVM 架构** — UI 与业务逻辑解耦(v2.4.0 全面 ViewModel 化)
286
+ - **事件驱动** — 解耦模块通信,所有状态变更可追溯
287
+ - **DAG 流水线** — 支持并行执行和断点续传
288
+ - **插件化** — LLM / TTS / 视觉模型均可热插拔
289
+ - **本地优先** — 视频数据不出本机,仅 AI 调用走云端
290
+
291
+ ---
292
+
293
+ ## 🛠️ 技术栈
294
+
295
+ | 组件 | 技术选型 | 用途 |
296
+ |------|----------|------|
297
+ | 桌面端 | PySide6 6.9+ | Qt 跨平台 GUI |
298
+ | 视频处理 | FFmpeg 6.x · OpenCV · MoviePy | 音视频分析与合成 |
299
+ | AI 推理 | OpenAI SDK · google-generativeai | LLM 和视觉模型调用 |
300
+ | 语音合成 | Edge-TTS · F5-TTS | 解说配音生成 |
301
+ | 场景检测 | PySceneDetect | 视频场景自动分割 |
302
+ | 数据验证 | Pydantic 2.5+ | 结构化数据校验 |
303
+ | 配置管理 | PyYAML · python-dotenv | YAML/环境变量配置 |
304
+ | 安全 | cryptography · keyring | API 密钥加密存储 |
305
+ | HTTP API | FastAPI · uvicorn | 可选 REST API 服务 |
306
+
307
+ ---
308
+
309
+ ## 📁 项目结构
310
+
311
+ ```
312
+ scene-fab/
313
+ ├── src/scenefab/ # 主包
314
+ │ ├── core/ # 基础设施(事件总线 · DI · 审计 · 流水线引擎)
315
+ │ ├── models/ # 数据模型(项目 · 视频 · 叙述 · 媒体)
316
+ │ ├── services/ # 业务服务
317
+ │ │ ├── ai/ # AI 服务(LLM · 视觉 · TTS · 脚本生成)
318
+ │ │ ├── video/ # 视频服务(分析 · 处理 · 导出)
319
+ │ │ ├── export/ # 导出服务(剪映 · MP4 · 字幕)
320
+ │ │ └── video_tools/ # 视频工具(FFmpeg · 探测 · 硬件加速)
321
+ │ ├── pipeline/ # 生产流水线(状态机 · 步骤 · 评估)
322
+ │ ├── plugins/ # 插件系统(加载 · 注册 · 接口)
323
+ │ ├── api/ # HTTP API(FastAPI 路由)
324
+ │ ├── ui/ # 用户界面(PySide6 页面 · 主题)
325
+ │ └── utils/ # 工具函数(安全 · 版本 · 日志)
326
+ ├── tests/ # 测试套件
327
+ ├── docs/ # VitePress 文档站
328
+ ├── assets/ # 品牌资源(logo · 徽章)
329
+ ├── resources/ # 应用资源(图标 · 样式)
330
+ ├── scripts/ # 构建/工具脚本
331
+ └── config/ # 配置文件
332
+ ```
333
+
334
+ ---
335
+
336
+ ## 📚 文档导航
337
+
338
+ | 文档 | 说明 |
339
+ |------|------|
340
+ | [在线文档](https://agions.github.io/scene-fab/) | 完整文档中心(VitePress) |
341
+ | [快速开始](https://agions.github.io/scene-fab/guide/quick-start) | 3 步安装、配置和首次运行 |
342
+ | [安装指南](https://agions.github.io/scene-fab/guide/installation) | 各平台完整安装步骤 |
343
+ | [AI 配置](https://agions.github.io/scene-fab/guide/ai-configuration) | 多服务商配置详解 |
344
+ | [CLI 参考](https://agions.github.io/scene-fab/guide/cli-reference) | 命令行使用说明 |
345
+ | [Python API](https://agions.github.io/scene-fab/guide/python-api) | Python API 完整文档 |
346
+ | [生产规范](https://agions.github.io/scene-fab/guide/first-person-narration-production) | 第一人称解说完整生产流程 |
347
+ | [AI 工作流](https://agions.github.io/scene-fab/guide/ai-video-guide) | 从视频到成片的 AI 流程详解 |
348
+ | [导出发布](https://agions.github.io/scene-fab/guide/exporting) | 导出格式与平台预设 |
349
+ | [疑难排查](https://agions.github.io/scene-fab/guide/troubleshooting) | 常见问题解决 |
350
+
351
+ ---
352
+
353
+ ## 🗺️ 路线图
354
+
355
+ ### ✅ v2.4.0(2026-07-01)— UI 架构升级
356
+
357
+ - [x] **Phase 1** — UI 模块化分层(净 -1536 行死代码)
358
+ - [x] **Phase 2** — ViewModel 化拆分
359
+ - [x] **Phase 3** — 暗色主题 + 运行时切换端到端
360
+ - [x] **品牌重塑** — 双色调 logo 系统 + OG image + 渲染 pipeline
361
+
362
+ ### 🚧 v2.5.0(计划中)
363
+
364
+ - [ ] **drag-drop 文件拖拽**(`AssetsPage` 的 `dragEnterEvent`/`dropEvent`)
365
+ - [ ] **ViewModel 严格分层**(移除 `TYPE_CHECKING` hack, viewmodel 不再依赖 UI 类型)
366
+ - [ ] **macOS 公证**(解决 Gatekeeper 拦截)
367
+ - [ ] **批量生产 UI**(整季批量可视化调度)
368
+
369
+ ### 💡 v3.0.0(远期)
370
+
371
+ - [ ] **Web 版本** — Tauri 重写桌面端 + Web 端复用核心
372
+ - [ ] **多人协作** — 云端项目同步 + 团队权限
373
+ - [ ] **AI 实时预览** — 边生成边预览,减少等待焦虑
374
+ - [ ] **插件市场** — 第三方 LLM / TTS / 视觉模型接入
375
+
376
+ ---
377
+
378
+ ## 🤝 贡献
379
+
380
+ 欢迎贡献代码、报告问题或提出建议。
381
+
382
+ ### 开发环境
383
+
384
+ ```bash
385
+ # 克隆仓库
386
+ git clone https://github.com/Agions/scene-fab.git
387
+ cd scene-fab
388
+
389
+ # 安装开发依赖
390
+ pip install -e ".[dev]"
391
+
392
+ # 运行测试
393
+ make test
394
+
395
+ # 代码检查
396
+ make lint
397
+
398
+ # 格式化
399
+ make format
400
+ ```
401
+
402
+ ### 提交规范(Conventional Commits)
403
+
404
+ | 类型 | 用途 | 示例 |
405
+ |------|------|------|
406
+ | `feat` | 新功能 | `feat(pipeline): add batch production support` |
407
+ | `fix` | Bug 修复 | `fix(ai): handle Qwen API timeout gracefully` |
408
+ | `docs` | 文档变更 | `docs(readme): update installation steps` |
409
+ | `style` | 代码格式(无逻辑变更) | `style(ui): fix indentation in HomePage` |
410
+ | `refactor` | 代码重构 | `refactor(core): split event bus into modules` |
411
+ | `perf` | 性能优化 | `perf(video): cache scene analysis results` |
412
+ | `test` | 测试相关 | `test(services): add e2e for export pipeline` |
413
+ | `chore` | 构建/工具 | `chore(deps): bump PySide6 to 6.9` |
414
+
415
+ 提交前请运行 `make lint` 和 `make test`。
416
+
417
+ ### 问题反馈
418
+
419
+ - 🐛 [Bug 报告](https://github.com/Agions/scene-fab/issues/new?template=bug_report.md)
420
+ - 💡 [功能建议](https://github.com/Agions/scene-fab/issues/new?template=feature_request.md)
421
+ - 💬 [讨论区](https://github.com/Agions/scene-fab/discussions)
422
+
423
+ ---
424
+
425
+ ## 🙏 致谢
426
+
427
+ SceneFab 的诞生离不开以下开源项目:
428
+
429
+ - [PySide6](https://doc.qt.io/qtforpython/) — Qt 官方 Python 绑定
430
+ - [FFmpeg](https://ffmpeg.org/) — 跨平台音视频处理
431
+ - [Edge-TTS](https://github.com/rany2/edge-tts) — 免费高质量 TTS
432
+ - [F5-TTS](https://github.com/SWivid/F5-TTS) — 开源音色克隆
433
+ - [PySceneDetect](https://www.scenedetect.com/) — 视频场景检测
434
+ - [Pydantic](https://pydantic-docs.helpmanual.io/) — 数据验证
435
+ - [VitePress](https://vitepress.dev/) — 文档站框架
436
+
437
+ ---
438
+
439
+ ## 📄 许可证
440
+
441
+ [MIT License](LICENSE) © 2025-2026 [Agions](https://github.com/Agions)
442
+
443
+ ---
444
+
445
+ <div align="center">
446
+
447
+ **[⭐ Star](https://github.com/Agions/scene-fab)** · **[🍴 Fork](https://github.com/Agions/scene-fab/fork)** · **[📖 文档](https://agions.github.io/scene-fab/)** · **[📝 更新日志](CHANGELOG.md)**
448
+
449
+ <sub>SceneFab v2.4.0 · Made with ❤️ by [Agions](https://github.com/Agions) and [contributors](https://github.com/Agions/scene-fab/graphs/contributors)</sub>
450
+
451
+ </div>