放大图片到 2K/4K Args: at: Access Token project_id: 项目ID media_id: 图片的 mediaId (从 batchGenerateImages 返回的 media[0]["name"]) target_resolution: UPSAMPLE_IMAGE_RESOLUTION_2K 或 UPSAMPLE_IMAGE_RESOLUTION_4K user_paygate_tier: 用户等级 (如 PAYGAT
(
self,
at: str,
project_id: str,
media_id: str,
target_resolution: str = "UPSAMPLE_IMAGE_RESOLUTION_4K",
user_paygate_tier: str = "PAYGATE_TIER_NOT_PAID",
session_id: Optional[str] = None,
token_id: Optional[int] = None
)
| 1742 | raise last_error |
| 1743 | |
| 1744 | async def upsample_image( |
| 1745 | self, |
| 1746 | at: str, |
| 1747 | project_id: str, |
| 1748 | media_id: str, |
| 1749 | target_resolution: str = "UPSAMPLE_IMAGE_RESOLUTION_4K", |
| 1750 | user_paygate_tier: str = "PAYGATE_TIER_NOT_PAID", |
| 1751 | session_id: Optional[str] = None, |
| 1752 | token_id: Optional[int] = None |
| 1753 | ) -> str: |
| 1754 | """放大图片到 2K/4K |
| 1755 | |
| 1756 | Args: |
| 1757 | at: Access Token |
| 1758 | project_id: 项目ID |
| 1759 | media_id: 图片的 mediaId (从 batchGenerateImages 返回的 media[0]["name"]) |
| 1760 | target_resolution: UPSAMPLE_IMAGE_RESOLUTION_2K 或 UPSAMPLE_IMAGE_RESOLUTION_4K |
| 1761 | user_paygate_tier: 用户等级 (如 PAYGATE_TIER_NOT_PAID / PAYGATE_TIER_ONE) |
| 1762 | session_id: 可选,复用图片生成请求的 sessionId |
| 1763 | |
| 1764 | Returns: |
| 1765 | base64 编码的图片数据 |
| 1766 | """ |
| 1767 | url = f"{self.api_base_url}/flow/upsampleImage" |
| 1768 | |
| 1769 | # 403/reCAPTCHA/500 重试逻辑 - 使用配置的最大重试次数 |
| 1770 | max_retries = config.flow_max_retries |
| 1771 | last_error = None |
| 1772 | |
| 1773 | for retry_attempt in range(max_retries): |
| 1774 | # 获取 reCAPTCHA token - 使用 IMAGE_GENERATION action |
| 1775 | recaptcha_token, browser_id = await self._get_recaptcha_token( |
| 1776 | project_id, |
| 1777 | action="IMAGE_GENERATION", |
| 1778 | token_id=token_id |
| 1779 | ) |
| 1780 | if not recaptcha_token: |
| 1781 | last_error = Exception("Failed to obtain reCAPTCHA token") |
| 1782 | should_retry = await self._handle_missing_recaptcha_token( |
| 1783 | retry_attempt=retry_attempt, |
| 1784 | max_retries=max_retries, |
| 1785 | browser_id=browser_id, |
| 1786 | project_id=project_id, |
| 1787 | log_prefix="[IMAGE UPSAMPLE] 放大", |
| 1788 | ) |
| 1789 | if should_retry: |
| 1790 | continue |
| 1791 | raise last_error |
| 1792 | upsample_session_id = session_id or self._generate_session_id() |
| 1793 | |
| 1794 | json_data = { |
| 1795 | "mediaId": media_id, |
| 1796 | "targetResolution": target_resolution, |
| 1797 | "clientContext": { |
| 1798 | "recaptchaContext": { |
| 1799 | "token": recaptcha_token, |
| 1800 | "applicationType": "RECAPTCHA_APPLICATION_TYPE_WEB" |
| 1801 | }, |
no test coverage detected