feat(image): 支持真 16:9(1536x864)+ 人物/商品三视图/场景默认 16:9
- gpt-image-2 实测支持 16:9(宽高需被 16 整除):真 16:9 = 1536x864(长边封顶 1536); 原来「16:9」误给成 1536x1024(实为 3:2)。修正 _RATIO_TO_SIZE 与 _ratio_to_image_size - admin「提示词」页比例按钮新增「宽 16:9」 - 迁移 0015/0016:scene + product_triview + person_triview 默认比例设为 16:9; 分镜图(storyboard_frame)/立绘/视频保持竖屏不动 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
dee269aeda
commit
fd596776e2
@@ -0,0 +1,19 @@
|
|||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
# 场景 / 商品三视图 默认比例改 16:9(1536x864);分镜图(storyboard_frame)保持竖屏不动。
|
||||||
|
KEYS = ["scene", "product_triview"]
|
||||||
|
|
||||||
|
|
||||||
|
def forwards(apps, schema_editor):
|
||||||
|
apps.get_model("ai", "PromptTemplate").objects.filter(key__in=KEYS).update(ratio="16:9")
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(apps, schema_editor):
|
||||||
|
apps.get_model("ai", "PromptTemplate").objects.filter(key__in=KEYS).update(ratio="landscape")
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [("ai", "0014_video_prompt_dialogue_no_meta")]
|
||||||
|
|
||||||
|
operations = [migrations.RunPython(forwards, backwards)]
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
# 人物三视图 也改 16:9(1536x864)。0015 已处理场景/商品三视图,这里补人物三视图。
|
||||||
|
|
||||||
|
|
||||||
|
def forwards(apps, schema_editor):
|
||||||
|
apps.get_model("ai", "PromptTemplate").objects.filter(key="person_triview").update(ratio="16:9")
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(apps, schema_editor):
|
||||||
|
apps.get_model("ai", "PromptTemplate").objects.filter(key="person_triview").update(ratio="landscape")
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [("ai", "0015_scene_product_16_9")]
|
||||||
|
|
||||||
|
operations = [migrations.RunPython(forwards, backwards)]
|
||||||
@@ -723,13 +723,13 @@ def _find_entity_group(project, kind: str, label: str, group_id: str | None):
|
|||||||
|
|
||||||
|
|
||||||
def _ratio_to_image_size(ratio: str) -> str:
|
def _ratio_to_image_size(ratio: str) -> str:
|
||||||
"""前端比例(1:1 / 3:4 / 9:16)→ gpt-image 支持的尺寸。竖屏统一 1024x1536,横屏 1536x1024。"""
|
"""前端比例 → gpt-image 支持的尺寸(宽高均需被 16 整除)。16:9 用真 16:9 的 1536x864,4:3 用 1536x1024。"""
|
||||||
return {
|
return {
|
||||||
"1:1": "1024x1024",
|
"1:1": "1024x1024",
|
||||||
"3:4": "1024x1536",
|
"3:4": "1024x1536",
|
||||||
"9:16": "1024x1536",
|
"9:16": "1024x1536",
|
||||||
"4:3": "1536x1024",
|
"4:3": "1536x1024",
|
||||||
"16:9": "1536x1024",
|
"16:9": "1536x864", # 真 16:9(原来误用 1536x1024 = 3:2)
|
||||||
}.get((ratio or "").strip(), "1024x1024")
|
}.get((ratio or "").strip(), "1024x1024")
|
||||||
|
|
||||||
|
|
||||||
@@ -768,7 +768,8 @@ def quality_suffix(stage: str, fallback: str, slot: str = "quality", sep: str =
|
|||||||
|
|
||||||
|
|
||||||
_PROMPT_PLACEHOLDER_RE = re.compile(r"\{(\w+)\}", re.UNICODE)
|
_PROMPT_PLACEHOLDER_RE = re.compile(r"\{(\w+)\}", re.UNICODE)
|
||||||
_RATIO_TO_SIZE = {"1:1": "1024x1024", "portrait": "1024x1536", "landscape": "1536x1024"}
|
# gpt-image 要求宽高都能被 16 整除;1536x864 = 真 16:9(长边封顶 1536),1536x1024 = 3:2
|
||||||
|
_RATIO_TO_SIZE = {"1:1": "1024x1024", "portrait": "1024x1536", "landscape": "1536x1024", "16:9": "1536x864"}
|
||||||
|
|
||||||
|
|
||||||
def _prompt_template_row(key: str):
|
def _prompt_template_row(key: str):
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ const RATIOS = [
|
|||||||
{ key: "", label: "默认" },
|
{ key: "", label: "默认" },
|
||||||
{ key: "1:1", label: "1:1 方" },
|
{ key: "1:1", label: "1:1 方" },
|
||||||
{ key: "portrait", label: "竖 2:3" },
|
{ key: "portrait", label: "竖 2:3" },
|
||||||
{ key: "landscape", label: "横 3:2" }
|
{ key: "landscape", label: "横 3:2" },
|
||||||
|
{ key: "16:9", label: "宽 16:9" }
|
||||||
];
|
];
|
||||||
|
|
||||||
export function AdminPromptsPage({ notify }: { notify: Notify }) {
|
export function AdminPromptsPage({ notify }: { notify: Notify }) {
|
||||||
|
|||||||
Reference in New Issue
Block a user