Switch to VectorEngine gpt-image-2 and edits

Replace uses of the legacy `gpt-image-2-all` model with `gpt-image-2` and standardize image workflows: no-reference generation uses POST /v1/images/generations, any-reference flows use POST /v1/images/edits with multipart `image` parts. Update SKILLs, generation scripts, decision logs, and docs to reflect the contract change and edits-vs-generations guidance. Apply corresponding changes across backend (api-server match3d/puzzle modules, openai image adapter, mappers, telemetry, spacetime client/module), frontend components and services (Match3D, Puzzle, CreativeImageInputPanel, runtime shells), and add new spritesheet/parser files and tests. Also add media/logo.png. These changes align repository code and documentation with the VectorEngine image API contract and update generation/upload handling (green-screen -> alpha processing, spritesheet handling, and related tests).
This commit is contained in:
2026-05-22 03:06:41 +08:00
parent 321e1ea33a
commit ae014ac881
90 changed files with 7078 additions and 3389 deletions

View File

@@ -161,7 +161,11 @@ fn map_jump_hop_work_snapshot(
path: map_jump_hop_path(snapshot.path),
character_asset,
tile_atlas_asset,
tile_assets: snapshot.tile_assets.into_iter().map(map_tile_asset).collect(),
tile_assets: snapshot
.tile_assets
.into_iter()
.map(map_tile_asset)
.collect(),
})
}
@@ -180,7 +184,11 @@ fn map_jump_hop_draft_snapshot(snapshot: JumpHopDraftSnapshot) -> JumpHopDraftRe
end_mood_prompt: snapshot.end_mood_prompt,
character_asset: snapshot.character_asset.map(map_character_asset),
tile_atlas_asset: snapshot.tile_atlas_asset.map(map_character_asset),
tile_assets: snapshot.tile_assets.into_iter().map(map_tile_asset).collect(),
tile_assets: snapshot
.tile_assets
.into_iter()
.map(map_tile_asset)
.collect(),
path: snapshot.path.map(map_jump_hop_path),
cover_composite: snapshot.cover_composite,
generation_status: parse_generation_status(&snapshot.generation_status),
@@ -268,7 +276,9 @@ fn map_jump_hop_run_snapshot(snapshot: JumpHopRunSnapshot) -> JumpHopRuntimeRunS
crate::module_bindings::JumpHopJumpResultKind::Miss => JumpHopJumpResult::Miss,
crate::module_bindings::JumpHopJumpResultKind::Hit => JumpHopJumpResult::Hit,
crate::module_bindings::JumpHopJumpResultKind::Finish => JumpHopJumpResult::Finish,
crate::module_bindings::JumpHopJumpResultKind::Perfect => JumpHopJumpResult::Perfect,
crate::module_bindings::JumpHopJumpResultKind::Perfect => {
JumpHopJumpResult::Perfect
}
},
}),
started_at_ms: snapshot.started_at_ms,

View File

@@ -145,6 +145,12 @@ pub(crate) fn map_puzzle_draft_level(snapshot: PuzzleDraftLevel) -> PuzzleDraftL
ui_background_prompt: snapshot.ui_background_prompt,
ui_background_image_src: snapshot.ui_background_image_src,
ui_background_image_object_key: snapshot.ui_background_image_object_key,
level_scene_image_src: snapshot.level_scene_image_src,
level_scene_image_object_key: snapshot.level_scene_image_object_key,
ui_spritesheet_image_src: snapshot.ui_spritesheet_image_src,
ui_spritesheet_image_object_key: snapshot.ui_spritesheet_image_object_key,
level_background_image_src: snapshot.level_background_image_src,
level_background_image_object_key: snapshot.level_background_image_object_key,
background_music: snapshot.background_music.map(map_puzzle_audio_asset),
candidates: snapshot
.candidates
@@ -392,6 +398,10 @@ pub(crate) fn map_puzzle_runtime_level_snapshot(
cover_image_src: snapshot.cover_image_src,
ui_background_image_src: snapshot.ui_background_image_src,
ui_background_image_object_key: snapshot.ui_background_image_object_key,
level_background_image_src: snapshot.level_background_image_src,
level_background_image_object_key: snapshot.level_background_image_object_key,
ui_spritesheet_image_src: snapshot.ui_spritesheet_image_src,
ui_spritesheet_image_object_key: snapshot.ui_spritesheet_image_object_key,
background_music: snapshot.background_music.map(map_puzzle_audio_asset),
board: map_puzzle_board_snapshot(snapshot.board),
status: format_puzzle_runtime_level_status(snapshot.status).to_string(),
@@ -835,6 +845,12 @@ pub struct PuzzleDraftLevelRecord {
pub ui_background_prompt: Option<String>,
pub ui_background_image_src: Option<String>,
pub ui_background_image_object_key: Option<String>,
pub level_scene_image_src: Option<String>,
pub level_scene_image_object_key: Option<String>,
pub ui_spritesheet_image_src: Option<String>,
pub ui_spritesheet_image_object_key: Option<String>,
pub level_background_image_src: Option<String>,
pub level_background_image_object_key: Option<String>,
pub background_music: Option<PuzzleAudioAssetRecord>,
pub candidates: Vec<PuzzleGeneratedImageCandidateRecord>,
pub selected_candidate_id: Option<String>,
@@ -1038,6 +1054,10 @@ pub struct PuzzleRuntimeLevelRecord {
pub cover_image_src: Option<String>,
pub ui_background_image_src: Option<String>,
pub ui_background_image_object_key: Option<String>,
pub level_background_image_src: Option<String>,
pub level_background_image_object_key: Option<String>,
pub ui_spritesheet_image_src: Option<String>,
pub ui_spritesheet_image_object_key: Option<String>,
pub background_music: Option<PuzzleAudioAssetRecord>,
pub board: PuzzleBoardRecord,
pub status: String,