scenefab 1.0.0__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 (373) hide show
  1. scenefab-1.0.0/LICENSE +21 -0
  2. scenefab-1.0.0/MANIFEST.in +8 -0
  3. scenefab-1.0.0/PKG-INFO +225 -0
  4. scenefab-1.0.0/README.md +151 -0
  5. scenefab-1.0.0/config/app_config.yaml +82 -0
  6. scenefab-1.0.0/config/llm.yaml +94 -0
  7. scenefab-1.0.0/config/logging.conf +67 -0
  8. scenefab-1.0.0/pyproject.toml +219 -0
  9. scenefab-1.0.0/resources/icons/app_icon_128.png +0 -0
  10. scenefab-1.0.0/resources/icons/app_icon_256.png +0 -0
  11. scenefab-1.0.0/resources/icons/app_icon_32.png +0 -0
  12. scenefab-1.0.0/resources/icons/app_icon_512.png +0 -0
  13. scenefab-1.0.0/resources/icons/app_icon_64.png +0 -0
  14. scenefab-1.0.0/resources/styles/dark_theme.qss +807 -0
  15. scenefab-1.0.0/resources/styles/light_theme.qss +371 -0
  16. scenefab-1.0.0/setup.cfg +4 -0
  17. scenefab-1.0.0/src/scenefab/__init__.py +3 -0
  18. scenefab-1.0.0/src/scenefab/__main__.py +17 -0
  19. scenefab-1.0.0/src/scenefab/_signals.py +45 -0
  20. scenefab-1.0.0/src/scenefab/ai_services.py +37 -0
  21. scenefab-1.0.0/src/scenefab/api/__init__.py +7 -0
  22. scenefab-1.0.0/src/scenefab/api/main.py +108 -0
  23. scenefab-1.0.0/src/scenefab/api/routers/__init__.py +7 -0
  24. scenefab-1.0.0/src/scenefab/api/routers/_task_store.py +140 -0
  25. scenefab-1.0.0/src/scenefab/api/routers/export.py +189 -0
  26. scenefab-1.0.0/src/scenefab/api/routers/health.py +45 -0
  27. scenefab-1.0.0/src/scenefab/api/routers/pipeline.py +174 -0
  28. scenefab-1.0.0/src/scenefab/api/routers/plugins.py +151 -0
  29. scenefab-1.0.0/src/scenefab/api/routers/projects.py +64 -0
  30. scenefab-1.0.0/src/scenefab/api/schemas/models.py +107 -0
  31. scenefab-1.0.0/src/scenefab/application.py +504 -0
  32. scenefab-1.0.0/src/scenefab/cache_impl/__init__.py +19 -0
  33. scenefab-1.0.0/src/scenefab/cache_impl/disk_cache.py +324 -0
  34. scenefab-1.0.0/src/scenefab/cache_impl/memory_cache.py +288 -0
  35. scenefab-1.0.0/src/scenefab/cache_manager.py +210 -0
  36. scenefab-1.0.0/src/scenefab/cli/__init__.py +14 -0
  37. scenefab-1.0.0/src/scenefab/cli/main.py +523 -0
  38. scenefab-1.0.0/src/scenefab/cli.py +403 -0
  39. scenefab-1.0.0/src/scenefab/config_manager.py +62 -0
  40. scenefab-1.0.0/src/scenefab/core/__init__.py +132 -0
  41. scenefab-1.0.0/src/scenefab/engine.py +30 -0
  42. scenefab-1.0.0/src/scenefab/event_bus.py +178 -0
  43. scenefab-1.0.0/src/scenefab/exceptions.py +490 -0
  44. scenefab-1.0.0/src/scenefab/exporters.py +100 -0
  45. scenefab-1.0.0/src/scenefab/interfaces/__init__.py +17 -0
  46. scenefab-1.0.0/src/scenefab/interfaces/cache_interface.py +139 -0
  47. scenefab-1.0.0/src/scenefab/logger.py +149 -0
  48. scenefab-1.0.0/src/scenefab/main.py +386 -0
  49. scenefab-1.0.0/src/scenefab/models/__init__.py +70 -0
  50. scenefab-1.0.0/src/scenefab/models/media.py +52 -0
  51. scenefab-1.0.0/src/scenefab/models/narration.py +59 -0
  52. scenefab-1.0.0/src/scenefab/models/project.py +130 -0
  53. scenefab-1.0.0/src/scenefab/models/project_models.py +215 -0
  54. scenefab-1.0.0/src/scenefab/models/video.py +83 -0
  55. scenefab-1.0.0/src/scenefab/models.py +78 -0
  56. scenefab-1.0.0/src/scenefab/orchestration/__init__.py +10 -0
  57. scenefab-1.0.0/src/scenefab/orchestration/pipeline_controller.py +223 -0
  58. scenefab-1.0.0/src/scenefab/pipeline.py +952 -0
  59. scenefab-1.0.0/src/scenefab/plugins/__init__.py +16 -0
  60. scenefab-1.0.0/src/scenefab/plugins/examples/cinematic_subtitle/cinematic_sub.py +278 -0
  61. scenefab-1.0.0/src/scenefab/plugins/examples/deepseek_ai_generator/__init__.py +5 -0
  62. scenefab-1.0.0/src/scenefab/plugins/examples/deepseek_ai_generator/deepseek_gen.py +348 -0
  63. scenefab-1.0.0/src/scenefab/plugins/interfaces/__init__.py +8 -0
  64. scenefab-1.0.0/src/scenefab/plugins/interfaces/ai_generator.py +119 -0
  65. scenefab-1.0.0/src/scenefab/plugins/interfaces/base.py +246 -0
  66. scenefab-1.0.0/src/scenefab/plugins/interfaces/export_plugin.py +80 -0
  67. scenefab-1.0.0/src/scenefab/plugins/loader.py +407 -0
  68. scenefab-1.0.0/src/scenefab/plugins/registry.py +305 -0
  69. scenefab-1.0.0/src/scenefab/project_manager.py +506 -0
  70. scenefab-1.0.0/src/scenefab/project_template_manager.py +670 -0
  71. scenefab-1.0.0/src/scenefab/py.typed +2 -0
  72. scenefab-1.0.0/src/scenefab/registry_models.py +139 -0
  73. scenefab-1.0.0/src/scenefab/secure_key_manager.py +352 -0
  74. scenefab-1.0.0/src/scenefab/service_container.py +211 -0
  75. scenefab-1.0.0/src/scenefab/services/__init__.py +46 -0
  76. scenefab-1.0.0/src/scenefab/services/ai/__init__.py +104 -0
  77. scenefab-1.0.0/src/scenefab/services/ai/adapters/__init__.py +30 -0
  78. scenefab-1.0.0/src/scenefab/services/ai/adapters/adapter_registry.py +154 -0
  79. scenefab-1.0.0/src/scenefab/services/ai/adapters/base.py +186 -0
  80. scenefab-1.0.0/src/scenefab/services/ai/asr.py +167 -0
  81. scenefab-1.0.0/src/scenefab/services/ai/base.py +93 -0
  82. scenefab-1.0.0/src/scenefab/services/ai/base_llm_provider.py +561 -0
  83. scenefab-1.0.0/src/scenefab/services/ai/cache.py +466 -0
  84. scenefab-1.0.0/src/scenefab/services/ai/errors.py +41 -0
  85. scenefab-1.0.0/src/scenefab/services/ai/infra/__init__.py +200 -0
  86. scenefab-1.0.0/src/scenefab/services/ai/interfaces.py +130 -0
  87. scenefab-1.0.0/src/scenefab/services/ai/llm.py +133 -0
  88. scenefab-1.0.0/src/scenefab/services/ai/llm_manager.py +256 -0
  89. scenefab-1.0.0/src/scenefab/services/ai/manager.py +102 -0
  90. scenefab-1.0.0/src/scenefab/services/ai/model_registry.py +198 -0
  91. scenefab-1.0.0/src/scenefab/services/ai/provider_types.py +57 -0
  92. scenefab-1.0.0/src/scenefab/services/ai/providers/__init__.py +35 -0
  93. scenefab-1.0.0/src/scenefab/services/ai/providers/claude.py +179 -0
  94. scenefab-1.0.0/src/scenefab/services/ai/providers/deepseek.py +184 -0
  95. scenefab-1.0.0/src/scenefab/services/ai/providers/doubao.py +146 -0
  96. scenefab-1.0.0/src/scenefab/services/ai/providers/gemini.py +202 -0
  97. scenefab-1.0.0/src/scenefab/services/ai/providers/glm5.py +72 -0
  98. scenefab-1.0.0/src/scenefab/services/ai/providers/hunyuan.py +157 -0
  99. scenefab-1.0.0/src/scenefab/services/ai/providers/kimi.py +77 -0
  100. scenefab-1.0.0/src/scenefab/services/ai/providers/local.py +218 -0
  101. scenefab-1.0.0/src/scenefab/services/ai/providers/provider_models.py +206 -0
  102. scenefab-1.0.0/src/scenefab/services/ai/providers/qwen.py +123 -0
  103. scenefab-1.0.0/src/scenefab/services/ai/retry.py +282 -0
  104. scenefab-1.0.0/src/scenefab/services/ai/scene_analyzer.py +348 -0
  105. scenefab-1.0.0/src/scenefab/services/ai/scene_analyzer_v2.py +231 -0
  106. scenefab-1.0.0/src/scenefab/services/ai/scene_models.py +71 -0
  107. scenefab-1.0.0/src/scenefab/services/ai/scene_scorer.py +207 -0
  108. scenefab-1.0.0/src/scenefab/services/ai/script_generator.py +827 -0
  109. scenefab-1.0.0/src/scenefab/services/ai/script_models.py +101 -0
  110. scenefab-1.0.0/src/scenefab/services/ai/script_stream.py +458 -0
  111. scenefab-1.0.0/src/scenefab/services/ai/secure_subtitle_extractor.py +177 -0
  112. scenefab-1.0.0/src/scenefab/services/ai/sensevoice_provider.py +574 -0
  113. scenefab-1.0.0/src/scenefab/services/ai/subtitle_extractor.py +240 -0
  114. scenefab-1.0.0/src/scenefab/services/ai/subtitle_merger.py +110 -0
  115. scenefab-1.0.0/src/scenefab/services/ai/subtitle_speech.py +251 -0
  116. scenefab-1.0.0/src/scenefab/services/ai/subtitle_translator.py +357 -0
  117. scenefab-1.0.0/src/scenefab/services/ai/subtitle_types.py +31 -0
  118. scenefab-1.0.0/src/scenefab/services/ai/tts.py +195 -0
  119. scenefab-1.0.0/src/scenefab/services/ai/tts_providers.py +497 -0
  120. scenefab-1.0.0/src/scenefab/services/ai/vision.py +166 -0
  121. scenefab-1.0.0/src/scenefab/services/ai/vision_providers.py +479 -0
  122. scenefab-1.0.0/src/scenefab/services/ai/voice_generator.py +202 -0
  123. scenefab-1.0.0/src/scenefab/services/ai/voice_models.py +99 -0
  124. scenefab-1.0.0/src/scenefab/services/ai/whisper_asr_provider.py +300 -0
  125. scenefab-1.0.0/src/scenefab/services/ai_service_manager.py +91 -0
  126. scenefab-1.0.0/src/scenefab/services/audio/__init__.py +58 -0
  127. scenefab-1.0.0/src/scenefab/services/audio/beat_detector.py +411 -0
  128. scenefab-1.0.0/src/scenefab/services/audio/sync_engine.py +322 -0
  129. scenefab-1.0.0/src/scenefab/services/export/__init__.py +99 -0
  130. scenefab-1.0.0/src/scenefab/services/export/batch_export_manager.py +369 -0
  131. scenefab-1.0.0/src/scenefab/services/export/direct_video_exporter.py +517 -0
  132. scenefab-1.0.0/src/scenefab/services/export/export_manager.py +141 -0
  133. scenefab-1.0.0/src/scenefab/services/export/export_utils.py +191 -0
  134. scenefab-1.0.0/src/scenefab/services/export/jianying_adapter.py +313 -0
  135. scenefab-1.0.0/src/scenefab/services/export/jianying_exporter.py +431 -0
  136. scenefab-1.0.0/src/scenefab/services/export/video_exporter.py +357 -0
  137. scenefab-1.0.0/src/scenefab/services/orchestration/__init__.py +61 -0
  138. scenefab-1.0.0/src/scenefab/services/orchestration/enums.py +47 -0
  139. scenefab-1.0.0/src/scenefab/services/orchestration/pipe_models.py +168 -0
  140. scenefab-1.0.0/src/scenefab/services/orchestration/pipeline_project_manager.py +506 -0
  141. scenefab-1.0.0/src/scenefab/services/service_manager.py +280 -0
  142. scenefab-1.0.0/src/scenefab/services/video/__init__.py +139 -0
  143. scenefab-1.0.0/src/scenefab/services/video/analyzer.py +108 -0
  144. scenefab-1.0.0/src/scenefab/services/video/base_maker.py +251 -0
  145. scenefab-1.0.0/src/scenefab/services/video/cache/__init__.py +10 -0
  146. scenefab-1.0.0/src/scenefab/services/video/cache/frame_cache.py +272 -0
  147. scenefab-1.0.0/src/scenefab/services/video/cache/legacy_cache.py +67 -0
  148. scenefab-1.0.0/src/scenefab/services/video/extraction/__init__.py +23 -0
  149. scenefab-1.0.0/src/scenefab/services/video/extraction/emotion_peak.py +226 -0
  150. scenefab-1.0.0/src/scenefab/services/video/extraction/first_person.py +275 -0
  151. scenefab-1.0.0/src/scenefab/services/video/grouping/__init__.py +20 -0
  152. scenefab-1.0.0/src/scenefab/services/video/grouping/smart_grouper.py +373 -0
  153. scenefab-1.0.0/src/scenefab/services/video/highlight_detector.py +546 -0
  154. scenefab-1.0.0/src/scenefab/services/video/models/__init__.py +21 -0
  155. scenefab-1.0.0/src/scenefab/services/video/models/monologue.py +65 -0
  156. scenefab-1.0.0/src/scenefab/services/video/models/perspective.py +206 -0
  157. scenefab-1.0.0/src/scenefab/services/video/monologue_maker.py +601 -0
  158. scenefab-1.0.0/src/scenefab/services/video/perspective_mapper.py +281 -0
  159. scenefab-1.0.0/src/scenefab/services/video/pipeline_integrator.py +508 -0
  160. scenefab-1.0.0/src/scenefab/services/video/processor.py +196 -0
  161. scenefab-1.0.0/src/scenefab/services/video/scene_converter.py +198 -0
  162. scenefab-1.0.0/src/scenefab/services/video/selection/__init__.py +14 -0
  163. scenefab-1.0.0/src/scenefab/services/video/selection/seg_selector.py +194 -0
  164. scenefab-1.0.0/src/scenefab/services/video/session.py +265 -0
  165. scenefab-1.0.0/src/scenefab/services/video/track_builder.py +140 -0
  166. scenefab-1.0.0/src/scenefab/services/video/video_interleaver.py +366 -0
  167. scenefab-1.0.0/src/scenefab/services/video_tools/__init__.py +38 -0
  168. scenefab-1.0.0/src/scenefab/services/video_tools/base.py +187 -0
  169. scenefab-1.0.0/src/scenefab/services/video_tools/caption_gen.py +420 -0
  170. scenefab-1.0.0/src/scenefab/services/video_tools/ffmpeg_tool.py +699 -0
  171. scenefab-1.0.0/src/scenefab/settings.py +297 -0
  172. scenefab-1.0.0/src/scenefab/settings_data.py +356 -0
  173. scenefab-1.0.0/src/scenefab/settings_manager.py +564 -0
  174. scenefab-1.0.0/src/scenefab/settings_types.py +63 -0
  175. scenefab-1.0.0/src/scenefab/task_manager.py +460 -0
  176. scenefab-1.0.0/src/scenefab/template_models.py +106 -0
  177. scenefab-1.0.0/src/scenefab/templates/ai_enhancement/project_template.json +103 -0
  178. scenefab-1.0.0/src/scenefab/templates/ai_enhancement/template_info.json +22 -0
  179. scenefab-1.0.0/src/scenefab/templates/ai_enhancement/template_metadata.json +15 -0
  180. scenefab-1.0.0/src/scenefab/templates/video_tutorial/project_template.json +80 -0
  181. scenefab-1.0.0/src/scenefab/templates/video_tutorial/template_info.json +22 -0
  182. scenefab-1.0.0/src/scenefab/templates/video_tutorial/template_metadata.json +16 -0
  183. scenefab-1.0.0/src/scenefab/tests/__init__.py +0 -0
  184. scenefab-1.0.0/src/scenefab/ui/__init__.py +9 -0
  185. scenefab-1.0.0/src/scenefab/ui/common/macos_components.py +42 -0
  186. scenefab-1.0.0/src/scenefab/ui/components/__init__.py +33 -0
  187. scenefab-1.0.0/src/scenefab/ui/components/animations.py +299 -0
  188. scenefab-1.0.0/src/scenefab/ui/components/buttons/__init__.py +87 -0
  189. scenefab-1.0.0/src/scenefab/ui/components/common_styles.py +219 -0
  190. scenefab-1.0.0/src/scenefab/ui/components/containers/__init__.py +64 -0
  191. scenefab-1.0.0/src/scenefab/ui/components/containers/preview_panel.py +227 -0
  192. scenefab-1.0.0/src/scenefab/ui/components/containers/project_card.py +195 -0
  193. scenefab-1.0.0/src/scenefab/ui/components/containers/video_player.py +306 -0
  194. scenefab-1.0.0/src/scenefab/ui/components/design_system.py +579 -0
  195. scenefab-1.0.0/src/scenefab/ui/components/emotion_controller/__init__.py +23 -0
  196. scenefab-1.0.0/src/scenefab/ui/components/emotion_controller/curve_wgt.py +522 -0
  197. scenefab-1.0.0/src/scenefab/ui/components/emotion_controller/emotion_ctrl.py +504 -0
  198. scenefab-1.0.0/src/scenefab/ui/components/emotion_controller/emotion_presets.py +302 -0
  199. scenefab-1.0.0/src/scenefab/ui/components/empty_state.py +304 -0
  200. scenefab-1.0.0/src/scenefab/ui/components/home_components.py +407 -0
  201. scenefab-1.0.0/src/scenefab/ui/components/inputs/__init__.py +40 -0
  202. scenefab-1.0.0/src/scenefab/ui/components/labels/__init__.py +60 -0
  203. scenefab-1.0.0/src/scenefab/ui/components/layout/__init__.py +127 -0
  204. scenefab-1.0.0/src/scenefab/ui/components/loading/__init__.py +18 -0
  205. scenefab-1.0.0/src/scenefab/ui/components/loading/pulse_indicator.py +321 -0
  206. scenefab-1.0.0/src/scenefab/ui/components/loading/skeleton.py +218 -0
  207. scenefab-1.0.0/src/scenefab/ui/components/narration/__init__.py +11 -0
  208. scenefab-1.0.0/src/scenefab/ui/components/narration/narration_editor.py +437 -0
  209. scenefab-1.0.0/src/scenefab/ui/components/onboarding/__init__.py +21 -0
  210. scenefab-1.0.0/src/scenefab/ui/components/onboarding/feature_tour.py +518 -0
  211. scenefab-1.0.0/src/scenefab/ui/components/onboarding/onboard_steps.py +445 -0
  212. scenefab-1.0.0/src/scenefab/ui/components/onboarding/onboard_wizard.py +211 -0
  213. scenefab-1.0.0/src/scenefab/ui/components/onboarding/welcome.py +300 -0
  214. scenefab-1.0.0/src/scenefab/ui/components/pro_components.py +421 -0
  215. scenefab-1.0.0/src/scenefab/ui/components/pro_widgets/__init__.py +9 -0
  216. scenefab-1.0.0/src/scenefab/ui/components/step_indicator.py +58 -0
  217. scenefab-1.0.0/src/scenefab/ui/components/subtitle/__init__.py +63 -0
  218. scenefab-1.0.0/src/scenefab/ui/components/subtitle/subtitle_core.py +473 -0
  219. scenefab-1.0.0/src/scenefab/ui/components/subtitle/subtitle_models.py +507 -0
  220. scenefab-1.0.0/src/scenefab/ui/components/subtitle/widgets/__init__.py +20 -0
  221. scenefab-1.0.0/src/scenefab/ui/components/subtitle/widgets/subtitle_block.py +134 -0
  222. scenefab-1.0.0/src/scenefab/ui/components/subtitle/widgets/subtitle_track.py +127 -0
  223. scenefab-1.0.0/src/scenefab/ui/components/subtitle/widgets/time_ruler.py +128 -0
  224. scenefab-1.0.0/src/scenefab/ui/components/subtitle/widgets/timeline_widget.py +278 -0
  225. scenefab-1.0.0/src/scenefab/ui/components/timeline/__init__.py +12 -0
  226. scenefab-1.0.0/src/scenefab/ui/components/timeline/timeline_shuttle.py +555 -0
  227. scenefab-1.0.0/src/scenefab/ui/icon_manager.py +205 -0
  228. scenefab-1.0.0/src/scenefab/ui/macos_theme_manager.py +186 -0
  229. scenefab-1.0.0/src/scenefab/ui/main/__init__.py +3 -0
  230. scenefab-1.0.0/src/scenefab/ui/main/components/__init__.py +7 -0
  231. scenefab-1.0.0/src/scenefab/ui/main/components/ai_monitor_panel.py +12 -0
  232. scenefab-1.0.0/src/scenefab/ui/main/components/effects_panel.py +103 -0
  233. scenefab-1.0.0/src/scenefab/ui/main/components/export_format_selector.py +145 -0
  234. scenefab-1.0.0/src/scenefab/ui/main/components/export_monitor.py +520 -0
  235. scenefab-1.0.0/src/scenefab/ui/main/components/export_panel.py +658 -0
  236. scenefab-1.0.0/src/scenefab/ui/main/components/export_progress.py +179 -0
  237. scenefab-1.0.0/src/scenefab/ui/main/components/export_stats.py +96 -0
  238. scenefab-1.0.0/src/scenefab/ui/main/components/media_library.py +127 -0
  239. scenefab-1.0.0/src/scenefab/ui/main/components/monitor_models.py +38 -0
  240. scenefab-1.0.0/src/scenefab/ui/main/components/monitor_pages.py +261 -0
  241. scenefab-1.0.0/src/scenefab/ui/main/components/monitor_panel.py +636 -0
  242. scenefab-1.0.0/src/scenefab/ui/main/components/monitor_widgets.py +272 -0
  243. scenefab-1.0.0/src/scenefab/ui/main/components/navigation_bar.py +285 -0
  244. scenefab-1.0.0/src/scenefab/ui/main/components/properties_panel.py +261 -0
  245. scenefab-1.0.0/src/scenefab/ui/main/components/quick_ai_config.py +335 -0
  246. scenefab-1.0.0/src/scenefab/ui/main/components/status_bar.py +291 -0
  247. scenefab-1.0.0/src/scenefab/ui/main/components/timeline.py +347 -0
  248. scenefab-1.0.0/src/scenefab/ui/main/components/video_preview.py +227 -0
  249. scenefab-1.0.0/src/scenefab/ui/main/constants.py +30 -0
  250. scenefab-1.0.0/src/scenefab/ui/main/dialogs/model_app_dialog.py +164 -0
  251. scenefab-1.0.0/src/scenefab/ui/main/dialogs/model_app_pages.py +457 -0
  252. scenefab-1.0.0/src/scenefab/ui/main/event_handler.py +68 -0
  253. scenefab-1.0.0/src/scenefab/ui/main/layouts/__init__.py +9 -0
  254. scenefab-1.0.0/src/scenefab/ui/main/layouts/main_layout.py +95 -0
  255. scenefab-1.0.0/src/scenefab/ui/main/main_window.py +657 -0
  256. scenefab-1.0.0/src/scenefab/ui/main/page_loader.py +44 -0
  257. scenefab-1.0.0/src/scenefab/ui/main/pages/__init__.py +15 -0
  258. scenefab-1.0.0/src/scenefab/ui/main/pages/base_page.py +306 -0
  259. scenefab-1.0.0/src/scenefab/ui/main/pages/components/__init__.py +17 -0
  260. scenefab-1.0.0/src/scenefab/ui/main/pages/components/create_proj_dlg.py +219 -0
  261. scenefab-1.0.0/src/scenefab/ui/main/pages/components/drag_helpers.py +151 -0
  262. scenefab-1.0.0/src/scenefab/ui/main/pages/components/proj_details_pnl.py +361 -0
  263. scenefab-1.0.0/src/scenefab/ui/main/pages/components/proj_list_pnl.py +189 -0
  264. scenefab-1.0.0/src/scenefab/ui/main/pages/components/project_cards.py +191 -0
  265. scenefab-1.0.0/src/scenefab/ui/main/pages/components/settings_dialog.py +278 -0
  266. scenefab-1.0.0/src/scenefab/ui/main/pages/components/stats.py +111 -0
  267. scenefab-1.0.0/src/scenefab/ui/main/pages/creation_wizard_page.py +302 -0
  268. scenefab-1.0.0/src/scenefab/ui/main/pages/export_worker.py +63 -0
  269. scenefab-1.0.0/src/scenefab/ui/main/pages/home_page.py +548 -0
  270. scenefab-1.0.0/src/scenefab/ui/main/pages/narration_segment_card.py +194 -0
  271. scenefab-1.0.0/src/scenefab/ui/main/pages/page_base.py +175 -0
  272. scenefab-1.0.0/src/scenefab/ui/main/pages/preview_text_area.py +226 -0
  273. scenefab-1.0.0/src/scenefab/ui/main/pages/projects_page.py +207 -0
  274. scenefab-1.0.0/src/scenefab/ui/main/pages/settings_page.py +400 -0
  275. scenefab-1.0.0/src/scenefab/ui/main/pages/step_analysis.py +261 -0
  276. scenefab-1.0.0/src/scenefab/ui/main/pages/step_base.py +332 -0
  277. scenefab-1.0.0/src/scenefab/ui/main/pages/step_edit.py +276 -0
  278. scenefab-1.0.0/src/scenefab/ui/main/pages/step_export.py +366 -0
  279. scenefab-1.0.0/src/scenefab/ui/main/pages/step_group.py +602 -0
  280. scenefab-1.0.0/src/scenefab/ui/main/pages/step_pipeline.py +308 -0
  281. scenefab-1.0.0/src/scenefab/ui/main/pages/step_preview.py +281 -0
  282. scenefab-1.0.0/src/scenefab/ui/main/pages/step_upload.py +236 -0
  283. scenefab-1.0.0/src/scenefab/ui/main/pages/style_preset_panel.py +189 -0
  284. scenefab-1.0.0/src/scenefab/ui/main/pages/subtitle_style_card.py +114 -0
  285. scenefab-1.0.0/src/scenefab/ui/main/pages/thumbnail_worker.py +65 -0
  286. scenefab-1.0.0/src/scenefab/ui/main/pages/video_drop_zone.py +150 -0
  287. scenefab-1.0.0/src/scenefab/ui/main/pages/video_metadata_panel.py +81 -0
  288. scenefab-1.0.0/src/scenefab/ui/main/pages/video_preview_widget.py +71 -0
  289. scenefab-1.0.0/src/scenefab/ui/main/pages/video_thumbnail_item.py +125 -0
  290. scenefab-1.0.0/src/scenefab/ui/theme/__init__.py +3 -0
  291. scenefab-1.0.0/src/scenefab/ui/theme/animation_helper.py +531 -0
  292. scenefab-1.0.0/src/scenefab/ui/theme/base_styles.py +121 -0
  293. scenefab-1.0.0/src/scenefab/ui/theme/ds_tokens.py +382 -0
  294. scenefab-1.0.0/src/scenefab/ui/theme/qss_variables.py +38 -0
  295. scenefab-1.0.0/src/scenefab/ui/theme/theme_manager.py +373 -0
  296. scenefab-1.0.0/src/scenefab/ui/theme/theme_optimizer.py +503 -0
  297. scenefab-1.0.0/src/scenefab/ui/theme/theme_toggle.py +276 -0
  298. scenefab-1.0.0/src/scenefab/ui/theme/tokens.py +116 -0
  299. scenefab-1.0.0/src/scenefab/ui/windows/__init__.py +24 -0
  300. scenefab-1.0.0/src/scenefab/ui/windows/base_step_window.py +94 -0
  301. scenefab-1.0.0/src/scenefab/ui/windows/export_window.py +165 -0
  302. scenefab-1.0.0/src/scenefab/ui/windows/main_window.py +201 -0
  303. scenefab-1.0.0/src/scenefab/ui/windows/narration_window.py +220 -0
  304. scenefab-1.0.0/src/scenefab/ui/windows/projects_window.py +250 -0
  305. scenefab-1.0.0/src/scenefab/ui/windows/scene_window.py +181 -0
  306. scenefab-1.0.0/src/scenefab/ui/windows/upload_window.py +189 -0
  307. scenefab-1.0.0/src/scenefab/update/__init__.py +6 -0
  308. scenefab-1.0.0/src/scenefab/update/checker.py +116 -0
  309. scenefab-1.0.0/src/scenefab/utils/__init__.py +1 -0
  310. scenefab-1.0.0/src/scenefab/utils/config.py +237 -0
  311. scenefab-1.0.0/src/scenefab/utils/error_handler.py +514 -0
  312. scenefab-1.0.0/src/scenefab/utils/performance.py +217 -0
  313. scenefab-1.0.0/src/scenefab/utils/secure_config_loader.py +421 -0
  314. scenefab-1.0.0/src/scenefab/utils/security.py +528 -0
  315. scenefab-1.0.0/src/scenefab/utils/shortcut_manager.py +313 -0
  316. scenefab-1.0.0/src/scenefab/utils/task_manager.py +189 -0
  317. scenefab-1.0.0/src/scenefab/utils/version.py +120 -0
  318. scenefab-1.0.0/src/scenefab/version_manager.py +557 -0
  319. scenefab-1.0.0/src/scenefab/version_models.py +91 -0
  320. scenefab-1.0.0/src/scenefab/video.py +18 -0
  321. scenefab-1.0.0/src/scenefab.egg-info/PKG-INFO +225 -0
  322. scenefab-1.0.0/src/scenefab.egg-info/SOURCES.txt +371 -0
  323. scenefab-1.0.0/src/scenefab.egg-info/dependency_links.txt +1 -0
  324. scenefab-1.0.0/src/scenefab.egg-info/entry_points.txt +2 -0
  325. scenefab-1.0.0/src/scenefab.egg-info/requires.txt +43 -0
  326. scenefab-1.0.0/src/scenefab.egg-info/top_level.txt +1 -0
  327. scenefab-1.0.0/tests/test_ai_service_manager.py +120 -0
  328. scenefab-1.0.0/tests/test_application.py +17 -0
  329. scenefab-1.0.0/tests/test_base_exporter.py +142 -0
  330. scenefab-1.0.0/tests/test_beat_detector.py +106 -0
  331. scenefab-1.0.0/tests/test_benchmark.py +101 -0
  332. scenefab-1.0.0/tests/test_cache_manager.py +87 -0
  333. scenefab-1.0.0/tests/test_caption_generator.py +232 -0
  334. scenefab-1.0.0/tests/test_config_manager.py +106 -0
  335. scenefab-1.0.0/tests/test_direct_video_exporter.py +101 -0
  336. scenefab-1.0.0/tests/test_error_handler.py +17 -0
  337. scenefab-1.0.0/tests/test_event_bus.py +102 -0
  338. scenefab-1.0.0/tests/test_event_handler.py +17 -0
  339. scenefab-1.0.0/tests/test_exceptions.py +223 -0
  340. scenefab-1.0.0/tests/test_ffmpeg_tool.py +319 -0
  341. scenefab-1.0.0/tests/test_highlight_detector.py +89 -0
  342. scenefab-1.0.0/tests/test_icon_manager.py +17 -0
  343. scenefab-1.0.0/tests/test_integration.py +315 -0
  344. scenefab-1.0.0/tests/test_jianying_exporter.py +179 -0
  345. scenefab-1.0.0/tests/test_llm_base.py +140 -0
  346. scenefab-1.0.0/tests/test_llm_cache.py +286 -0
  347. scenefab-1.0.0/tests/test_llm_manager.py +9 -0
  348. scenefab-1.0.0/tests/test_llm_providers.py +70 -0
  349. scenefab-1.0.0/tests/test_logger.py +87 -0
  350. scenefab-1.0.0/tests/test_macOS_theme_manager.py +17 -0
  351. scenefab-1.0.0/tests/test_monologue_maker.py +94 -0
  352. scenefab-1.0.0/tests/test_page_loader.py +17 -0
  353. scenefab-1.0.0/tests/test_performance.py +153 -0
  354. scenefab-1.0.0/tests/test_project_manager.py +78 -0
  355. scenefab-1.0.0/tests/test_project_models.py +118 -0
  356. scenefab-1.0.0/tests/test_project_settings_manager.py +94 -0
  357. scenefab-1.0.0/tests/test_project_template_manager.py +99 -0
  358. scenefab-1.0.0/tests/test_project_version_manager.py +52 -0
  359. scenefab-1.0.0/tests/test_script_generator.py +88 -0
  360. scenefab-1.0.0/tests/test_script_generator_streaming.py +101 -0
  361. scenefab-1.0.0/tests/test_secure_key_manager.py +108 -0
  362. scenefab-1.0.0/tests/test_service_container.py +100 -0
  363. scenefab-1.0.0/tests/test_subtitle_extractor.py +109 -0
  364. scenefab-1.0.0/tests/test_sync_engine.py +84 -0
  365. scenefab-1.0.0/tests/test_task_queue.py +10 -0
  366. scenefab-1.0.0/tests/test_ui_components.py +17 -0
  367. scenefab-1.0.0/tests/test_version.py +73 -0
  368. scenefab-1.0.0/tests/test_video_analyzer.py +17 -0
  369. scenefab-1.0.0/tests/test_video_enhancer.py +17 -0
  370. scenefab-1.0.0/tests/test_video_exporter.py +101 -0
  371. scenefab-1.0.0/tests/test_video_maker.py +135 -0
  372. scenefab-1.0.0/tests/test_vision_providers.py +155 -0
  373. scenefab-1.0.0/tests/test_voice_generator.py +17 -0
