Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -559,9 +559,40 @@ def get_demo_path(filename):
|
|
| 559 |
return filename if os.path.exists(filename) else None
|
| 560 |
|
| 561 |
|
| 562 |
-
# 构建 Gradio 界面
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 563 |
with gr.Blocks(title="AI 剧本视频工厂") as demo:
|
| 564 |
-
gr.Markdown("# 🎬 ScriptAgent & Sora/Veo 视频生成工坊")
|
| 565 |
|
| 566 |
with gr.Tabs():
|
| 567 |
# --- TAB 1: 剧本创作 ---
|
|
@@ -591,7 +622,73 @@ with gr.Blocks(title="AI 剧本视频工厂") as demo:
|
|
| 591 |
]],
|
| 592 |
inputs=llm_input
|
| 593 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 594 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 595 |
# --- TAB 2: 视频生成 ---
|
| 596 |
with gr.Tab("🎥 第二步:视频生成"):
|
| 597 |
with gr.Row():
|
|
|
|
| 559 |
return filename if os.path.exists(filename) else None
|
| 560 |
|
| 561 |
|
| 562 |
+
# # 构建 Gradio 界面
|
| 563 |
+
# with gr.Blocks(title="AI 剧本视频工厂") as demo:
|
| 564 |
+
# gr.Markdown("# 🎬 ScriptAgent & Sora/Veo 视频生成工坊 (注意:仅供简单测试,由于成本问题在线平台内存只有18G,我们量化了模型,性能效果并不能保证,如果需要最准确的输出请自行部署即可)")
|
| 565 |
+
|
| 566 |
+
# with gr.Tabs():
|
| 567 |
+
# # --- TAB 1: 剧本创作 ---
|
| 568 |
+
# with gr.Tab("📝 第一步:剧本创作"):
|
| 569 |
+
# with gr.Row():
|
| 570 |
+
# with gr.Column():
|
| 571 |
+
# llm_input = gr.Textbox(
|
| 572 |
+
# label="剧情输入",
|
| 573 |
+
# placeholder="主角:你在做什么?...",
|
| 574 |
+
# lines=6
|
| 575 |
+
# )
|
| 576 |
+
# llm_btn = gr.Button("生成/续写剧本", variant="primary")
|
| 577 |
+
|
| 578 |
+
# with gr.Column():
|
| 579 |
+
# llm_output = gr.Textbox(
|
| 580 |
+
# label="生成的剧本",
|
| 581 |
+
# lines=10,
|
| 582 |
+
# interactive=True
|
| 583 |
+
# )
|
| 584 |
+
# to_video_btn = gr.Button("⬇️ 发送到视频生成", variant="secondary")
|
| 585 |
+
|
| 586 |
+
# gr.Examples(
|
| 587 |
+
# [[
|
| 588 |
+
# "主角:你在做什么?指引图是不能随便篡改的。\n"
|
| 589 |
+
# "蒋前:篡改指引图?不不不,你误会了。\n"
|
| 590 |
+
# "蒋前:我才加入风物家没多久,哪有这个本事能篡改它..."
|
| 591 |
+
# ]],
|
| 592 |
+
# inputs=llm_input
|
| 593 |
+
# )
|
| 594 |
with gr.Blocks(title="AI 剧本视频工厂") as demo:
|
| 595 |
+
gr.Markdown("# 🎬 ScriptAgent & Sora/Veo 视频生成工坊 (注意:仅供简单测试,由于成本问题在线平台内存只有18G,我们量化了模型,性能效果并不能保证,如果需要最准确的输出请自行部署即可)")
|
| 596 |
|
| 597 |
with gr.Tabs():
|
| 598 |
# --- TAB 1: 剧本创作 ---
|
|
|
|
| 622 |
]],
|
| 623 |
inputs=llm_input
|
| 624 |
)
|
| 625 |
+
|
| 626 |
+
# 🔥 新增:本地部署代码展示区
|
| 627 |
+
gr.Markdown("---")
|
| 628 |
+
with gr.Accordion("💻 本地部署完整代码(点击展开查看)", open=False):
|
| 629 |
+
gr.Markdown("""
|
| 630 |
+
### 📦 完整部署步骤
|
| 631 |
+
以下代码可在本地完整运行,获得最佳性能和输出质量:
|
| 632 |
+
""")
|
| 633 |
+
|
| 634 |
+
deployment_code = '''import os
|
| 635 |
+
from huggingface_hub import snapshot_download
|
| 636 |
+
|
| 637 |
+
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
|
| 638 |
+
|
| 639 |
+
model_name = "XD-MU/ScriptAgent"
|
| 640 |
+
local_path = "./models/ScriptAgent"
|
| 641 |
+
|
| 642 |
+
# 下载整个仓库的所有文件
|
| 643 |
+
print("下载模型所有文件...")
|
| 644 |
+
snapshot_download(
|
| 645 |
+
repo_id=model_name,
|
| 646 |
+
local_dir=local_path,
|
| 647 |
+
local_dir_use_symlinks=False, # 直接复制文件,不使用符号链接
|
| 648 |
+
resume_download=True # 支持断点续传
|
| 649 |
+
)
|
| 650 |
|
| 651 |
+
print(f"模型已完整下载到: {local_path}")
|
| 652 |
+
|
| 653 |
+
# 然后使用 SWIFT 加载
|
| 654 |
+
from swift.llm import PtEngine, RequestConfig, InferRequest
|
| 655 |
+
|
| 656 |
+
engine = PtEngine(local_path, max_batch_size=1)
|
| 657 |
+
request_config = RequestConfig(max_tokens=8192, temperature=0.7)
|
| 658 |
+
|
| 659 |
+
infer_request = InferRequest(messages=[
|
| 660 |
+
{"role": "user", "content": "袁雪:太感谢了!幸好有你们及时赶到!否则现在我们已经变成烤肉大餐了……\\n主角:伤得怎么样,还站得起来吗?\\n赵东旭:腿一点知觉都没有……\\n蒙犽:实力不够就别逞强接甲级委托啊!跟我们走,回营地找百草家治疗。\\n蒙犽:你怎么了,发什么呆呢?\\n主角:这一带不太对劲。气温依然炎热,地面的火焰也没有消退……难道还有漏网之鱼?\\n主角:而且……我担心前面还有被困的学生。不如再去前面探查一下。\\n蒙犽:知道了。那分头行动吧,我先护送伤员去营地,回头再来找你。\\n蒙犽:哎,你可别跑太远啊!待会大眼枭联系!"}
|
| 661 |
+
])
|
| 662 |
+
response = engine.infer([infer_request], request_config)[0]
|
| 663 |
+
|
| 664 |
+
print(response.choices[0].message.content)'''
|
| 665 |
+
|
| 666 |
+
gr.Code(
|
| 667 |
+
value=deployment_code,
|
| 668 |
+
language="python",
|
| 669 |
+
label="deploy_scriptagent.py",
|
| 670 |
+
lines=35,
|
| 671 |
+
interactive=False
|
| 672 |
+
)
|
| 673 |
+
|
| 674 |
+
gr.Markdown("""
|
| 675 |
+
### 📌 环境要求
|
| 676 |
+
```bash
|
| 677 |
+
# 安装依赖
|
| 678 |
+
pip install ms-swift[llm] transformers torch huggingface_hub
|
| 679 |
+
|
| 680 |
+
# GPU 推荐配置
|
| 681 |
+
- CUDA 11.8+
|
| 682 |
+
- 显存: 16GB+ (推荐 24GB)
|
| 683 |
+
- 内存: 32GB+
|
| 684 |
+
```
|
| 685 |
+
|
| 686 |
+
### ⚡ 本地部署优势
|
| 687 |
+
- ✅ 完整精度模型,无量化损失
|
| 688 |
+
- ✅ 更快的推理速度
|
| 689 |
+
- ✅ 无网络限制,支持离线运行
|
| 690 |
+
- ✅ 可自定义参数(temperature, max_tokens等)
|
| 691 |
+
""")
|
| 692 |
# --- TAB 2: 视频生成 ---
|
| 693 |
with gr.Tab("🎥 第二步:视频生成"):
|
| 694 |
with gr.Row():
|