seedream_sequential_generation
Generate sequential images like comic panels or brand visuals from text prompts and reference images to create cohesive multi-image content sets.
Instructions
组图输出:
支持通过一张或者多张图片和文字信息,生成漫画分镜、品牌视觉等一组内容关联的图片。
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Implementation Reference
- Core implementation of the sequential generation tool logic: validates parameters, calls Seedream API for batch image generation, handles streaming, auto-save, and formats the response with error handling.async def handle_sequential_generation(arguments: Dict[str, Any]) -> List[TextContent]: """ 处理组图/连续生成请求。 执行批量图片生成任务,支持提示词优化、多种响应格式、水印配置及自动保存功能。 根据用户配置参数调用 API 生成多张图片,并可选择性地将结果保存至本地。 Args: arguments: 请求参数字典,包含以下键值: - prompt (str): 生成图片的提示词描述 - max_images (int, optional): 最大生成图片数量,默认为 4 - image (str, optional): 参考图片的 URL 或 Base64 编码 - size (str, optional): 图片尺寸规格 - watermark (bool, optional): 是否添加水印 - response_format (str, optional): 响应格式,"url" 或 "b64_json",默认为 "url" - stream (bool, optional): 是否启用流式输出,默认为 False - optimize_prompt_options (dict, optional): 提示词优化选项 - auto_save (bool, optional): 是否自动保存图片 - save_path (str, optional): 自定义保存路径 - custom_name (str, optional): 自定义文件名前缀 Returns: 包含文本内容的列表,通常只有一个元素,描述生成任务的执行结果、图片信息及保存状态。 Raises: Exception: 当生成过程中发生错误时,捕获异常并返回格式化的错误提示信息。 """ try: # 加载全局配置 config = get_global_config() # 提取并验证请求参数 prompt = arguments.get("prompt", "") max_images = arguments.get("max_images", 4) image = arguments.get("image") size = validate_size_for_model( arguments.get("size") or config.default_size, config.model_id ) watermark_value = arguments.get("watermark") watermark = ( validate_watermark(watermark_value) if watermark_value is not None else config.default_watermark ) response_format = validate_response_format(arguments.get("response_format", "url")) stream = bool(arguments.get("stream", False)) optimize_prompt_options = validate_optimize_prompt_options( arguments.get("optimize_prompt_options"), config.model_id ) auto_save = arguments.get("auto_save") save_path = arguments.get("save_path") custom_name = arguments.get("custom_name") # 确定自动保存配置 enable_auto_save = auto_save if auto_save is not None else config.auto_save_enabled # 记录任务开始信息 logger.info( "组图生成开始: prompt='{}...', max_images={}, size={}, stream={}", (prompt or "")[:50], max_images, size, stream, ) # 执行组图生成请求 async with SeedreamClient(config) as client: result = await client.sequential_generation( prompt=prompt, max_images=max_images, size=size, watermark=watermark, response_format=response_format, image=image, stream=stream, optimize_prompt_options=optimize_prompt_options, ) # 处理自动保存逻辑 auto_save_results: List[Any] = [] if enable_auto_save and result.get("success"): # 根据响应格式选择对应的保存方法 if response_format == "url": auto_save_results = await auto_save_from_urls( result, prompt, config, save_path, custom_name, "sequential_generation" ) else: auto_save_results = await auto_save_from_base64( result, prompt, config, save_path, custom_name, "sequential_generation" ) # 将保存结果合并到响应数据中 if auto_save_results: result = update_result_with_auto_save(result, auto_save_results) # 格式化最终响应文本 response_text = format_generation_response( "组图生成任务完成", result, prompt, size, auto_save_results, enable_auto_save, ) return [TextContent(type="text", text=response_text)] except Exception as exc: # 记录异常详情 logger.error("组图生成处理失败", exc_info=True) # 提供用户友好的故障排除指导 guidance = "请检查提示词、数量与图片参数,确认 API Key 和网络可用后重试。" return [ TextContent( type="text", text=f"组图生成失败:{format_error_for_user(exc)}\n{guidance}", ) ]
- Pydantic input schema for the sequential generation tool, defining fields like prompt, max_images, optional reference image(s), with comprehensive validation.class SequentialGenerationInput(BaseGenerationInput): """ 组图输出:支持通过一张或者多张图片和文字信息,生成漫画分镜、品牌视觉等一组内容关联的图片。 """ prompt: str = Field( ..., min_length=1, description="连贯的组图提示,需明确数量与内容,不超过300个汉字或600个英文单词。", ) max_images: int = Field( default=4, ge=1, le=15, description="本次请求允许生成的最大图片数量,范围 1-15。", ) image: Optional[Union[str, List[str]]] = Field( default=None, description="可选的参考图片,支持单张或多张。", ) @field_validator("prompt") @classmethod def validate_prompt_field(cls, value: str) -> str: """ 校验并规范化提示词。 Args: value: 用户输入的提示词 Returns: 规范化后的提示词 Raises: ValueError: 当提示词格式或长度不符合要求时 """ try: return validate_prompt(value) except SeedreamValidationError as exc: raise ValueError(exc.message) from exc @field_validator("max_images") @classmethod def validate_max_images_field(cls, value: int) -> int: """ 校验最大图片数量。 Args: value: 用户指定的最大生成数量 Returns: 校验通过的数量值 Raises: ValueError: 当数量超出允许范围时 """ try: return validate_max_images(value) except SeedreamValidationError as exc: raise ValueError(exc.message) from exc @field_validator("image") @classmethod def validate_reference_images( cls, value: Optional[Union[str, List[str]]] ) -> Optional[List[str]]: """ 校验参考图片列表。 Args: value: 单张图片或图片列表,None 时跳过校验 Returns: 规范化后的图片列表,None 时返回 None Raises: ValueError: 当图片数量或格式不符合要求时 """ if value is None: return None if isinstance(value, str): images = [value] else: images = value try: return validate_image_list(images, min_count=1, max_count=5) except SeedreamValidationError as exc: raise ValueError(exc.message) from exc
- seedream_mcp/server.py:124-136 (registration)MCP tool registration decorator and thin wrapper handler that registers 'seedream_sequential_generation' and delegates to the core runner.@mcp.tool( name="seedream_sequential_generation", annotations={"title": "Seedream 组图生成", **GENERATION_TOOL_ANNOTATIONS}, ) async def seedream_sequential_generation( params: SequentialGenerationInput, ) -> list[TextContent]: """ 组图输出: 支持通过一张或者多张图片和文字信息,生成漫画分镜、品牌视觉等一组内容关联的图片。 """ return await run_sequential_generation(params)
- Intermediate runner function that converts validated input to dict and calls the core handler implementation.async def run_sequential_generation( params: SequentialGenerationInput, ) -> List[TextContent]: """ 执行序列化生成工具。 Args: params: 序列化生成的已验证参数对象。 Returns: 包含生成结果的文本内容列表。 """ return await handle_sequential_generation(params.model_dump(exclude_none=True))