Skip to main content
Glama

seedream_sequential_generation

Generate sequential images like comic panels or brand visuals from one or multiple reference images and text prompts.

Instructions

组图输出:

支持通过一张或者多张图片和文字信息,生成漫画分镜、品牌视觉等一组内容关联的图片。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paramsYes

Implementation Reference

  • Core handler that executes the sequential generation logic: validates params, calls SeedreamClient API, handles auto-save, formats response.
    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 model defining and validating input parameters for the sequential generation tool.
    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
  • MCP tool registration decorator and wrapper function for the seedream_sequential_generation tool.
    @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)
  • Helper wrapper that converts Pydantic input to dict and delegates to core handle_sequential_generation.
    async def run_sequential_generation(
        params: SequentialGenerationInput,
    ) -> List[TextContent]:
        """
        执行序列化生成工具。
    
        Args:
            params: 序列化生成的已验证参数对象。
    
        Returns:
            包含生成结果的文本内容列表。
        """
        return await handle_sequential_generation(params.model_dump(exclude_none=True))

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tengmmvp/Seedream_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server