# -*- 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)