scenefab-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Agions
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,8 @@
1
+ include README.md
2
+ include LICENSE
3
+ include pyproject.toml
4
+ recursive-include src/scenefab *.py
5
+ recursive-include src/scenefab/templates *.html *.json *.yaml
6
+ include src/scenefab/py.typed
7
+ recursive-include resources *
8
+ recursive-include config *.yaml *.conf
@@ -0,0 +1,225 @@
1
+ Metadata-Version: 2.4
2
+ Name: scenefab
3
+ Version: 1.0.0
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,PySide6,短视频,影视解说
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: librosa>=0.10.0
39
+ Requires-Dist: soundfile>=0.12.0
40
+ Requires-Dist: faster-whisper>=1.0.0
41
+ Requires-Dist: torch>=2.0.0
42
+ Requires-Dist: edge-tts>=6.1.0
43
+ Requires-Dist: scenedetect>=0.6.0
44
+ Requires-Dist: deepl>=1.18.0
45
+ Requires-Dist: requests>=2.31.0
46
+ Requires-Dist: httpx>=0.25.0
47
+ Requires-Dist: fastapi>=0.109.0
48
+ Requires-Dist: uvicorn>=0.27.0
49
+ Requires-Dist: pydantic>=2.5.0
50
+ Requires-Dist: python-dotenv>=1.0.0
51
+ Requires-Dist: pyyaml>=6.0.1
52
+ Requires-Dist: psutil>=5.9.6
53
+ Requires-Dist: cryptography>=41.0.0
54
+ Requires-Dist: keyring>=24.0.0
55
+ Requires-Dist: openai>=1.0.0
56
+ Requires-Dist: google-generativeai>=0.8.0
57
+ Requires-Dist: moviepy>=1.0.3
58
+ Requires-Dist: packaging>=21.0
59
+ Provides-Extra: dev
60
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
61
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
62
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
63
+ Requires-Dist: pytest-timeout>=2.1.0; extra == "dev"
64
+ Requires-Dist: black>=23.11.0; extra == "dev"
65
+ Requires-Dist: mypy>=1.7.0; extra == "dev"
66
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
67
+ Requires-Dist: types-requests>=2.31.0; extra == "dev"
68
+ Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
69
+ Requires-Dist: types-PySide6>=6.6.0; extra == "dev"
70
+ Provides-Extra: all
71
+ Requires-Dist: deepl>=1.18.0; extra == "all"
72
+ Requires-Dist: moviepy>=1.0.3; extra == "all"
73
+ Dynamic: license-file
74
+
75
+ # SceneFab
76
+
77
+ **AI 影视解说创作工具 — 智能拆条 · AI 解说生成 · 一键配音合成**
78
+
79
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
80
+ [![Python](https://img.shields.io/badge/Python-3.10+-3776AB?style=flat-square&logo=python)](https://www.python.org/)
81
+ [![PySide6](https://img.shields.io/badge/Qt-6.5+-41C845?style=flat-square&logo=qt)](https://qt.io/)
82
+ [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux-silver?style=flat-square)](https://github.com/Agions/scene-fab)
83
+ [![Releases](https://img.shields.io/badge/v1.0.0-10B981?style=flat-square)](https://github.com/Agions/scene-fab/releases)
84
+
85
+ ---
86
+
87
+ ## 定位
88
+
89
+ > **SceneFab** — 上传一部电影/短剧,AI 自动完成语义拆条、生成解说稿、合成配音,一键导出解说视频。
90
+ >
91
+ > 从「几天一条」变成「一天十条」。
92
+
93
+ | 成本 | 隐私 | 效率 |
94
+ |------|------|------|
95
+ | < ¥0.01/视频(DeepSeek-V4) | 视频永不上传云端,全本地 | 5-15 分钟/条 |
96
+
97
+ ---
98
+
99
+ ## 核心能力
100
+
101
+ | 能力 | 说明 |
102
+ |------|------|
103
+ | 🎬 **AI 语义拆条** | Qwen2.5-VL 理解视频语义,按情节/场景自动切分,无需手动打点 |
104
+ | 🎭 **情感峰值选段** | 视觉 + 音频双维评分,优先选取叙事高潮片段 |
105
+ | ✍️ **AI 解说稿生成** | DeepSeek-V4 生成情感丰富解说,7 种风格一键切换 |
106
+ | 🎙️ **一键配音合成** | Edge-TTS / F5-TTS,50ms 精度字幕对齐 |
107
+ | 📦 **多格式导出** | H.264/H.265 MP4 直出,或原生剪映草稿 JSON |
108
+ | 💻 **命令行原生** | pip 安装即用,支持 Agent 工作流接入(SKILL.md) |
109
+
110
+ ---
111
+
112
+ ## 5 步创作流程
113
+
114
+ ```
115
+ 上传视频(mp4/mov/avi/webm)
116
+
117
+
118
+ ┌──────────────────────────────────────────┐
119
+ │ Step 1 · AI 语义拆条 │
120
+ │ Qwen2.5-VL 视觉理解,场景边界检测 │
121
+ └──────────────────────────────────────────┘
122
+
123
+
124
+ ┌──────────────────────────────────────────┐
125
+ │ Step 2 · 情感峰值选段 │
126
+ │ 视觉信息密度 × 0.6 + 音频语调 × 0.4 │
127
+ └──────────────────────────────────────────┘
128
+
129
+
130
+ ┌──────────────────────────────────────────┐
131
+ │ Step 3 · 解说稿生成 │
132
+ │ DeepSeek-V4 · 7 种情感风格 │
133
+ └──────────────────────────────────────────┘
134
+
135
+
136
+ ┌──────────────────────────────────────────┐
137
+ │ Step 4 · 配音合成 │
138
+ │ Edge-TTS / F5-TTS + 词级时间戳 │
139
+ └──────────────────────────────────────────┘
140
+
141
+
142
+ ┌──────────────────────────────────────────┐
143
+ │ Step 5 · 视频合成导出 │
144
+ │ FFmpeg H.264/H.265 · MP4 / 剪映草稿 │
145
+ └──────────────────────────────────────────┘
146
+ ```
147
+
148
+ ---
149
+
150
+ ## 技术栈
151
+
152
+ | 模块 | 模型 / 技术 | 说明 |
153
+ |------|-----------|------|
154
+ | 语义拆条 | **Qwen2.5-VL** | 视频帧逐帧理解,语义场景边界检测 |
155
+ | 解说生成 | **DeepSeek-V4** | 第一人称视角,7 种预设风格 |
156
+ | 情感评分 | 视觉 + 音频双维 | 画面信息密度 + 语调变化,综合排序 |
157
+ | 配音合成 | **Edge-TTS** · **F5-TTS** | Edge 主流低延迟,F5 零样本音色克隆 |
158
+ | 字幕对齐 | TTS Word-level Timing | 精确到每个字的起止时间,50ms 精度 |
159
+ | 视频合成 | **FFmpeg** | H.264/H.265 编码,本地处理 |
160
+ | 导出格式 | **MP4** · **剪映草稿** | 直出发布 / 继续精剪 |
161
+
162
+ ---
163
+
164
+ ## 快速开始
165
+
166
+ ### 安装
167
+
168
+ **方式一:从 PyPI 安装(待发布)**
169
+ ```bash
170
+ pip install scenefab
171
+ ```
172
+
173
+ **方式二:从源码安装(推荐)**
174
+ ```bash
175
+ git clone https://github.com/Agions/scene-fab.git
176
+ cd scene-fab
177
+ pip install -e .
178
+ ```
179
+
180
+ ### 运行
181
+
182
+ ```bash
183
+ # GUI 模式
184
+ scenefab gui
185
+
186
+ # 命令行模式
187
+ scenefab commentary create-movie ./movie.mp4 --style 纪录片 --output ./output/
188
+ ```
189
+
190
+ ### 配置 AI(只需一个 Key)
191
+
192
+ ```bash
193
+ # DeepSeek(解说生成主力)
194
+ export DEEPSEEK_API_KEY="sk-..."
195
+
196
+ # 不配置时:Edge-TTS 配音等基础功能仍可正常使用
197
+ ```
198
+
199
+ ---
200
+
201
+ ## 文档
202
+
203
+ | 文档 | 说明 |
204
+ |------|------|
205
+ | [快速开始](https://agions.github.io/scene-fab/guide/quick-start) | 5 分钟上手 |
206
+ | [功能详解](https://agions.github.io/scene-fab/features) | 全部功能说明 |
207
+ | [AI 工作流](https://agions.github.io/scene-fab/guide/ai-video-guide) | 5 步流水线详解 |
208
+ | [配置参考](https://agions.github.io/scene-fab/config) | 环境变量与配置文件 |
209
+ | [疑难排查](https://agions.github.io/scene-fab/guide/troubleshooting) | 常见问题 |
210
+
211
+ 在线文档:**https://agions.github.io/scene-fab/**
212
+
213
+ ---
214
+
215
+ ## 许可证
216
+
217
+ [MIT License](LICENSE) · Copyright © 2025-2026 [Agions](https://github.com/Agions)
218
+
219
+ ---
220
+
221
+ <div align="center">
222
+
223
+ ⭐ 如果 SceneFab 对你有帮助,请给一个 Star
224
+
225
+ </div>
@@ -0,0 +1,151 @@
1
+ # SceneFab
2
+
3
+ **AI 影视解说创作工具 — 智能拆条 · AI 解说生成 · 一键配音合成**
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
6
+ [![Python](https://img.shields.io/badge/Python-3.10+-3776AB?style=flat-square&logo=python)](https://www.python.org/)
7
+ [![PySide6](https://img.shields.io/badge/Qt-6.5+-41C845?style=flat-square&logo=qt)](https://qt.io/)
8
+ [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux-silver?style=flat-square)](https://github.com/Agions/scene-fab)
9
+ [![Releases](https://img.shields.io/badge/v1.0.0-10B981?style=flat-square)](https://github.com/Agions/scene-fab/releases)
10
+
11
+ ---
12
+
13
+ ## 定位
14
+
15
+ > **SceneFab** — 上传一部电影/短剧,AI 自动完成语义拆条、生成解说稿、合成配音,一键导出解说视频。
16
+ >
17
+ > 从「几天一条」变成「一天十条」。
18
+
19
+ | 成本 | 隐私 | 效率 |
20
+ |------|------|------|
21
+ | < ¥0.01/视频(DeepSeek-V4) | 视频永不上传云端,全本地 | 5-15 分钟/条 |
22
+
23
+ ---
24
+
25
+ ## 核心能力
26
+
27
+ | 能力 | 说明 |
28
+ |------|------|
29
+ | 🎬 **AI 语义拆条** | Qwen2.5-VL 理解视频语义,按情节/场景自动切分,无需手动打点 |
30
+ | 🎭 **情感峰值选段** | 视觉 + 音频双维评分,优先选取叙事高潮片段 |
31
+ | ✍️ **AI 解说稿生成** | DeepSeek-V4 生成情感丰富解说,7 种风格一键切换 |
32
+ | 🎙️ **一键配音合成** | Edge-TTS / F5-TTS,50ms 精度字幕对齐 |
33
+ | 📦 **多格式导出** | H.264/H.265 MP4 直出,或原生剪映草稿 JSON |
34
+ | 💻 **命令行原生** | pip 安装即用,支持 Agent 工作流接入(SKILL.md) |
35
+
36
+ ---
37
+
38
+ ## 5 步创作流程
39
+
40
+ ```
41
+ 上传视频(mp4/mov/avi/webm)
42
+
43
+
44
+ ┌──────────────────────────────────────────┐
45
+ │ Step 1 · AI 语义拆条 │
46
+ │ Qwen2.5-VL 视觉理解,场景边界检测 │
47
+ └──────────────────────────────────────────┘
48
+
49
+
50
+ ┌──────────────────────────────────────────┐
51
+ │ Step 2 · 情感峰值选段 │
52
+ │ 视觉信息密度 × 0.6 + 音频语调 × 0.4 │
53
+ └──────────────────────────────────────────┘
54
+
55
+
56
+ ┌──────────────────────────────────────────┐
57
+ │ Step 3 · 解说稿生成 │
58
+ │ DeepSeek-V4 · 7 种情感风格 │
59
+ └──────────────────────────────────────────┘
60
+
61
+
62
+ ┌──────────────────────────────────────────┐
63
+ │ Step 4 · 配音合成 │
64
+ │ Edge-TTS / F5-TTS + 词级时间戳 │
65
+ └──────────────────────────────────────────┘
66
+
67
+
68
+ ┌──────────────────────────────────────────┐
69
+ │ Step 5 · 视频合成导出 │
70
+ │ FFmpeg H.264/H.265 · MP4 / 剪映草稿 │
71
+ └──────────────────────────────────────────┘
72
+ ```
73
+
74
+ ---
75
+
76
+ ## 技术栈
77
+
78
+ | 模块 | 模型 / 技术 | 说明 |
79
+ |------|-----------|------|
80
+ | 语义拆条 | **Qwen2.5-VL** | 视频帧逐帧理解,语义场景边界检测 |
81
+ | 解说生成 | **DeepSeek-V4** | 第一人称视角,7 种预设风格 |
82
+ | 情感评分 | 视觉 + 音频双维 | 画面信息密度 + 语调变化,综合排序 |
83
+ | 配音合成 | **Edge-TTS** · **F5-TTS** | Edge 主流低延迟,F5 零样本音色克隆 |
84
+ | 字幕对齐 | TTS Word-level Timing | 精确到每个字的起止时间,50ms 精度 |
85
+ | 视频合成 | **FFmpeg** | H.264/H.265 编码,本地处理 |
86
+ | 导出格式 | **MP4** · **剪映草稿** | 直出发布 / 继续精剪 |
87
+
88
+ ---
89
+
90
+ ## 快速开始
91
+
92
+ ### 安装
93
+
94
+ **方式一:从 PyPI 安装(待发布)**
95
+ ```bash
96
+ pip install scenefab
97
+ ```
98
+
99
+ **方式二:从源码安装(推荐)**
100
+ ```bash
101
+ git clone https://github.com/Agions/scene-fab.git
102
+ cd scene-fab
103
+ pip install -e .
104
+ ```
105
+
106
+ ### 运行
107
+
108
+ ```bash
109
+ # GUI 模式
110
+ scenefab gui
111
+
112
+ # 命令行模式
113
+ scenefab commentary create-movie ./movie.mp4 --style 纪录片 --output ./output/
114
+ ```
115
+
116
+ ### 配置 AI(只需一个 Key)
117
+
118
+ ```bash
119
+ # DeepSeek(解说生成主力)
120
+ export DEEPSEEK_API_KEY="sk-..."
121
+
122
+ # 不配置时:Edge-TTS 配音等基础功能仍可正常使用
123
+ ```
124
+
125
+ ---
126
+
127
+ ## 文档
128
+
129
+ | 文档 | 说明 |
130
+ |------|------|
131
+ | [快速开始](https://agions.github.io/scene-fab/guide/quick-start) | 5 分钟上手 |
132
+ | [功能详解](https://agions.github.io/scene-fab/features) | 全部功能说明 |
133
+ | [AI 工作流](https://agions.github.io/scene-fab/guide/ai-video-guide) | 5 步流水线详解 |
134
+ | [配置参考](https://agions.github.io/scene-fab/config) | 环境变量与配置文件 |
135
+ | [疑难排查](https://agions.github.io/scene-fab/guide/troubleshooting) | 常见问题 |
136
+
137
+ 在线文档:**https://agions.github.io/scene-fab/**
138
+
139
+ ---
140
+
141
+ ## 许可证
142
+
143
+ [MIT License](LICENSE) · Copyright © 2025-2026 [Agions](https://github.com/Agions)
144
+
145
+ ---
146
+
147
+ <div align="center">
148
+
149
+ ⭐ 如果 SceneFab 对你有帮助,请给一个 Star
150
+
151
+ </div>
@@ -0,0 +1,82 @@
1
+ cache:
2
+ enabled: true
3
+ max_size: 100
4
+ ttl: 3600
5
+ default_provider: qwen
6
+ llm_providers:
7
+ qwen:
8
+ enabled: true
9
+ api_key: ""
10
+ base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1"
11
+ model: "qwen-plus"
12
+ max_tokens: 8000
13
+ temperature: 0.7
14
+ deepseek:
15
+ enabled: false
16
+ api_key: ""
17
+ base_url: "https://api.deepseek.com"
18
+ model: "deepseek-v4-flash"
19
+ max_tokens: 16384
20
+ temperature: 0.7
21
+ kimi:
22
+ enabled: false
23
+ api_key: ""
24
+ base_url: "https://api.moonshot.cn/v1"
25
+ model: "moonshot-v1-128k"
26
+ max_tokens: 8000
27
+ temperature: 0.7
28
+ glm5:
29
+ enabled: false
30
+ api_key: ""
31
+ base_url: "https://open.bigmodel.cn/api/paas/v4/"
32
+ model: "glm-4-flash"
33
+ max_tokens: 8000
34
+ temperature: 0.7
35
+ openai:
36
+ enabled: false
37
+ api_key: ""
38
+ base_url: "https://api.openai.com/v1"
39
+ model: "gpt-4o"
40
+ max_tokens: 16384
41
+ temperature: 0.7
42
+ claude:
43
+ enabled: false
44
+ api_key: ""
45
+ base_url: "https://api.anthropic.com"
46
+ model: "claude-sonnet-4-20250514"
47
+ max_tokens: 2000
48
+ temperature: 0.7
49
+ gemini:
50
+ enabled: false
51
+ api_key: ""
52
+ base_url: "https://generativelanguage.googleapis.com"
53
+ model: "gemini-2.0-flash-exp"
54
+ max_tokens: 8000
55
+ temperature: 0.7
56
+ local:
57
+ enabled: false
58
+ api_key: ""
59
+ base_url: "http://localhost:11434"
60
+ model: ""
61
+ max_tokens: 4096
62
+ temperature: 0.7
63
+ doubao:
64
+ enabled: false
65
+ api_key: ""
66
+ base_url: "https://ark.cn-beijing.volces.com/api/v3"
67
+ model: "doubao-pro-128k"
68
+ max_tokens: 8000
69
+ temperature: 0.7
70
+ hunyuan:
71
+ enabled: false
72
+ api_key: ""
73
+ base_url: "https://hunyuan.tencentcloudapi.com"
74
+ model: "hunyuan-pro"
75
+ max_tokens: 8000
76
+ temperature: 0.7
77
+ log_level: INFO
78
+ retry:
79
+ backoff_factor: 2.0
80
+ base_delay: 1.0
81
+ max_delay: 60.0
82
+ max_retries: 3
@@ -0,0 +1,94 @@
1
+ # SceneFab AI LLM 配置
2
+
3
+ LLM:
4
+ # 默认提供商 (qwen | kimi | glm5 | openai | deepseek | claude | gemini | local | doubao | hunyuan)
5
+ default_provider: "qwen"
6
+
7
+ # 通义千问 Qwen Plus
8
+ qwen:
9
+ enabled: true
10
+ api_key: ${QWEN_API_KEY}
11
+ base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1"
12
+ model: "qwen-plus"
13
+ max_tokens: 8000
14
+ temperature: 0.7
15
+ top_p: 0.9
16
+
17
+ # DeepSeek V4
18
+ deepseek:
19
+ enabled: false
20
+ api_key: ${DEEPSEEK_API_KEY}
21
+ base_url: "https://api.deepseek.com"
22
+ model: "deepseek-v4-flash"
23
+ max_tokens: 16384
24
+ temperature: 0.7
25
+
26
+ # Kimi moonshot-v1
27
+ kimi:
28
+ enabled: false
29
+ api_key: ${KIMI_API_KEY}
30
+ base_url: "https://api.moonshot.cn/v1"
31
+ model: "moonshot-v1-128k"
32
+ max_tokens: 8000
33
+ temperature: 0.7
34
+
35
+ # 智谱 GLM-4
36
+ glm5:
37
+ enabled: false
38
+ api_key: ${GLM5_API_KEY}
39
+ base_url: "https://open.bigmodel.cn/api/paas/v4/"
40
+ model: "glm-4-flash"
41
+ max_tokens: 8000
42
+ temperature: 0.7
43
+
44
+ # OpenAI GPT-4o
45
+ openai:
46
+ enabled: false
47
+ api_key: ${OPENAI_API_KEY}
48
+ base_url: "https://api.openai.com/v1"
49
+ model: "gpt-4o"
50
+ max_tokens: 16384
51
+ temperature: 0.7
52
+
53
+ # Anthropic Claude Sonnet 4
54
+ claude:
55
+ enabled: false
56
+ api_key: ${CLAUDE_API_KEY}
57
+ base_url: "https://api.anthropic.com"
58
+ model: "claude-sonnet-4-20250514"
59
+ max_tokens: 2000
60
+ temperature: 0.7
61
+
62
+ # Google Gemini 2.0
63
+ gemini:
64
+ enabled: false
65
+ api_key: ${GEMINI_API_KEY}
66
+ base_url: "https://generativelanguage.googleapis.com"
67
+ model: "gemini-2.0-flash-exp"
68
+ max_tokens: 8000
69
+ temperature: 0.7
70
+
71
+ # 本地模型 (Ollama / LM Studio)
72
+ local:
73
+ enabled: false
74
+ api_key: ""
75
+ base_url: "http://localhost:11434"
76
+ backend: "ollama"
77
+
78
+ # 字节豆包 Doubao
79
+ doubao:
80
+ enabled: false
81
+ api_key: ${DOUBAO_API_KEY}
82
+ base_url: "https://ark.cn-beijing.volces.com/api/v3"
83
+ model: "doubao-pro-128k"
84
+ max_tokens: 8000
85
+ temperature: 0.7
86
+
87
+ # 腾讯混元 Hunyuan
88
+ hunyuan:
89
+ enabled: false
90
+ api_key: ${HUNYUAN_API_KEY}
91
+ base_url: "https://hunyuan.tencentcloudapi.com"
92
+ model: "hunyuan-pro"
93
+ max_tokens: 8000
94
+ temperature: 0.7
@@ -0,0 +1,67 @@
1
+ # 日志配置
2
+
3
+ [loggers]
4
+ keys=root,scenefab,ai,services
5
+
6
+ [handlers]
7
+ keys=consoleHandler,fileHandler,errorHandler
8
+
9
+ [formatters]
10
+ keys=simpleFormatter,detailedFormatter
11
+
12
+ # Root logger
13
+ [logger_root]
14
+ level=INFO
15
+ handlers=consoleHandler
16
+
17
+ # Application logger
18
+ [logger_scenefab]
19
+ level=INFO
20
+ handlers=consoleHandler,fileHandler
21
+ qualname=scenefab
22
+ propagate=0
23
+
24
+ # AI services logger
25
+ [logger_ai]
26
+ level=DEBUG
27
+ handlers=consoleHandler,fileHandler
28
+ qualname=scenefab.services.ai
29
+ propagate=0
30
+
31
+ # Services logger
32
+ [logger_services]
33
+ level=INFO
34
+ handlers=fileHandler
35
+ qualname=scenefab.services
36
+ propagate=0
37
+
38
+ # Console handler
39
+ [handler_consoleHandler]
40
+ class=StreamHandler
41
+ level=INFO
42
+ formatter=simpleFormatter
43
+ args=(sys.stdout,)
44
+
45
+ # File handler
46
+ [handler_fileHandler]
47
+ class=handlers.RotatingFileHandler
48
+ level=DEBUG
49
+ formatter=detailedFormatter
50
+ args=('logs/scenefab.log', 'a', 10485760, 5, 'utf-8')
51
+
52
+ # Error handler
53
+ [handler_errorHandler]
54
+ class=handlers.RotatingFileHandler
55
+ level=ERROR
56
+ formatter=detailedFormatter
57
+ args=('logs/error.log', 'a', 10485760, 3, 'utf-8')
58
+
59
+ # Simple formatter
60
+ [formatter_simpleFormatter]
61
+ format=%(asctime)s - %(levelname)s - %(message)s
62
+ datefmt=%Y-%m-%d %H:%M:%S
63
+
64
+ # Detailed formatter
65
+ [formatter_detailedFormatter]
66
+ format=%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s
67
+ datefmt=%Y-%m-%d %H:%M:%S