python实现seedance2图片多图参考ai短剧漫剧分镜脚本生成器代码bfwseedstory手动版
代码语言:python
所属分类:其他
版本2(最新):python+openai兼容api实现seedance2图片多图参考ai短剧漫剧分镜脚本生成器代码bfwseedstory
版本1(旧版):python实现seedance2图片多图参考ai短剧漫剧分镜脚本生成器代码bfwseedstory手动版
代码描述:python实现seedance2图片多图参考ai短剧漫剧分镜脚本生成器代码bfwseedstory手动版,传完整分集剧本,自动生成每一集的seedance2多片段(每个片段10秒)的文本及参考图视频生成分镜脚本,每一步会生成专门的提示词去免费ai模型聊天生成回复后粘贴下一步,一个ai漫剧短剧无需花一分钱就能制作。
代码标签: python seedance 图片 参考 ai 短剧 漫剧 分镜 脚本 生成器 代码 bfwse
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
import os
import json
import sqlite3
from flask import Flask, request, jsonify, render_template_string, send_from_directory
from werkzeug.utils import secure_filename
# ================= 配置区域 =================
UPLOAD_FOLDER = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'uploads')
DB_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'app_data.db')
if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER)
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# ================= 数据库初始化 =================
def init_db():
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS projects (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP)''')
c.execute('''CREATE TABLE IF NOT EXISTS project_data (project_id INTEGER PRIMARY KEY, script TEXT, settings_json TEXT, storyboard TEXT)''')
c.execute('''CREATE TABLE IF NOT EXISTS images (id INTEGER PRIMARY KEY AUTOINCREMENT, project_id INTEGER, ref_id INTEGER, name TEXT, description TEXT, file_path TEXT)''')
conn.commit()
conn.close()
init_db()
def get_db():
conn = sqlite3.connect(DB_FILE)
conn.row_factory = sqlite3.Row
return conn
# ================= 辅助函数 =================
def clean_json_string(text):
"""清理用户粘贴的可能带有 markdown 格式的 JSON 字符串"""
text = text.strip()
if text.startswith("```json"): text = text[7:]
elif text.startswith("```"): text = text[3:]
if text.endswith("```"): text = text[:-3]
return text.strip()
# ================= 后端路由 =================
@app.route("/")
def index():
conn = get_db()
projects = conn.execute("SELECT * FROM projects ORDER BY id DESC").fetchall()
return render_template_string(INDEX_HTML, projects=projects)
@app.route("/api/projects", methods=["POST"])
def create_project():
name = request.json.get("name", "未命名项目")
conn = get_db()
cursor = conn.cursor()
cursor.execute("INSERT INTO projects (name) VALUES (?)", (name,))
pid = cursor.lastrowid
cursor.execute("INSERT INTO project_data (project_id, script, settings_json, storyboard) VALUES (?, '', '', '')", (pid,))
conn.commit()
conn.close()
return jsonify({"success": True, "id": pid})
@app.route("/project/<int:pid>")
def project_view(pid):
conn = get_db()
proj = conn.execute("SELECT * FROM projects WHERE id=?", (pid,)).fetchone()
if not proj: return "项目不存在"
data = conn.execute("SELECT * FROM project_data WHERE project_id=?", (pid,)).fetchone()
images = conn.execute("SELECT * FROM images WHERE project_id=? ORDER BY ref_id", (pid,)).fetchall()
storyboard_val = data['storyboard'] if data and data['storyboard'] else "[]"
storyboard_safe = json.dumps(storyboard_val)
# 将 images 转换为 list dict,方便前端生成提示词
images_json = json.dumps([dict(img) for img in images])
return render_template_string(PROJECT_HTML, project=proj, data=data, images=images, storyboard_safe=storyboard_safe, images_json=images_json)
# --------- 处理用户粘贴的设定 JSON ---------
@app.route("/api/project/<int:pid>/extract", methods=["POST"])
def api_extract_manual(pid):
script_text = request.json.get("script", "")
settings_str = request.json.get("settings_json", "")
try:
# 解析用户粘贴的 JSON
settings = json.loads(clean_json_string(settings_str))
conn = get_db()
cursor = conn.cursor()
cursor.execute("UPDATE project_data SET script=?, settings_json=? WHERE project_id=?", (script_text, json.dumps(settings), pid))
cursor.execute("DELETE FROM images WHERE project_id=?", (pid,))
ref_id = 1
for cat in ["characters", "scenes", "props"]:
for item in settings.get(cat,[]):
cursor.execute("INSERT INTO images (project_id, ref_id, name, description, file_path) VALUES (?, ?, ?, ?, '')", (pid, ref_id, item.get("name"), item.get("desc")))
ref_id += 1
conn.commit()
conn.close()
return jsonify({"success": True})
except json.JSONDecodeError:
return jsonify({"success": False, "error": "JSON 格式解析失败,请确保粘贴了正确的格式"})
except Exception as e:
return jsonify({"success": False, "error": str(e)})
.........完整代码请登录后点击上方下载按钮下载查看















网友评论0