auto-save 2026-05-13 10:44 (~4)
This commit is contained in:
69
api/main.py
69
api/main.py
@@ -1172,3 +1172,72 @@ def get_cutout(job_id: str, idx: int, element_id: str):
|
||||
if not p.exists():
|
||||
raise HTTPException(404, "cutout not found")
|
||||
return FileResponse(p, media_type="image/png")
|
||||
|
||||
|
||||
# ---------- 删除:关键帧 / 单张生成图 ----------
|
||||
|
||||
@app.delete("/jobs/{job_id}/frames/{idx}", response_model=Job)
|
||||
def delete_frame(job_id: str, idx: int) -> Job:
|
||||
"""删除整张关键帧,清理所有附属文件(原图 / 干净版 / 元素抠图 / 生成图)"""
|
||||
job = JOBS.get(job_id)
|
||||
if not job:
|
||||
raise HTTPException(404, "job not found")
|
||||
target = next((f for f in job.frames if f.index == idx), None)
|
||||
if not target:
|
||||
raise HTTPException(404, "frame not found")
|
||||
|
||||
d = job_dir(job_id)
|
||||
# 删文件 — 静默错误,文件可能不存在
|
||||
paths = [
|
||||
d / "frames" / f"{idx:03d}.jpg",
|
||||
d / "cleaned" / f"{idx:03d}.jpg",
|
||||
]
|
||||
for p in paths:
|
||||
if p.exists():
|
||||
try: p.unlink()
|
||||
except OSError: pass
|
||||
# 该帧的所有元素抠图(命名前缀 {idx:03d}_)
|
||||
elements_dir = d / "elements"
|
||||
if elements_dir.exists():
|
||||
for p in elements_dir.glob(f"{idx:03d}_*.png"):
|
||||
try: p.unlink()
|
||||
except OSError: pass
|
||||
# 该帧的所有生成图
|
||||
gen_dir = d / "gen"
|
||||
if gen_dir.exists():
|
||||
for p in gen_dir.glob(f"{idx:03d}_*.jpg"):
|
||||
try: p.unlink()
|
||||
except OSError: pass
|
||||
|
||||
new_frames = [f for f in job.frames if f.index != idx]
|
||||
update(job, frames=new_frames, message=f"删除分镜 {idx + 1}")
|
||||
return job
|
||||
|
||||
|
||||
@app.delete("/jobs/{job_id}/frames/{idx}/gen/{gen_id}", response_model=Job)
|
||||
def delete_generated(job_id: str, idx: int, gen_id: str) -> Job:
|
||||
"""删除该 frame 的某张生成图(文件 + 列表)"""
|
||||
job = JOBS.get(job_id)
|
||||
if not job:
|
||||
raise HTTPException(404, "job not found")
|
||||
frame = next((f for f in job.frames if f.index == idx), None)
|
||||
if not frame:
|
||||
raise HTTPException(404, "frame not found")
|
||||
|
||||
p = job_dir(job_id) / "gen" / f"{idx:03d}_{gen_id}.jpg"
|
||||
if p.exists():
|
||||
try: p.unlink()
|
||||
except OSError: pass
|
||||
|
||||
new_frames = []
|
||||
found = False
|
||||
for f in job.frames:
|
||||
if f.index == idx:
|
||||
before = len(f.generated_images)
|
||||
f.generated_images = [g for g in f.generated_images if g.id != gen_id]
|
||||
found = len(f.generated_images) < before
|
||||
new_frames.append(f)
|
||||
if not found:
|
||||
raise HTTPException(404, "generated image not found")
|
||||
update(job, frames=new_frames, message=f"删除生成图 · 分镜 {idx + 1}")
|
||||
return job
|
||||
|
||||
Reference in New Issue
Block a user