{"id":"4937f4da-ef1d-428e-a6f1-dd1ca5e1db21","entityType":"agent","slug":"clawhub-scnet-sugon-image-to-ppt","name":"image_to_ppt","canonicalUrl":"https://www.xpersona.co/agent/clawhub-scnet-sugon-image-to-ppt","canonicalPath":"/agent/clawhub-scnet-sugon-image-to-ppt","generatedAt":"2026-10-10T05:40:17.299Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T23:57:29.338Z","emptyReason":null},"description":"图片转PPT服务，将图片异步转换为 PPT 文件。 Skill: image_to_ppt Owner: scnet-sugon Summary: 图片转PPT服务，将图片异步转换为 PPT 文件。 Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-11T07:08:31.444Z | auto Initial release of image-to-ppt skill. - Provides asynchronous image-to-PPT conversion service via Scnet OCR API. - Supports automatic polling for task completion with configurable intervals and timeouts. - Outputs temporary PPT file download links on success, or user-","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.9K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17aan1jdk93c5398r3ypc523d83hqys:image-to-ppt","sourceUrl":"https://clawhub.ai/scnet-sugon/image-to-ppt","homepage":"https://clawhub.ai/scnet-sugon/skills/image-to-ppt","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/scnet-sugon/image-to-ppt","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/scnet-sugon/skills/image-to-ppt","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":65,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"图片转PPT服务，将图片异步转换为 PPT 文件。 Skill: image_to_ppt Owner: scnet-sugon Summary: 图片转PPT服务，将图片异步转换为 PPT 文件。 Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-11T07:0"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:57:29.338Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:57:29.338Z","emptyReason":null},"stars":null,"forks":null,"downloads":1862,"packageName":null,"latestVersion":"0.1.0","tractionLabel":"1.9K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:57:29.338Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T23:57:29.338Z","lastCrawledAt":"2026-10-09T23:57:29.338Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T23:57:29.338Z","lastVerifiedAt":null,"highlights":[{"version":"0.1.0","createdAt":"2026-08-11T07:08:31.444Z","changelog":"Initial release of image-to-ppt skill. - Provides asynchronous image-to-PPT conversion service via Scnet OCR API. - Supports automatic polling for task completion with configurable intervals and timeouts. - Outputs temporary PPT file download links on success, or user-friendly error messages on failure. - Requires setup of SCNET_API_KEY and supports optional polling parameters via environment variables. - Includes detailed setup, usage, and troubleshooting guidance in documentation.","fileCount":16,"zipByteSize":16664}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17aan1jdk93c5398r3ypc523d83hqys:image-to-ppt","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T05:40:17.299Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-scnet-sugon-image-to-ppt/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T23:57:29.338Z","emptyReason":null},"readme":"Skill: image_to_ppt\n\nOwner: scnet-sugon\n\nSummary: 图片转PPT服务，将图片异步转换为 PPT 文件。\n\nTags: latest:0.1.0\n\nVersion history:\n\nv0.1.0 | 2026-08-11T07:08:31.444Z | auto\n\nInitial release of image-to-ppt skill.\n\n- Provides asynchronous image-to-PPT conversion service via Scnet OCR API.\n- Supports automatic polling for task completion with configurable intervals and timeouts.\n- Outputs temporary PPT file download links on success, or user-friendly error messages on failure.\n- Requires setup of SCNET_API_KEY and supports optional polling parameters via environment variables.\n- Includes detailed setup, usage, and troubleshooting guidance in documentation.\n\nArchive index:\n\nArchive v0.1.0: 16 files, 16664 bytes\n\nFiles: assets (0b), assets/templates (0b), assets/templates/fields-summary.md (1510b), CHANGELOG.md (68b), config (0b), config/.env.example (298b), LICENSE.txt (1090b), README.md (5953b), references (0b), references/api-docs.md (8502b), scripts (0b), scripts/main.py (11211b), skill-card.md (2386b), SKILL.md (4458b), skill.yaml (441b), _meta.json (131b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: image_to_ppt\ndescription: 图片转PPT服务，将图片异步转换为 PPT 文件。\nversion: 1.0.0\nauthor: SCNet\nlicense: MIT\ntags:\n  - OCR\n  - 文档转换\n  - 图片转PPT\n\nrequired_env_vars:\n  - SCNET_API_KEY\noptional_env_vars:\n  - SCNET_API_BASE\n  - SCNET_POLL_INTERVAL\n  - SCNET_MAX_POLL_TIME\nprimary_credential: SCNET_API_KEY\ndependencies:\n  - python3\n  - requests\ninput:\n  - ocrType : 转换类型，IMAGE_TO_PPT\n  - filePath : 待转换文件的本地路径\noutput: 转换后的 PPT（.pptx）文件下载地址\n---\n# Sugon-Scnet 图片转PPT服务技能\n\n本技能封装了 Scnet OCR 服务，将图片异步转换为 PPT 文件，并通过轮询获取转换结果。\n\n---\n\n## 功能特性\n\n- **图片转 PPT**：将图片内容转换为 `.pptx`。\n- **异步任务 + 自动轮询**：提交任务后自动轮询状态，直到任务完成或超时。\n\n## 前置配置\n\n> **⚠️ 重要**：使用前需要申请 Scnet API Token\n\n### 申请 API Token\n\n1. 访问 [Scnet 官网](https://www.scnet.cn) 注册/登录\n2. 在控制台申请 API 密钥（格式：`sc-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`）\n3. 复制密钥备用\n\n### 配置 Token\n\n**手动配置（推荐）**\n1. 在技能目录下创建 `config/.env` 文件，内容如下：\n```ini\n# =====  Sugon-Scnet 文档格式转化 API 配置 =====\n# 申请地址：https://www.scnet.cn\nSCNET_API_KEY=your_scnet_api_key_here\n\n# API 基础地址（一般无需修改）\nSCNET_API_BASE=https://api.scnet.cn/api/llm/v1\n\n# 轮询配置（可选）\nSCNET_POLL_INTERVAL=5\nSCNET_MAX_POLL_TIME=600\n```\n2. 添加：`SCNET_API_KEY=你的密钥`\n3. 设置文件权限为 600（仅所有者可读写）\n\n**⚠️ 安全警告**：切勿将 API Key 直接粘贴到聊天对话中，否则可能被记录或泄露。\n\n### Token 更新\n\nToken 过期后调用会返回 401 或 403 错误。更新方法：重新申请 Token 并替换 config/.env 中的 SCNET_API_KEY。\n\n### 依赖安装\n\n本技能需要 Python 3.6+ 和 requests 库。请运行以下命令：\n\n```bash\n   pip install requests\n```\n\n---\n\n## 使用方法\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 描述 |\n|--------|------|------|------|\n| ocrType | string | 是 | 转换类型。必须为 IMAGE_TO_PPT（图片转 PPT） |\n| filePath | string | 是 | 待转换文件的本地绝对路径。图片格式。 |\n\n### 命令行调用示例\n\n```bash\n   python .claude/skills/image_to_ppt/scripts/main.py IMAGE_TO_PPT /path/to/image.png\n```\n\n### 在 AI 对话中使用\n\n用户可以说：\n\n- “把这张图片转换成 PPT，图片路径 /Users/name/Downloads/slide.png”\n\nAI 会根据 description 中的关键词自动触发本技能。\n\n### AI 调用建议\n\n- 为避免触发 API 速率限制，请串行调用本技能，等待前一个任务完成后再发起下一个请求。\n- 如果使用 OpenClaw 的 exec 工具，建议设置足够的 timeout，因为转换任务需要异步轮询。\n\n### 配置选项\n\n编辑 `config/.env` 文件：\n\n| 变量名 | 默认值 | 说明 |\n|--------|--------|------|\n| SCNET_API_KEY | 必需 | Scnet API 密钥 |\n| SCNET_API_BASE | https://api.scnet.cn/api/llm/v1 | API 基础地址（一般无需修改） |\n| SCNET_POLL_INTERVAL | 5 | 轮询状态间隔（秒） |\n| SCNET_MAX_POLL_TIME | 600 | 最大轮询等待时间（秒） |\n\n### 输出\n\n- 标准输出：转换成功时返回结果文件下载地址 JSON。\n- 结果位于 `data[0].output.results` 中，为临时 MinIO 下载链接。\n- 错误信息：如果发生错误，会输出以 `错误:` 开头的友好提示。\n\n### 注意事项\n\n- 输入文件必须与 `ocrType` 匹配：IMAGE_TO_PPT 输入图片。\n- 下载地址为临时授权链接，请及时下载使用。\n- 转换任务为异步处理，脚本会自动轮询直到完成或超时。\n\n### 故障排除\n\n| 问题 | 解决方案 |\n|------|----------|\n| 配置文件不存在 | 创建 config/.env 并填入 Token（参考前置配置） |\n| API Key 无效/过期 | 重新申请 Token 并更新 `.env` 文件 |\n| 文件不存在 | 检查提供的文件路径是否正确 |\n| 网络连接失败 | 检查网络连接或防火墙设置 |\n| 不支持的文件类型 | 确保文件扩展名为允许的类型（参考 API 文档） |\n| 401/403/Unauthorized | Token 无效或过期，重新申请并配置 |\n| 任务长时间 running | 可能是文件较大或服务繁忙，可增大 SCNET_MAX_POLL_TIME |\n| 任务失败 | 查看返回的 error_code 和 error_message |\n\nFile v0.1.0:README.md\n\n# image_to_ppt\n\n\n\n## Getting started\n\nTo make it easy for you to get started with GitLab, here's a list of recommended next steps.\n\nAlready a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!\n\n## Add your files\n\n* [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files\n* [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command:\n\n```\ncd existing_repo\ngit remote add origin https://github.com/SCNet-sugon/image_to_ppt.git\ngit branch -M main\ngit push -uf origin main\n```\n\n\n## Collaborate with your team\n\n* [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)\n* [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)\n* [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)\n* [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)\n* [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/)\n\n## Test and Deploy\n\nUse the built-in continuous integration in GitLab.\n\n* [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/)\n* [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)\n* [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)\n* [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)\n* [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)\n\n***\n\n# Editing this README\n\nWhen you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.\n\n## Suggestions for a good README\n\nEvery project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.\n\n## Name\nChoose a self-explaining name for your project.\n\n## Description\nLet people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.\n\n## Badges\nOn some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.\n\n## Visuals\nDepending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.\n\n## Installation\nWithin a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.\n\n## Usage\nUse examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.\n\n## Support\nTell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.\n\n## Roadmap\nIf you have ideas for releases in the future, it is a good idea to list them in the README.\n\n## Contributing\nState if you are open to contributions and what your requirements are for accepting them.\n\nFor people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.\n\nYou can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.\n\n## Authors and acknowledgment\nShow your appreciation to those who have contributed to the project.\n\n## License\nFor open source projects, say how it is licensed.\n\n## Project status\nIf you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ax58mnefnavcfwakqxpsgqn82tacy\",\n  \"slug\": \"image-to-ppt\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1786432111444\n}\n\nFile v0.1.0:references/api-docs.md\n\n# Scnet 文档格式转化服务 API 文档\n\n## 1. 功能介绍\n\nScnet 文档格式转化服务，支持将文档异步转换为可编辑的 Office 文件（Word / PPT），适用于大批量文档处理场景。\n\n核心流程：\n\n1. **任务提交**：通过 `doc/convert/task` 接口提交待转换的文件 URL 或本地文件，获取任务 ID；\n2. **状态查询**：通过 `ocrdoc/result` 接口轮询任务状态，获取处理结果；\n3. **结果获取**：任务成功后返回转换后的 Word / PPT 文件下载地址。\n\n### 支持的文件类型\n\n**文档格式**\n\n| 类型 | 扩展名 |\n|------|--------|\n| PDF | .pdf |\n\n**图片格式**\n\n| 类型 | 扩展名 |\n|------|--------|\n| JPEG | .jpg / .jpeg |\n| PNG | .png |\n| BMP | .bmp |\n| TIFF | .tiff / .tif |\n| WebP | .webp |\n\n说明：请根据转换类别（`ocr_type`）选择对应的输入文件——`PDF_TO_WORD` 输入 PDF，`IMAGE_TO_WORD` 与 `IMAGE_TO_PPT` 输入图片。\n\n---\n\n## 2. 文档格式转化任务提交 API\n\n将文档解析（还原）为可编辑的 Office 文件，任务成功后返回 Word（`.docx`）或 PPT（`.pptx`）的 MinIO 文件下载地址。任务提交后同样通过任务状态查询 API 轮询结果。\n\n### 2.1 端点信息\n\n| 项目 | 内容 |\n|------|------|\n| URL | POST `/api/llm/v1/doc/convert/task` |\n| Content-Type | `multipart/form-data` |\n| 认证 | `Authorization: Bearer <token>` |\n\n### 2.2 请求参数\n\n**Header 参数**\n\n| 名称 | 类型 | 必填 | 示例值 |\n|------|------|------|--------|\n| Content-Type | string | 是 | multipart/form-data |\n| Authorization | string | 是 | Bearer `<API Key>` |\n\n**Form 参数**\n\n| 名称 | 类型 | 必填 | 描述 |\n|------|------|------|------|\n| file | file | 否 | 本地上传的待转换文件。`file` 与 `file_url` 二选一，同时传入时优先使用 `file`。 |\n| file_url | string | 否 | 待转换文件的公网可访问下载地址。`file` 与 `file_url` 二选一。 |\n| ocr_type | string | 是 | 转换类别，可选值：`PDF_TO_WORD`（PDF 转 Word）、`IMAGE_TO_WORD`（图片转 Word）、`IMAGE_TO_PPT`（图片转 PPT）。 |\n| page_index | string | 否 | 页码范围（如 `1` 或 `1-5`），默认全部解析。 |\n| is_table_cls | boolean | 否 | 是否开启表格细分处理，默认 `false`。 |\n| is_doc_ori | boolean | 否 | 是否开启文档方向矫正，默认 `false`。 |\n| enforce_seal | boolean | 否 | 是否开启强制二次印章检测，默认 `false`。 |\n| is_inline_formula | boolean | 否 | 是否开启行内公式检测，默认 `false`。 |\n\n说明：`file` 与 `file_url` 二选一，必须至少提供一个，否则返回参数错误。\n\n### 2.3 请求示例\n\n**本地文件上传**\n\n```bash\ncurl --location 'https://api.scnet.cn/api/llm/v1/doc/convert/task' \\\n--header 'Authorization: Bearer <API Key>' \\\n--form 'file=@\"/path/to/document.pdf\"' \\\n--form 'ocr_type=\"PDF_TO_WORD\"'\n```\n\n**文件 URL 提交**\n\n```bash\ncurl --location 'https://api.scnet.cn/api/llm/v1/doc/convert/task' \\\n--header 'Authorization: Bearer <API Key>' \\\n--form 'file_url=\"https://oss.ksai.scnet.cn:58043/ocr/doc/xxxxxx\"' \\\n--form 'ocr_type=\"PDF_TO_WORD\"'\n```\n\n### 2.4 响应参数\n\n| 参数名称 | 参数类型 | 描述 |\n|----------|----------|------|\n| code | String | 状态码 |\n| msg | String | 结果描述 |\n| output | Object | 任务提交结果 |\n| output.task_status | String | 任务状态（`pending` 待执行、`running` 执行中、`succeeded` 成功、`failed` 失败、`unknown` 任务不存在或未知状态） |\n| output.task_id | String | 任务唯一标识，用于后续结果查询 |\n| request_id | String | 请求唯一标识 |\n\n### 2.5 响应示例\n\n**成功响应**\n\n```json\n{\n  \"code\": \"0\",\n  \"msg\": \"\",\n  \"data\": {\n    \"output\": {\n      \"task_status\": \"pending\",\n      \"task_id\": \"0385dc79-5ff8-4d82-bcb6-xxxxxx\"\n    },\n    \"request_id\": \"4909100c-7b5a-9f92-bfe5-xxxxxx\"\n  }\n}\n```\n\n**失败响应**\n\n```json\n{\n  \"code\": \"10011\",\n  \"msg\": \"Burst rate limit exceeded for model\"\n}\n```\n\n### 2.6 结果获取\n\n文档格式转化任务通过任务状态查询 API 轮询状态。任务成功后，`output.results` 数组返回转换后的 Word 或 PPT 文件的 MinIO 下载地址。\n\n```json\n{\n  \"code\": \"0\",\n  \"msg\": \"success\",\n  \"data\": [\n    {\n      \"output\": {\n        \"results\": [\n          \"https://minio.fanhualuomu.top:8088/doc-convert/results/2026/05/19/2056703208598626305/document.docx?...\"\n        ],\n        \"task_id\": \"2056703208598626305\",\n        \"task_status\": \"succeeded\",\n        \"submit_time\": \"2026-05-19 19:47:11\",\n        \"end_time\": \"2026-05-19 19:47:40\"\n      },\n      \"request_id\": \"5e726f4f7d518259\"\n    }\n  ]\n}\n```\n\n说明：`results` 中的下载地址后缀为 `.docx`（Word）或 `.pptx`（PPT），具体格式由转换任务的目标类型决定。下载地址为临时授权链接，请及时使用。\n\n---\n\n## 3. 任务状态查询 API\n\n### 3.1 端点信息\n\n| 项目 | 内容 |\n|------|------|\n| URL | POST `/api/llm/v1/ocrdoc/result` |\n| 认证 | `Authorization: Bearer <token>` |\n\n### 3.2 请求参数\n\n**Header 参数**\n\n| 名称 | 类型 | 必填 | 示例值 |\n|------|------|------|--------|\n| Authorization | string | 是 | Bearer `<API Key>` |\n\n**Body 参数**\n\n| 名称 | 类型 | 必填 | 描述 |\n|------|------|------|------|\n| task_ids | array | 是 | 任务 ID 列表 |\n\n### 3.3 请求体示例\n\n```json\n{\n  \"task_ids\": [\n    \"2056706028668284929\",\n    \"2056703208598626305\"\n  ]\n}\n```\n\n### 3.4 响应参数\n\n| 参数名称 | 参数类型 | 描述 |\n|----------|----------|------|\n| code | String | 状态码 |\n| msg | String | 结果描述 |\n| data | Array | 任务结果列表（每个 task_id 对应一个元素） |\n| data[].request_id | String | 请求唯一标识 |\n| data[].output | Object | 任务结果 |\n| data[].output.task_id | String | 任务唯一标识 |\n| data[].output.task_status | String | 任务状态 |\n| data[].output.submit_time | String | 任务提交时间 |\n| data[].output.end_time | String | 任务结束时间（成功/失败时返回） |\n| data[].output.results | Array | 结果文件下载地址列表（成功时返回） |\n| data[].output.error_code | String | 错误码（失败时返回） |\n| data[].output.error_message | String | 错误信息（失败时返回） |\n\n### 3.5 响应示例\n\n**任务成功**\n\n```json\n{\n  \"code\": \"0\",\n  \"msg\": \"success\",\n  \"data\": [\n    {\n      \"output\": {\n        \"results\": [\n          \"https://minio.fanhualuomu.top:8088/doc-convert/results/2026/05/19/2056703208598626305/document.docx?...\"\n        ],\n        \"task_id\": \"2056703208598626305\",\n        \"task_status\": \"succeeded\",\n        \"submit_time\": \"2026-05-19 19:47:11\",\n        \"end_time\": \"2026-05-19 19:47:40\"\n      },\n      \"request_id\": \"5e726f4f7d518259\"\n    }\n  ]\n}\n```\n\n**任务进行中**\n\n```json\n{\n  \"code\": \"0\",\n  \"msg\": \"\",\n  \"data\": [\n    {\n      \"request_id\": \"8ae698ba-df2d-966c-abcf-xxxxxx\",\n      \"output\": {\n        \"task_id\": \"e56d806f-76f9-4037-aefa-xxxxxx\",\n        \"task_status\": \"running\",\n        \"submit_time\": \"2026-04-20 19:33:50.425\"\n      }\n    }\n  ]\n}\n```\n\n**任务失败**\n\n```json\n{\n  \"code\": \"0\",\n  \"msg\": \"\",\n  \"data\": [\n    {\n      \"request_id\": \"c61fe158-c0de-40f0-b4d9-964625119ba4\",\n      \"output\": {\n        \"task_id\": \"86ecf553-d340-4e21-xxxxxxxxx\",\n        \"task_status\": \"failed\",\n        \"submit_time\": \"2025-11-11 11:46:28.116\",\n        \"end_time\": \"2025-11-11 11:46:28.255\",\n        \"error_code\": \"10011\",\n        \"error_message\": \"Burst rate limit exceeded for model xxx\"\n      }\n    }\n  ]\n}\n```\n\n---\n\n## 4. 任务状态说明\n\n| 状态 | 描述 |\n|------|------|\n| pending | 任务已提交，等待处理 |\n| running | 任务处理中 |\n| succeeded | 任务处理成功 |\n| failed | 任务处理失败 |\n| unknown | 任务不存在或未知状态 |\n\n---\n\n## 5. 错误码说明\n\n| 错误码 | 描述 |\n|--------|------|\n| 10001 | Unknown error |\n| 10002 | Unsupported modal type xxx |\n| 10003 | Unsupported provider xxx |\n| 10004 | Unsupported model xxx |\n| 10005 | Model xxx not found |\n| 10006 | Task not found |\n| 10007 | Concurrency conflict for request, please try again later |\n| 10008 | Provider xxx process error |\n| 10009 | Model xxx route failed |\n| 10010 | Illegal content detected by content approval |\n| 10011 | Burst rate limit exceeded for model xxx |\n| 10012 | An system error has occurred, please try again later |\n| 10013 | Parameter illegal |\n| 10014 | Incorrect API key provided |\n| 10015 | Task timeout, please try again later |\n\nFile v0.1.0:assets/templates/fields-summary.md\n\n# 文档格式转化任务字段说明\n\n## 输出字段（submit_task 提交后返回）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | String | 状态码，`0` 表示成功 |\n| msg | String | 结果描述 |\n| data | Object | 任务提交结果 |\n| data.output.task_status | String | 任务状态（pending / running / succeeded / failed / unknown） |\n| data.output.task_id | String | 任务唯一标识，用于后续结果查询 |\n| request_id | String | 请求唯一标识 |\n\n## 结果字段（ocrdoc/result 轮询成功后返回）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | String | 状态码，`0` 表示成功 |\n| msg | String | 结果描述 |\n| data | Array | 任务结果列表（每个 task_id 对应一个元素） |\n| data[].request_id | String | 请求唯一标识 |\n| data[].output | Object | 任务结果 |\n| data[].output.task_id | String | 任务唯一标识 |\n| data[].output.task_status | String | 任务状态 |\n| data[].output.submit_time | String | 任务提交时间 |\n| data[].output.end_time | String | 任务结束时间（成功/失败时返回） |\n| data[].output.results | Array | 结果文件下载地址列表（成功时返回） |\n| data[].output.error_code | String | 错误码（失败时返回） |\n| data[].output.error_message | String | 错误信息（失败时返回） |\n\n## 下载地址说明\n\n- `results` 中的下载地址后缀为 `.docx`（Word）或 `.pptx`（PPT）。\n- 下载地址为临时授权链接，请及时使用。\n\nFile v0.1.0:CHANGELOG.md\n\n# 变更日志\n\n## [1.0.0] - 2026-08-11\n新增图片转PPT功能\n\nFile v0.1.0:skill-card.md\n\n## Description:\n\nConverts local image files into PPT files through Scnet's asynchronous OCR document conversion service.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[scnet-sugon](https://clawhub.ai/user/scnet-sugon)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and operators use this skill to submit image files for OCR-based conversion into editable PPT output and retrieve the resulting temporary download links.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can upload any readable local file to Scnet's remote service.\n\nMitigation: Use only non-sensitive image files and confirm the exact local file path before each run.\n\nRisk: The API base URL is configurable, which can redirect uploads and credentials to another endpoint.\n\nMitigation: Keep SCNET_API_BASE fixed to the official HTTPS endpoint unless the alternative endpoint is fully trusted.\n\nRisk: The scanner summary says the skill does not validate that the selected file is an image.\n\nMitigation: Check file type before use and limit inputs to supported image formats such as JPEG, PNG, BMP, TIFF, and WebP.\n\nRisk: Successful conversions return temporary download links for generated PPT files.\n\nMitigation: Download results promptly and share links only with authorized recipients.\n\n## Reference(s):\n\n- [Scnet API documentation](artifact/references/api-docs.md)\n- [ClawHub skill page](https://clawhub.ai/scnet-sugon/skills/image-to-ppt)\n- [Publisher profile](https://clawhub.ai/user/scnet-sugon)\n- [Server-resolved source repository](https://github.com/SCNet-sugon/image_to_ppt)\n- [Scnet website](https://www.scnet.cn)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, file links]\n\n**Output Format:** [JSON on success with temporary PPT download links; plain-text error messages on failure.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires SCNET_API_KEY and polls asynchronously until completion, failure, or timeout.]\n\n## Skill Version(s):\n\n0.1.0 (source: server release metadata; artifact frontmatter and changelog report 1.0.0)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.1.0:skill.yaml\n\nname: image_to_ppt\nversion: 1.0.0\ndescription: 图片转PPT服务，将图片异步转换为 PPT 文件。\nauthor: SCNet\nlicense: MIT\ntags:\n  - OCR\n  - 文档转换\n  - 图片转PPT\n\nrequired_env_vars:\n  - SCNET_API_KEY\n\noptional_env_vars:\n  - SCNET_API_BASE\n  - SCNET_POLL_INTERVAL\n  - SCNET_MAX_POLL_TIME\n\nprimary_credential: SCNET_API_KEY\n\nhomepage: https://github.com/SCNet-sugon/image_to_ppt.git\n\ndependencies:\n  - python3\n  - requests\n\nFile v0.1.0:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2025 Sugon-Scnet OCR Skill Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","readmeExcerpt":"Skill: image_to_ppt Owner: scnet-sugon Summary: 图片转PPT服务，将图片异步转换为 PPT 文件。 Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-11T07:08:31.444Z | auto Initial release of image-to-ppt skill. - Provides asynchronous image-to-PPT conversion service via Scnet OCR API. - Supports automatic polling for task completion with configurable intervals and timeouts. - Outputs temporary PPT file download links on success, or user-","codeSnippets":[],"executableExamples":[{"language":"ini","snippet":"# =====  Sugon-Scnet 文档格式转化 API 配置 =====\n# 申请地址：https://www.scnet.cn\nSCNET_API_KEY=your_scnet_api_key_here\n\n# API 基础地址（一般无需修改）\nSCNET_API_BASE=https://api.scnet.cn/api/llm/v1\n\n# 轮询配置（可选）\nSCNET_POLL_INTERVAL=5\nSCNET_MAX_POLL_TIME=600"},{"language":"bash","snippet":"pip install requests"},{"language":"bash","snippet":"python .claude/skills/image_to_ppt/scripts/main.py IMAGE_TO_PPT /path/to/image.png"},{"language":"text","snippet":"cd existing_repo\ngit remote add origin https://github.com/SCNet-sugon/image_to_ppt.git\ngit branch -M main\ngit push -uf origin main"},{"language":"bash","snippet":"curl --location 'https://api.scnet.cn/api/llm/v1/doc/convert/task' \\\n--header 'Authorization: Bearer <API Key>' \\\n--form 'file=@\"/path/to/document.pdf\"' \\\n--form 'ocr_type=\"PDF_TO_WORD\"'"},{"language":"bash","snippet":"curl --location 'https://api.scnet.cn/api/llm/v1/doc/convert/task' \\\n--header 'Authorization: Bearer <API Key>' \\\n--form 'file=@\"/path/to/document.pdf\"' \\\n--form 'ocr_type=\"PDF_TO_WORD\"'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: image_to_ppt\ndescription: 图片转PPT服务，将图片异步转换为 PPT 文件。\nversion: 1.0.0\nauthor: SCNet\nlicense: MIT\ntags:\n  - OCR\n  - 文档转换\n  - 图片转PPT\n\nrequired_env_vars:\n  - SCNET_API_KEY\noptional_env_vars:\n  - SCNET_API_BASE\n  - SCNET_POLL_INTERVAL\n  - SCNET_MAX_POLL_TIME\nprimary_credential: SCNET_API_KEY\ndependencies:\n  - python3\n  - requests\ninput:\n  - ocrType : 转换类型，IMAGE_TO_PPT\n  - filePath : 待转换文件的本地路径\noutput: 转换后的 PPT（.pptx）文件下载地址\n---\n# Sugon-Scnet 图片转PPT服务技能\n\n本技能封装了 Scnet OCR 服务，将图片异步转换为 PPT 文件，并通过轮询获取转换结果。\n\n---\n\n## 功能特性\n\n- **图片转 PPT**：将图片内容转换为 `.pptx`。\n- **异步任务 + 自动轮询**：提交任务后自动轮询状态，直到任务完成或超时。\n\n## 前置配置\n\n> **⚠️ 重要**：使用前需要申请 Scnet API Token\n\n### 申请 API Token\n\n1. 访问 [Scnet 官网](https://www.scnet.cn) 注册/登录\n2. 在控制台申请 API 密钥（格式：`sc-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`）\n3. 复制密钥备用\n\n### 配置 Token\n\n**手动配置（推荐）**\n1. 在技能目录下创建 `config/.env` 文件，内容如下：\n```ini\n# =====  Sugon-Scnet 文档格式转化 API 配置 =====\n# 申请地址：https://www.scnet.cn\nSCNET_API_KEY=your_scnet_api_key_here\n\n# API 基础地址（一般无需修改）\nSCNET_API_BASE=https://api.scnet.cn/api/llm/v1\n\n# 轮询配置（可选）\nSCNET_POLL_INTERVAL=5\nSCNET_MAX_POLL_TIME=600\n```\n2. 添加：`SCNET_API_KEY=你的密钥`\n3. 设置文件权限为 600（仅所有者可读写）\n\n**⚠️ 安全警告**：切勿将 API Key 直接粘贴到聊天对话中，否则可能被记录或泄露。\n\n### Token 更新\n\nToken 过期后调用会返回 401 或 403 错误。更新方法：重新申请 Token 并替换 config/.env 中的 SCNET_API_KEY。\n\n### 依赖安装\n\n本技能需要 Python 3.6+ 和 requests 库。请运行以下命令：\n\n```bash\n   pip install requests\n```\n\n---\n\n## 使用方法\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 描述 |\n|--------|------|------|------|\n| ocrType | string | 是 | 转换类型。必须为 IMAGE_TO_PPT（图片转 PPT） |\n| filePath | string | 是 | 待转换文件的本地绝对路径。图片格式。 |\n\n### 命令行调用示例\n\n```bash\n   python .claude/skills/image_to_ppt/scripts/main.py IMAGE_TO_PPT /path/to/image.png\n```\n\n### 在 AI 对话中使用\n\n用户可以说：\n\n- “把这张图片转换成 PPT，图片路径 /Users/name/Downloads/slide.png”\n\nAI 会根据 description 中的关键词自动触发本技能。\n\n### AI 调用建议\n\n- 为避免触发 API 速率限制，请串行调用本技能，等待前一个任务完成后再发起下一个请求。\n- 如果使用 OpenClaw 的 exec 工具，建议设置足够的 timeout，因为转换任务需要异步轮询。\n\n### 配置选项\n\n编辑 `config/.env` 文件：\n\n| 变量名 | 默认值 | 说明 |\n|--------|--------|------|\n| SCNET_API_KEY | 必需 | Scnet API 密钥 |\n| SCNET_API_BASE | https://api.scnet.cn/api/llm/v1 | API 基础地址（一般无需修改） |\n| SCNET_POLL_INTERVAL | 5 | 轮询状态间隔（秒） |\n| SCNET_MAX_POLL_TIME | 600 | 最大轮询等待时间（秒） |\n\n### 输出\n\n- 标准输出：转换成功时返回结果文件下载地址 JSON。\n- 结果位于 `data[0].output.results` 中，为临时 MinIO 下载链接。\n- 错误信息：如果发生错误，会输出以 `错误:` 开头的友好提示。\n\n### 注意事项\n\n- 输入文件必须与 `ocrType` 匹配：IMAGE_TO_PPT 输入图片。\n- 下载地址为临时授权链接，请及时下载使用。\n- 转换任务为异步处理，脚本会自动轮询直到完成或超时。\n\n### 故障排除\n\n| 问题 | 解决方案 |\n|------|----------|\n| 配置文件不存在 | 创建 config/.env 并填入 Token（参考前置配置） |\n| API Key 无效/过期 | 重新申请 Token 并更新 `.env` 文件 |\n| 文件不存在 | 检查提供的文件路径是否正确 |\n| 网络连接失败 | 检查网络连接或防火墙设置 |\n| 不支持的文件类型 | 确保文件扩展名为允许的类型（参考 API 文档） |\n| 401/403/Unauthorized | Token 无效或过期，重新申请并配置 |\n| 任务长时间 running | 可能是文件较大或服务繁忙，可增大 SCNET_MAX_POLL_TIME |\n| 任务失败 | 查看返回的 error_code 和 error_message |"},{"path":"README.md","content":"# image_to_ppt\n\n\n\n## Getting started\n\nTo make it easy for you to get started with GitLab, here's a list of recommended next steps.\n\nAlready a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!\n\n## Add your files\n\n* [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files\n* [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command:\n\n```\ncd existing_repo\ngit remote add origin https://github.com/SCNet-sugon/image_to_ppt.git\ngit branch -M main\ngit push -uf origin main\n```\n\n\n## Collaborate with your team\n\n* [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)\n* [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)\n* [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)\n* [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)\n* [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/)\n\n## Test and Deploy\n\nUse the built-in continuous integration in GitLab.\n\n* [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/)\n* [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)\n* [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)\n* [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)\n* [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)\n\n***\n\n# Editing this README\n\nWhen you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.\n\n## Suggestions for a good README\n\nEvery project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.\n\n## Name\nChoose a self-explaining name for your project.\n\n## Description\nLet people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background su"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7ax58mnefnavcfwakqxpsgqn82tacy\",\n  \"slug\": \"image-to-ppt\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1786432111444\n}"},{"path":"references/api-docs.md","content":"# Scnet 文档格式转化服务 API 文档\n\n## 1. 功能介绍\n\nScnet 文档格式转化服务，支持将文档异步转换为可编辑的 Office 文件（Word / PPT），适用于大批量文档处理场景。\n\n核心流程：\n\n1. **任务提交**：通过 `doc/convert/task` 接口提交待转换的文件 URL 或本地文件，获取任务 ID；\n2. **状态查询**：通过 `ocrdoc/result` 接口轮询任务状态，获取处理结果；\n3. **结果获取**：任务成功后返回转换后的 Word / PPT 文件下载地址。\n\n### 支持的文件类型\n\n**文档格式**\n\n| 类型 | 扩展名 |\n|------|--------|\n| PDF | .pdf |\n\n**图片格式**\n\n| 类型 | 扩展名 |\n|------|--------|\n| JPEG | .jpg / .jpeg |\n| PNG | .png |\n| BMP | .bmp |\n| TIFF | .tiff / .tif |\n| WebP | .webp |\n\n说明：请根据转换类别（`ocr_type`）选择对应的输入文件——`PDF_TO_WORD` 输入 PDF，`IMAGE_TO_WORD` 与 `IMAGE_TO_PPT` 输入图片。\n\n---\n\n## 2. 文档格式转化任务提交 API\n\n将文档解析（还原）为可编辑的 Office 文件，任务成功后返回 Word（`.docx`）或 PPT（`.pptx`）的 MinIO 文件下载地址。任务提交后同样通过任务状态查询 API 轮询结果。\n\n### 2.1 端点信息\n\n| 项目 | 内容 |\n|------|------|\n| URL | POST `/api/llm/v1/doc/convert/task` |\n| Content-Type | `multipart/form-data` |\n| 认证 | `Authorization: Bearer <token>` |\n\n### 2.2 请求参数\n\n**Header 参数**\n\n| 名称 | 类型 | 必填 | 示例值 |\n|------|------|------|--------|\n| Content-Type | string | 是 | multipart/form-data |\n| Authorization | string | 是 | Bearer `<API Key>` |\n\n**Form 参数**\n\n| 名称 | 类型 | 必填 | 描述 |\n|------|------|------|------|\n| file | file | 否 | 本地上传的待转换文件。`file` 与 `file_url` 二选一，同时传入时优先使用 `file`。 |\n| file_url | string | 否 | 待转换文件的公网可访问下载地址。`file` 与 `file_url` 二选一。 |\n| ocr_type | string | 是 | 转换类别，可选值：`PDF_TO_WORD`（PDF 转 Word）、`IMAGE_TO_WORD`（图片转 Word）、`IMAGE_TO_PPT`（图片转 PPT）。 |\n| page_index | string | 否 | 页码范围（如 `1` 或 `1-5`），默认全部解析。 |\n| is_table_cls | boolean | 否 | 是否开启表格细分处理，默认 `false`。 |\n| is_doc_ori | boolean | 否 | 是否开启文档方向矫正，默认 `false`。 |\n| enforce_seal | boolean | 否 | 是否开启强制二次印章检测，默认 `false`。 |\n| is_inline_formula | boolean | 否 | 是否开启行内公式检测，默认 `false`。 |\n\n说明：`file` 与 `file_url` 二选一，必须至少提供一个，否则返回参数错误。\n\n### 2.3 请求示例\n\n**本地文件上传**\n\n```bash\ncurl --location 'https://api.scnet.cn/api/llm/v1/doc/convert/task' \\\n--header 'Authorization: Bearer <API Key>' \\\n--form 'file=@\"/path/to/document.pdf\"' \\\n--form 'ocr_type=\"PDF_TO_WORD\"'\n```\n\n**文件 URL 提交**\n\n```bash\ncurl --location 'https://api.scnet.cn/api/llm/v1/doc/convert/task' \\\n--header 'Authorization: Bearer <API Key>' \\\n--form 'file_url=\"https://oss.ksai.scnet.cn:58043/ocr/doc/xxxxxx\"' \\\n--form 'ocr_type=\"PDF_TO_WORD\"'\n```\n\n### 2.4 响应参数\n\n| 参数名称 | 参数类型 | 描述 |\n|----------|----------|------|\n| code | String | 状态码 |\n| msg | String | 结果描述 |\n| output | Object | 任务提交结果 |\n| output.task_status | String | 任务状态（`pending` 待执行、`running` 执行中、`succeeded` 成功、`failed` 失败、`unknown` 任务不存在或未知状态） |\n| output.task_id | String | 任务唯一标识，用于后续结果查询 |\n| request_id | String | 请求唯一标识 |\n\n### 2.5 响应示例\n\n**成功响应**\n\n```json\n{\n  \"code\": \"0\",\n  \"msg\": \"\",\n  \"data\": {\n    \"output\": {\n      \"task_status\": \"pending\",\n      \"task_id\": \"0385dc79-5ff8-4d82-bcb6-xxxxxx\"\n    },\n    \"request_id\": \"4909100c-7b5a-9f92-bfe5-xxxxxx\"\n  }\n}\n```\n\n**失败响应**\n\n```json\n{\n  \"code\": \"10011\",\n  \"msg\": \"Burst rate limit exceeded for model\"\n}\n```\n\n### 2.6 结果获取\n\n文档格式转化任务通过任务状态查询 API 轮询状态。任务成功后，`output.results` 数组返回转换后的 Word 或 PPT 文件的 MinIO 下载地址。\n\n```json\n{\n  \"code\": \"0\",\n  \"msg\": \"success\""},{"path":"assets/templates/fields-summary.md","content":"# 文档格式转化任务字段说明\n\n## 输出字段（submit_task 提交后返回）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | String | 状态码，`0` 表示成功 |\n| msg | String | 结果描述 |\n| data | Object | 任务提交结果 |\n| data.output.task_status | String | 任务状态（pending / running / succeeded / failed / unknown） |\n| data.output.task_id | String | 任务唯一标识，用于后续结果查询 |\n| request_id | String | 请求唯一标识 |\n\n## 结果字段（ocrdoc/result 轮询成功后返回）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | String | 状态码，`0` 表示成功 |\n| msg | String | 结果描述 |\n| data | Array | 任务结果列表（每个 task_id 对应一个元素） |\n| data[].request_id | String | 请求唯一标识 |\n| data[].output | Object | 任务结果 |\n| data[].output.task_id | String | 任务唯一标识 |\n| data[].output.task_status | String | 任务状态 |\n| data[].output.submit_time | String | 任务提交时间 |\n| data[].output.end_time | String | 任务结束时间（成功/失败时返回） |\n| data[].output.results | Array | 结果文件下载地址列表（成功时返回） |\n| data[].output.error_code | String | 错误码（失败时返回） |\n| data[].output.error_message | String | 错误信息（失败时返回） |\n\n## 下载地址说明\n\n- `results` 中的下载地址后缀为 `.docx`（Word）或 `.pptx`（PPT）。\n- 下载地址为临时授权链接，请及时使用。"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"图片转PPT服务，将图片异步转换为 PPT 文件。 Skill: image_to_ppt Owner: scnet-sugon Summary: 图片转PPT服务，将图片异步转换为 PPT 文件。 Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-11T07:08:31.444Z | auto Initial release of image-to-ppt skill. - Provides asynchronous image-to-PPT conversion service via Scnet OCR API. - Supports automatic polling for task completion with configurable intervals and timeouts. - Outputs temporary PPT file download links on success, or user-","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1163,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:57:29.338Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:57:29.338Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T05:40:17.299Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}