72 lines
2.5 KiB
Plaintext

# -*- coding:utf-8 -*-
# POST /api/submit - 提交视频生成任务
import json
import uuid
from ahserver.serverenv import ServerEnv
method = request.method
if method == 'POST':
prompt = params_kw.get('prompt', '')
if not prompt:
return json.dumps({'error': 'prompt is required'}, ensure_ascii=False)
task_id = params_kw.get('task_id', str(uuid.uuid4()).replace("-", "")[:12])
image = params_kw.get('image', None)
size = params_kw.get('size', '1280*720')
frame_num = params_kw.get('frame_num', 81)
sample_steps = params_kw.get('sample_steps', None)
sample_guide_scale = params_kw.get('sample_guide_scale', None)
base_seed = params_kw.get('base_seed', None)
valid_sizes = ['480*832', '832*480', '704*1024', '1024*704', '704*1280', '1280*704']
if size not in valid_sizes:
return json.dumps({'error': f'invalid size, must be one of: {valid_sizes}'}, ensure_ascii=False)
payload = {
'task_type': 'generate_video',
'task_id': task_id,
'prompt': prompt,
'image': image,
'size': size,
'frame_num': int(frame_num),
'sample_steps': int(sample_steps) if sample_steps else None,
'sample_guide_scale': float(sample_guide_scale) if sample_guide_scale else None,
'base_seed': int(base_seed) if base_seed else None,
}
env = ServerEnv()
longtasks = env.longtasks
if longtasks is None:
return json.dumps({'error': 'service not ready'}, ensure_ascii=False)
result = await longtasks.submit_task(payload)
real_task_id = result.get('task_id', str(result)) if isinstance(result, dict) else str(result)
return json.dumps({
'task_id': real_task_id,
'status': 'queued',
'prompt': prompt[:100],
'size': size,
'frame_num': payload['frame_num'],
'message': 'task submitted',
'check_url': f'/api/task?task_id={real_task_id}'
}, ensure_ascii=False)
else:
return json.dumps({
'usage': 'POST with JSON body',
'params': {
'prompt': 'string (required)',
'image': 'string (optional, server path for I2V)',
'size': 'string (default 1280*720)',
'frame_num': 'int (default 81, 4n+1, range 17-129)',
'sample_steps': 'int (optional)',
'sample_guide_scale': 'float (optional)',
'base_seed': 'int (optional)',
'task_id': 'string (optional, auto-generated)',
},
'valid_sizes': valid_sizes
}, ensure_ascii=False)